GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Binäre Kompatibilität zwischen Mac OS X und Linux

Sie vergessen eine entscheidende Sache, nämlich dass Ihr Programm mit dem Betriebssystem interagieren muss, um etwas Interessantes zu tun.

Die Konventionen sind zwischen Linux und OS X unterschiedlich, sodass dieselbe Binärdatei nicht so ausgeführt werden kann, wie sie ist, ohne im Wesentlichen einen Teil des betriebssystemabhängigen Codes zu haben, um damit interagieren zu können. Viele dieser Dinge werden durch Bibliotheken bereitgestellt, die Sie dann einbinden müssen, und das bedeutet, dass Ihr Programm verlinkbar sein muss, und das Verlinken ist auch zwischen den beiden Systemen unterschiedlich.

Und so geht es weiter und weiter. Was sich oberflächlich anhört, als würde man dasselbe tun, ist in den tatsächlichen Details ganz anders.


Dies ist machbar, wenn jemand genug Zeit dafür aufwenden möchte. Das Darling-Projekt versucht dies, obwohl es sich zum jetzigen Zeitpunkt in einem ziemlich primitiven Zustand befindet.

Es wurde bereits erfolgreich auf anderen Plattformen durchgeführt:

  • Solaris und UnixWare enthalten ein Hilfsprogramm namens lxrun was ungefähr so ​​funktioniert wie sudo :Sie übergeben den Namen und die Parameter Ihrer ausführbaren Datei an den Helfer und er korrigiert die Dinge dynamisch, sodass die ausführbare Datei mit dem Betriebssystem kommunizieren kann. Die offizielle Seite (unten, Archivlink) sagt, dass sie verrottet ist.

  • Der Linux-Kernel hatte einmal eine Funktion namens iBCS, die das Gegenteil bewirkte, außer dass es keinen Helfer benötigte, weil der Kernel die "fremden" Binärdateien direkt erkannte. Es verfiel während der Kernel-2.3-Entwicklungsserie, höchstwahrscheinlich, weil der kleine Unix-Server-Kampf im Wesentlichen vorbei war, als 2.4 herauskam.

  • Der Kernel von FreeBSD kann so konfiguriert werden, dass er Linux-Binärdateien erkennt und sie so ausführt, als wären sie nativ. Diese Funktion scheint in einem besseren Zustand zu sein als die beiden oben genannten.

    OpenBSD und NetBSD haben ähnliche Funktionen.

OS X enthält viel FreeBSD, daher könnte die Portierung seiner Linux-Unterstützung einfach sein.


Ich stimme ziemlich allen zu, aber ich möchte hinzufügen, dass dies zwar viel Zeit und Mühe kosten würde, aber nicht annähernd so viel wie die Entwicklung von Wine.

Ein Großteil der Schwierigkeiten bei der Entwicklung von Wine besteht darin, dass sie ein Binärformat von einem Closed-Source-Betriebssystem portieren und VIELE der Systemaufrufe nicht dokumentiert sind. Sie mussten das Betriebssystem im Wesentlichen zurückentwickeln.

Wenn jemand dies von einem offenen Betriebssystem zu einem anderen offenen Betriebssystem tun würde, könnte er es wahrscheinlich in 1/10 der Zeit erledigen, da die Kompatibilitätsebene durchaus vom anderen Betriebssystem kopiert/eingefügt werden könnte, wenn ein gleichwertiger nativer Systemaufruf erfolgt existiert nicht. Natürlich wird in den meisten Fällen in der POSIX-Welt ein nativer Aufruf verfügbar sein.

Ein weiteres bemerkenswertes Projekt ist ReactOS, wo sie im Wesentlichen eine vollständig binärkompatible Version von Windows erstellen ... Wine wird nicht benötigt.


Linux
  1. So überprüfen Sie die Betriebssystem- und Linux-Version

  2. Was ist der Unterschied zwischen env und set (unter Mac OS X oder Linux)?

  3. So richten Sie eine Wifi-Direct-Verbindung zwischen Android und Linux ein

  4. Welches Dateisystem soll zwischen OSX und Linux verwendet werden?

  5. Unterschied zwischen 'ifconfig'- und 'ip'-Befehlen

Was ist der Unterschied zwischen Linux und Unix?

So installieren und verwenden Sie Git in einem Linux-System

Mit NitroShare können Sie Dateien ganz einfach zwischen Linux, Windows und Mac austauschen

Unix- und Linux-Geschichte

So installieren und konfigurieren Sie Redis auf einem Linux-System

unterschied zwischen netstat und ss unter linux?