Warum lassen sich nicht alle Mac-Anwendungen problemlos nach Linux portieren?

4270
Nick Pierpoint

Da das Betriebssystem Apple OS-X ein UNIX-Derivat (BSD) ist und die zugrunde liegende (Intel-) Mac-Architektur die gleiche ist, warum ist es nicht sehr einfach, Apple-spezifische Anwendungen unter Linux auszuführen?

15

4 Antworten auf die Frage

23
fretje

OS X ist (meistens) die proprietäre grafische Shell auf BSD. Um eine OS X-GUI-Anwendung zu erstellen, muss der API, die Apple angezeigt hat, gefolgt werden. Daher ist diese Plattform nicht plattformübergreifend und nicht leicht portierbar.
Deshalb sind die meisten Bibliotheken sind leicht portiert (tatsächlich sind die meisten auf Linux entwickelt) auf Linux, aber nicht ihre grafischen Muscheln.

Nebenbei bemerkt: Es gibt Frameworks, mit denen Sie plattformübergreifende GUI-Anwendungen erstellen können. Qt kommt mir in den Sinn. Die Tatsache, dass diese Frameworks plattformübergreifend sind, macht die mit ihnen erstellten Anwendungen auf einer bestimmten Plattform jedoch weniger benutzerfreundlich als eine "native" GUI-Anwendung. Diese Frameworks lassen in der Regel alles plattformübergreifend aussehen, was im Fall von Apple schlecht ist, da Apple eine sehr spezifische Benutzererfahrung geschaffen hat, die nicht ohne weiteres in andere Plattformen "passt".

Bearbeiten (um die Kommentare in die Antwort aufzunehmen - danke @Nick, @kbisset und @John):
Eine Lösung wäre, die gesamte grafische Shell von OS X (die Closed-Source-Cocoa / Core-Bibliotheken) zu portieren - was OS X wirklich einzigartig macht ) zu Linux. Technisch gesehen könnte Apple das recht einfach machen, aber sie haben keinen Grund dazu, da ihr gesamtes Geschäftsmodell die Einzigartigkeit ihrer gesamten Plattform ist - Hardware und Software.
Es ist ZUKUNFT, dass jemand versuchen könnte, die Bibliotheken zu klonen, aber das würde viele Jahrzehnte dauern, und wahrscheinlich wäre es nie richtig, wegen all der undokumentierten Aufrufe, die repliziert werden müssten.

Warum kann die proprietäre grafische Shell nicht relativ einfach auf Linux portiert werden, wenn sie unter BSD läuft? Ich habe das Problem verstanden, als die zugrunde liegende Architektur anders war, aber jetzt ist die zugrunde liegende Architektur nur noch Intel. Warum ist die grafische Shell nicht nur eine weitere Bibliothek? Nick Pierpoint vor 15 Jahren 0
Zwei Gründe. Erstens ist es mehr als nur eine grafische Hülle. 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 dies wahrscheinlich in kurzer Zeit tun, aber es gibt keinen Grund dafür. KeithB vor 15 Jahren 8
Also ... für Apple gibt es zumindest kein technisches Problem - sie könnten OS-X relativ leicht für Linux laufen lassen, da es bereits unter UNIX läuft. 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 vor 15 Jahren 1
Nick: Im Wesentlichen ja. Apple hat * kein * Interesse daran, OSX auf eine Linux-Plattform umzustellen. Warum sollten sie, 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 ZUKUNFT, dass jemand versuchen könnte, die Bibliotheken zu klonen, aber das würde viele Jahrzehnte dauern, und wahrscheinlich wäre es nie richtig, wegen all der undokumentierten Aufrufe, die repliziert werden müssten. Und zu welchem ​​ende? John Rudy vor 15 Jahren 3
GNUStep ist eine Open-Source-Implementierung vieler Kernbibliotheken, die sich jetzt in OS X befinden. Apple hat jedoch seitdem viele hinzugefügt, sodass das Portieren immer noch nicht so einfach ist: http://wiki.gnustep.org/index.php/Cocoa TRS-80 vor 15 Jahren 4
Eigentlich sieht Qt sowohl auf GNU / Linux als auch auf Windows gleich aus. Ich habe die Mac-Version nicht gesehen, aber ich denke, es ist dasselbe. Es sieht freundlich aus. Hi-Angel vor 8 Jahren 0
2
Mark

Mit Apple-spezifischen Anwendungen meinen Sie GUI-Apps? Sobald Sie sich oberhalb der Befehlszeile befinden, gibt es Apple-spezifische APIs für alles (Grafik, Sound usw.), die nicht unter Linux unterstützt werden. Daher können Sie Anwendungen nicht einfach portieren.

1
Kent Boogaart

Weil die meisten Anwendungen von viel mehr abhängen als dem Prozessor und der zugrunde liegenden Architektur der Maschine, auf der sie laufen. Sie hängen auch von Toolkits der Benutzeroberfläche und anderen plattformspezifischen Bibliotheken ab.

1
dbr

Die grafische Ebene ist überhaupt nicht gleich. OS X verwendet ein eigenes grafisches Framework, Linux verwendet X (X11 / X.org)

Nahezu alle nativen OS X-Anwendungen verwenden Frameworks wie Cocoa, CoreAnimation usw., die nur unter OS X verfügbar sind.

Angenommen, Sie haben eine Anwendung, die ein Kennwort für den Benutzer speichert. Unter OS X würde dies das Schlüsselbundsystem und die entsprechenden APIs verwenden. Wenn Sie dies auf Linux portieren würden, gibt es keine direkte Entsprechung, so dass Sie dieses gesamte Feature erneut implementieren müssen. Das ist eine winzige Funktion und würde eine große Neuentwicklung erfordern.

Wenn Sie Ihre Anwendung mit einer plattformübergreifenden GUI-Bibliothek wie GTK, Qt oder wxWidgets schreiben, wird die Portierung wesentlich einfacher (oder "möglich") - die Betriebssysteme sind jedoch nach wie vor sehr unterschiedlich in der Benutzeroberfläche (z. B. Betriebssystem) X verwendet eine separate Menüleiste, während Linux für jedes Fenster eine Menüleiste besitzt.

Einer der besten plattformübergreifenden Ports, die ich je gesehen habe, ist Transmission, die ihre Hauptfunktionalität als Bibliothek implementiert (die so wenig plattformspezifischen Code wie möglich enthält) und dann separate GUIs für jede Plattform separat erstellt. Das bedeutet, dass jeder Port eine Menge Code gemeinsam hat, aber alle haben gute native Schnittstellen (anstatt einer einzelnen Schnittstelle, die gut zu Linux passt, aber unter OS X nicht passt, oder umgekehrt).

Es gibt ein Projekt mit dem Namen Cocotron, das "eine plattformübergreifende Objective-C-API implementieren soll, die der in der Cocoa-Dokumentation von Apple Inc. beschriebenen ähnelt", die das Portieren möglicherweise wesentlich einfacher machen würde, aber in letzter Zeit scheint es sehr wenig zu tun (der letzte Blog-Post war im Dezember 2008)