Warum lassen sich nicht alle Mac-Anwendungen problemlos auf Linux übertragen?

15

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?

Nick Pierpoint
quelle

Antworten:

23

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.

fretje
quelle
Warum kann die proprietäre grafische Shell nicht relativ einfach auf Linux portiert werden, wenn sie unter BSD ausgeführt wird? Ich habe das Problem verstanden, als die zugrunde liegende Architektur anders war, aber jetzt ist die zugrunde liegende Architektur nur Intel. Warum ist die grafische Shell dann nicht nur eine weitere Bibliothek?
Nick Pierpoint
8
Zwei Gründe. Erstens ist es mehr als nur eine grafische Shell. Es ist eine ganze Schicht über Unix, an der Apple seit Jahren arbeitet. Zweitens ist der Code nicht verfügbar. Es müsste also von Grund auf neu geschrieben werden. Apple könnte es wahrscheinlich in kurzer Zeit schaffen, aber es gibt keinen Grund dafür.
KeithB
1
Zumindest für Apple gibt es kein wirkliches technisches Problem - sie könnten OS-X relativ einfach für Linux migrieren, da sie es bereits unter UNIX laufen lassen. Offensichtlich eine große Sache für alle anderen, da der Code Closed Source ist und es keine vollständig veröffentlichte API gibt. Ist das eine faire Zusammenfassung?
Nick Pierpoint
3
Nick: Im Wesentlichen ja. Apple hat kein Interesse daran, OSX auf eine Linux-Plattform umzustellen. Warum sollten sie es tun, wenn sie so viel in ihre Open Source Darwin-Plattform (die BSD-Schicht) und ihre Closed Source Cocoa / Core * -Bibliotheken investiert haben (was OSX wirklich einzigartig macht)? Ihr gesamtes Geschäftsmodell ist die Einzigartigkeit ihrer gesamten Plattform - 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. Und zu welchem ​​Zweck?
John Rudy
4
GNUStep ist eine Open-Source-Implementierung vieler Kernbibliotheken, die jetzt unter OS X verfügbar sind.
TRS-80
2

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.

Kennzeichen
quelle
1

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)

dbr
quelle
1

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.

Kent Boogaart
quelle