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?
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:
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.
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)
Çü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.