Da das Betriebssystem Apple OS-X ein UNIX-Derivat (BSD) ist und die zugrunde liegende (Intel) Mac-Architektur dieselbe ist, warum ist es nicht sehr einfach, Apple-spezifische Anwendungen unter Linux zum Laufen zu bringen?
OS X ist (meistens) die proprietäre grafische Shell auf BSD. Um eine OS X-GUI-Anwendung zu erstellen, muss man der von Apple bereitgestellten API folgen. Daher ist diese nicht plattformübergreifend und nicht leicht portierbar.
Das ist der Grund, warum die meisten Bibliotheken leicht nach Linux portiert werden können (die meisten sind unter Linux entwickelt), nicht jedoch ihre grafischen Shells.
Nebenbei bemerkt: Es gibt Frameworks, mit denen Sie plattformübergreifende GUI-Anwendungen erstellen können. Qt fällt mir ein. Die Tatsache, dass diese Frameworks plattformübergreifend sind, macht die mit ihnen erstellten Anwendungen auf einer bestimmten Plattform weniger benutzerfreundlich als eine "native" GUI-Anwendung. Diese Frameworks lassen alles plattformübergreifend generisch aussehen, was im Falle von Apple schlecht ist, da Apple eine sehr spezifische Benutzererfahrung geschaffen hat, die nicht einfach in andere Plattformen "passt".
Bearbeiten (um die Kommentare in die Antwort einzubeziehen - danke an @Nick, @kbisset und @John):
Eine Lösung wäre die Portierung der gesamten grafischen OS X-Shell (der Cocoa / Core- Quellbibliotheken), was OS X wirklich einzigartig macht ) auf Linux. Und technisch könnte Apple das ganz einfach, aber sie haben keinen Grund dazu, da ihr gesamtes Geschäftsmodell die Einzigartigkeit ihrer gesamten Plattform ist - Hardware und Software.
Es ist VORSTELLBAR, dass jemand versuchen könnte, die Bibliotheken zu klonen, aber das würde Jahrzehnte dauern und wahrscheinlich aufgrund all der undokumentierten Aufrufe, die repliziert werden müssten, nie richtig sein.
Mit Apple-spezifischen Anwendungen meinen Sie GUI-Apps? Sobald Sie sich über der Befehlszeile befinden, gibt es Apple-spezifische APIs für alles (Grafik, Sound usw.), die unter Linux nicht unterstützt werden. Daher können Sie Anwendungen nicht einfach portieren.
quelle
Die grafische Ebene ist überhaupt nicht dieselbe. OS X verwendet ein proprietäres grafisches Framework, Linux verwendet X (X11 / X.org)
Fast alle nativen OS X-Anwendungen verwenden Frameworks wie Cocoa, CoreAnimation usw., die nur unter OS X verfügbar sind.
Angenommen, Sie haben eine Anwendung, in der ein Kennwort für den Benutzer gespeichert ist. Unter OS X werden das Schlüsselbundsystem und die entsprechenden APIs verwendet. Wenn Sie dies auf Linux portieren würden, gäbe es kein direktes Äquivalent, so dass Sie diese gesamte Funktion neu implementieren müssten. Das ist eine winzige Funktion und würde ein umfangreiches Umschreiben erfordern.
Wenn Sie Ihre Anwendung mit einer plattformübergreifenden GUI-Bibliothek wie GTK, Qt oder wxWidgets schreiben, wird die Portierung viel einfacher (oder "möglich") - aber die Betriebssysteme unterscheiden sich in Bezug auf die Benutzeroberfläche (z. B. das Betriebssystem) erheblich X verwendet eine separate Menüleiste, während Linux normalerweise für jedes Fenster eine eigene Menüleiste hat.
Einer der besten plattformübergreifenden Ports, den ich gesehen habe, ist Transmission , das seine Hauptfunktionalität als Bibliothek implementiert (die so wenig plattformspezifischen Code wie möglich enthält) und dann für jede Plattform separat native GUIs erstellt. Dies bedeutet, dass jeder Port eine Menge Code teilt, aber alle über gute native Schnittstellen verfügen (statt einer einzelnen Schnittstelle, die unter Linux gut passt, unter OS X jedoch nicht am richtigen Platz ist oder umgekehrt).
Es gibt ein Projekt namens Cocotron, das "darauf abzielt, eine plattformübergreifende Objective-C-API zu implementieren, die der in der Cocoa-Dokumentation von Apple Inc. beschriebenen ähnelt" . Dies würde möglicherweise die Portierung erheblich vereinfachen, in letzter Zeit scheint es jedoch nur sehr wenige Aktivitäten zu geben (Der letzte Blog-Post war im Dezember 2008)
quelle
Da die meisten Anwendungen wesentlich mehr von dem Prozessor und der zugrunde liegenden Architektur des Computers abhängen, auf dem sie ausgeführt werden. Sie hängen auch von Toolkits für Benutzeroberflächen und anderen plattformspezifischen Bibliotheken ab.
quelle