Was ermöglicht es BSD, Linux-Binärdateien auszuführen, aber nicht umgekehrt?

42

Was ermöglicht es BSD, Linux-Binärdateien (und andere Unix-ähnliche) auszuführen, aber Linux (und andere Unix-ähnliche) können BSD-Binärdateien nicht ausführen?

Keine Zeit
quelle
Ich weiß es nicht, aber die Antwort könnte etwas mit ihren Lizenzen zu tun haben. Ich würde mir vorstellen, dass BSD nicht mit der GPL kompatibel ist, und die meisten Linux-Entwickler bringen das BSD-Argument einfach nicht zur Sprache.

Antworten:

55

Marktkräfte.

Es gibt viel mehr Programme speziell für Linux als für * BSD. Ein Großteil des Software- Quellcodes ist portabel genug, um auf beiden Systemen kompiliert werden zu können, aber viele Softwarehersteller, die Linux-Binärdateien bereitstellen, tun dies für BSDs nicht, da sie auf breiter Front geringere Marktanteile als Linux haben. ¹

Wenn eine Software nur in binärer Form für ein anderes Betriebssystem verfügbar ist, ist die ABI-Emulation eine Möglichkeit, sie zum Laufen zu bringen, wie es die BSDs tun.²

Es war einmal, als x86-Unix eine Marktmehrheit über Linux verfügte, wurde die iBCS- Funktion zu Linux hinzugefügt, um die Ausführung von Binärdateien zu ermöglichen, die für SCO-Unix und dergleichen erstellt wurden. Das Interesse an dieser Funktion nahm ab, als der Marktanteil von Linux zunahm, so dass es während der Linux 2.3-Entwicklungsserie in Verfall geraten konnte. Die SCO-Klagen halfen, diese Funktion aus Linux herauszuführen, aber ich glaube, das ist sekundär zum Verlust des Marktes Kraft, die das Merkmal hervorgebracht hat.

Es gibt keinen technischen Grund, warum Linux eines Tages keine iBCS-ähnliche Funktion zum Ausführen von BSD-Binärdateien erhalten konnte, aber es ist unwahrscheinlich, dass sich die Marktposition von BSD und Linux aus irgendeinem Grund ändert.

Heute gibt es wenig Anlass für so etwas. Wie viele reine Binärprogramme für BSD sind Ihnen bekannt, die nicht auch für Linux entwickelt wurden? Es muss welche geben, aber ich schätze, die meisten sind für eingebettete BSDs wie Junos . Eine solche Funktion wird nicht erstellt, wenn unter Linux keine wichtigen Programme ausgeführt werden können, die sonst nicht ausgeführt würden


Fußnoten:

  1. Ich zähle OS X hier nicht als BSD, da dies ein separates binäres Kompatibilitätsproblem darstellt. FreeBSD, OpenBSD und NetBSD verwenden ELF auf x86, während OS X ein völlig anderes ausführbares Format verwendet . Die dynamische Verknüpfung unterscheidet sich unter OS X erheblich von den herkömmlichen x86-BSDs.

    Weitere Informationen zur binären Kompatibilität von Linux und OS X finden Sie in dieser Frage .

  2. FreeBSD ; OpenBSD ; NetBSD

  3. Wie bei bestimmten Haiarten stirbt Software, die sich nicht mehr vorwärts bewegt. Wir nennen dieses Phänomen eher Bit-Rot als Ersticken, wenn es um Software geht, aber Ursache und Wirkung sind gleich.

  4. Contrast NDISwrapper , mit dem Linux nur binäre Netzwerkkartentreiber ausführen kann, die für Windows XP geschrieben wurden. Ein Bedarf wird identifiziert und ein Bedarf wird erfüllt. Wo müssen BSD-Binärdateien ausgeführt werden?

Warren Young
quelle
3
Linux verfügt über die Infrastruktur, um nicht native Binärdateien über das binfmt_miscModul auszuführen , wodurch Sie beliebige Binärformat-Handler registrieren können. Einige Leute führen Mono-Anwendungen auf diese Weise aus, obwohl ich denke, dass es selten ist. Aber wie Sie sagen, hat noch niemand einen Grund gehabt, einen * BSD-binfmt-Handler zu schreiben.
KutuluMike
Das war sehr hilfreich. Ich habe nur die FreeBSD-Handbücher durchgesehen (bevor ich eine Frage gestellt habe), und dabei stand, dass BSD mit Cross-Nix-Binärdateien umgehen kann und Linux nicht, aber es hat es nicht erklärt. Das ist sinnvoll, obwohl ich ehrlich gesagt eher einen technischen Grund erwartet hatte, als dass die Marktkräfte die Ursache waren, aber ehrlich gesagt scheinen sie [technische Gründe und Popularität] viel enger miteinander verbunden zu sein als ich.
Keine Zeit
3
Beachten Sie, dass es nicht nur um BSD geht. Sie sehen genau den gleichen Trend für alle Unices: Linux konnte früher so ziemlich jedes Unix-Binärsystem ausführen: iBCS unterstützt Solaris, 386BSD, FreeBSD, NetBSD, BSDI / 386, SVR4 (Interactive, Unixware, USL, Dell usw.). , SVR3 generisch, SCO, SCO OpenServer 5, Wyse V / 386, Xenix V / 386, Xenix 286 und wahrscheinlich einige andere. Heutzutage ist es umgekehrt: Alle modernen Unices unterstützen das Ausführen von Linux-Binärdateien. Es gibt zwei Beispiele, bei denen diese Funktion als so wichtig erachtet wurde , dass der Anbieter sie sogar in den Namen einfügt! (IBM AIX 5L für "Linux", HP-UX 11i für "Integration".)
Jörg W Mittag
1
@ JörgWMittag Weder AIX 5L noch HP-UX 11i führen tatsächlich Linux-Binärdateien aus, ganz zu schweigen davon, dass sie die x86-Architektur überhaupt nicht unterstützen. Sie könnten eine GNU-Entwicklungsumgebung bereitstellen, die das Erstellen von AIX- bzw. HP-UX-Binärdateien aus Quellcode erleichtert.
Juli