Sind verschiedene Linux / Unix-Kernel austauschbar?

14

Kann ich einen Linux-Kernel nehmen und ihn beispielsweise mit FreeBSD verwenden und umgekehrt (FreeBSD-Kernel beispielsweise in einem Debian)? Gibt es eine universelle Antwort? Was sind die Einschränkungen? Was sind die Hindernisse?

Tomasz
quelle
5
Nein auf keinen Fall. Eine gute Übung wäre, es zu versuchen und zu sehen, wie es bricht. Sie können nicht einmal einen Linux-Kernel zuverlässig durch einen viel älteren Linux-Kernel ersetzen. Das Ersetzen von Userland-Tools ist jedoch definitiv möglich (falls neu kompiliert).
Kusalananda
3
debian.org/ports/kfreebsd-gnu und debian.org/ports/hurd könnten Sie interessieren
muru
@Kusalananda in Bezug auf das Ersetzen von Userland-Tools von BSD auf Linux kann schmerzhaft sein: Einige BSD-Tools lassen sich nur schwer auf Nicht-BSD-Systemen aufbauen. Im Laufe der Jahre bin ich auf einige Tools gestoßen, die ich gerne portiert hätte , aber es stellte sich als nicht trivial heraus: - /.
Stephen Kitt
1
@StephenKitt Das Gegenteil ist auch der Fall :-) Vor allem, wenn die Software Annahmen über den Zugriff auf /procoder andere Linux-spezifische Schnickschnack macht .
Kusalananda
Was Sie tun können, ist, einen x86_64-Kernel (Linux) zu nehmen und ihn auf der 32-Bit-Distribution von i386 zu installieren (vorausgesetzt, Sie haben eine 64-Bit-Intel-CPU und unterstützen 32-Bit-Binärdateien, die in kompiliert wurden). Dies ist ziemlich bekannt, aber nicht sofort offensichtlich ...
Radovan Garabík

Antworten:

39

Nein, Kernel aus verschiedenen Implementierungen von Betriebssystemen im Unix-Stil sind nicht austauschbar, insbesondere, weil sie alle unterschiedliche Schnittstellen zum Rest des Systems (Benutzerbereich) aufweisen - ihre Systemaufrufe (einschließlich ioctlBesonderheiten) und die verschiedenen von ihnen verwendeten virtuellen Dateisysteme. ..

Auf der Quellebene ist die Kombination aus Kernel und C-Bibliothek bzw. den APIs auf Benutzerebene, die der Kernel und die Bibliotheken bereitstellen, teilweise austauschbar (im Wesentlichen die Ansicht auf der von POSIX beschriebenen Ebene, ohne sie) Überlegen Sie, ob es sich tatsächlich um POSIX handelt. Beispiele hierfür sind Debian GNU / kFreeBSD , das ein Debian-System auf der Basis eines FreeBSD-Kernels erstellt, und Debian GNU / Hurd , das ein Debian-System auf der Basis des Hurd erstellt.

Dies ist nicht ganz auf der Ebene der Austauschbarkeit des Kernels. Es wurde jedoch versucht, eine gemeinsame Anwendungs-Binärschnittstelle zu standardisieren, damit Binärdateien auf verschiedenen Systemen verwendet werden können, ohne dass eine Neukompilierung erforderlich ist. Ein Beispiel ist der Intel Binary Compatibility Standard , mit dem kompatible Binärdateien auf allen Unix-Systemen ausgeführt werden können, die ihn implementieren, einschließlich älterer Linux-Versionen mit der iBCS 2-Schicht. Ich habe dies in den späten 90ern verwendet, um WordPerfect unter Linux auszuführen.

Siehe auch So erstellen Sie eine FreeBSD-Chroot in Linux .

Stephen Kitt
quelle
1
Einige Leute haben ziemlich starke Meinungen darüber, wie wichtig es ist, den Kernel und die Benutzer-APIs synchron zu halten :)
tonysdg
4
@Tonysdg, und glauben Sie mir, ich weiß alles darüber : - /.
Stephen Kitt
@tonysdg Ich erhalte eine Seite, die auf Ihrem Link nicht gefunden wurde. (Es sei denn, das ist ein Witz, den ich vermisse?)
mbrig
1
@mbrig: Bis gestern war es da - hier ist eine archivierte Version: web.archive.org/web/20171102142621/http://…
tonysdg
@StephenKitt: Autsch :( Entschuldigung !! Aber ein großes Lob dafür, dass es überhaupt Code im Kernel gibt!
tonysdg
4

Einige Kernel sind mit Binärdateien kompatibel, sodass Sie Userspace-Programme mit verschiedenen ABIs mischen können (z. B. kann freebsd bis zu einem gewissen Grad mit Linux-Binärdateien arbeiten), die Kern-Binärdateien jedoch (z. B. das Init-Programm, der Modul-Loader, Gerätetreiber-Setup-Tools, die C-Bibliothek) , die Tools, die zum Einrichten der Dateisysteme benötigt werden ...) werden in der Praxis zu viel Wissen über Kernel-Level-Interfaces haben, um ein System mit einem fremden Kernel erfolgreich zu starten.

Außerdem müssten Dateisysteme kompatibel sein. Außerdem müssten binäre Kompatibilitätsoptionen "hart" in den Kernel kompiliert werden - alles, was als Kernelmodul implementiert ist, würde gerne fehlschlagen, da Sie den Modullader nicht ausführen könnten.

Wie bereits erwähnt, sind die Benutzerumgebungen eher portabel, wenn Sie bereit sind, neu zu kompilieren - wie freebsd-basierte Debian-Systeme oder das netbsd pkgsrc-System unter Linux einzurichten (absolut nicht trivial, aber unterstützt und möglich!).

Rackandboneman
quelle