Neden tüm Mac uygulamaları Linux'a kolayca taşınabilir değil?


15

Apple OS-X işletim sistemi UNIX türevi (BSD) olduğundan ve temeldeki (Intel) Mac mimarisi aynı olduğundan, Apple'a özgü uygulamaların Linux'ta çalışmasını sağlamak neden çok basit değildir?

Yanıtlar:


23

OS X aslında (çoğunlukla) BSD'nin üzerindeki tescilli grafik kabuğudur. Bir OS X GUI uygulaması oluşturmak için, Apple'ın maruz kaldığı api'yi takip etmek gerekir ve bu nedenle bu çapraz platform değildir ve kolayca taşınabilir değildir.
En kütüphaneler yüzden edilir kolayca Linux (aslında en Linux üzerinde geliştirilen) uyarlanmış ancak değil onların grafiksel kabukları.

Bir yan notta: Çapraz platform GUI uygulamaları oluşturabileceğiniz çerçeveler var. Qt akla geliyor. Ancak bu çerçevelerin çapraz platform olması, kendileriyle oluşturulan uygulamaları belirli bir platformda "yerel" GUI uygulamasından daha az kullanıcı dostu yapar. Bu çerçeveler, Apple'ın kötü olduğu durumlarda platformlarda her şeyin genel görünmesini sağlama eğilimindedir, çünkü Apple diğer platformlara kolayca "sığmayan" çok özel bir kullanıcı deneyimi yaratmıştır.

Düzenle (yorumları cevaba dahil etmek için - teşekkürler @Nick, @kbisset ve @John):
Çözüm, tüm OS X grafik kabuğunu (kapalı kaynak Kakao / Çekirdek kütüphaneleri - OS X'i gerçekten benzersiz kılan şey) taşımaktır. ) Linux'a. Ve teknik olarak, Apple bunu oldukça kolay yapabilirdi, ancak tüm iş modelleri donanımlarının ve yazılımlarının tüm platformunun benzersizliği olduğundan, hiçbir nedenleri yok.
Birinin kütüphaneleri klonlamaya çalışması KAVRAM EDİLEBİLİR, ancak bu on yıllarca sürecek ve çoğaltılması gereken belgelenmemiş tüm çağrılar nedeniyle muhtemelen asla doğru olmayacaktır.


Tescilli grafik kabuğu, BSD üzerinde çalışıyorsa neden Linux'a nispeten kolayca taşınamıyor? Temel mimarinin farklı olduğu sorunu anladım, ancak şimdi temeldeki mimari sadece Intel, o zaman neden grafik kabuk sadece bir kütüphane değil?
Nick Pierpoint

8
İki sebep. Birincisi, sadece grafiksel bir kabuktan daha fazlasıdır. Apple'ın yıllardır üzerinde çalıştığı Unix'in üzerindeki tüm bir katman. İkincisi, kod mevcut değil. Bu yüzden sıfırdan yeniden yazılması gerekir. Apple muhtemelen kısa bir süre içinde yapabilirdi, ancak bunun için bir neden yok.
KeithB

1
Yani ... Apple için en azından gerçekten teknik bir sorun yok - OS-X'i UNIX'te zaten çalıştırdığı için Linux üzerinde nispeten kolay bir şekilde çalıştırabilirler. Açıkçası kod kapalı kaynak olduğundan ve tam olarak yayınlanmış bir API olmadığı için herkes için büyük bir anlaşma. Bu adil bir özet midir?
Nick Pierpoint

3
Nick: Aslında evet. Elma sahip hiçbir Linux platformuna OSX hareketli ilgi; neden açık kaynak Darwin platformlarına (BSD katmanı) ve kapalı kaynak Cocoa / Core * kütüphanelerine (OSX'i gerçekten benzersiz kılan şey) bu kadar yatırım yaptıklarında? Tüm iş modeli, tüm platformlarının benzersizliğidir - donanım ve yazılım. Birinin kütüphaneleri klonlamaya çalışması KAVRAM EDİLEBİLİR, ancak bu on yıllarca sürecek ve çoğaltılması gereken belgelenmemiş tüm çağrılar nedeniyle muhtemelen asla doğru olmayacaktır. Hangi amaçla?
John Rudy

4
GNUStep, şu anda OS X'te bulunan çekirdek kütüphanelerin çoğunun açık kaynaklı bir uygulamasıdır, ancak Apple o zamandan beri birçok şeyi ekledi, bu yüzden taşıma hala o kadar kolay değil: wiki.gnustep.org/index.php/Cocoa
TRS-80

2

Apple'a özgü uygulamalarla mı demek istediniz GUI uygulamaları? Komut satırının üzerine çıktığınızda, Linux'ta desteklenmeyen her şey için (grafik, ses vb.) Apple'a özel API'ler vardır, bu nedenle uygulamaları kolayca taşıyamazsınız.


1

Grafik katman hiç de aynı değil. OS X tescilli bir grafik çerçevesi kullanır, linux X kullanır (X11 / X.org)

Neredeyse tüm yerel OS X uygulamaları, yalnızca OS X'te bulunan Kakao, CoreAnimation ve benzeri çerçeveler kullanır.

Örneğin, kullanıcı için bir parola depolayan bir uygulamanız olduğunu varsayalım - OS X'te, bu onun Anahtarlık zincirini ve ilgili API'ları kullanır. Bunu Linux'a taşıyacak olsaydınız, doğrudan bir eşdeğer yoktur, bu nedenle tüm bu özelliği yeniden ifade etmeniz gerekir. Bu küçük bir özelliktir ve büyük bir yeniden yazma gerektirir.

Uygulamanızı GTK, Qt veya wxWidgets gibi bir platformlar arası GUI kitaplığı kullanarak yazarsanız ve taşıma işlemi çok daha kolay olur (veya "mümkün") - ancak işletim sistemleri hala kullanıcı arayüzü (örneğin işletim sistemi) açısından çok farklıdır. X, ayrılmış bir menü çubuğu kullanırken, Linux her pencere için menü çubuğuna sahip olma eğilimindedir)

Gördüğüm en iyi platformlar arası portlarından biri olan Vites ayrı olarak, her bir platformlar için doğal GUI oluşturmak (mümkün olduğunca az platforma özel kodu içerir), bir kütüphane olarak ana özelliğe uygular. Bu, her bağlantı noktasının çok sayıda kodu paylaştığı, ancak hepsinin iyi, yerel arabirimlere sahip olduğu anlamına gelir (Linux'a iyi uyan, ancak OS X'te yer alan tek bir arabirim yerine veya tersi)

Cocotron adında , "Apple Inc.'in Kakao dokümantasyonunda tarif edilene benzer bir platformlar arası Objective-C API uygulamayı amaçlayan" bir proje var, bu da portlemeyi çok daha kolay hale getirecek, ancak çok geç bir etkinlik var gibi görünüyor (son blog yazısı Aralık 2008'deydi)


1

Çünkü çoğu uygulama, üzerinde çalıştıkları makinenin işlemcisinden ve temel mimarisinden çok daha fazlasına bağlıdır. Ayrıca kullanıcı arayüzü araç setlerine ve platforma özgü diğer kütüphanelere de bağlıdırlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.