BSDun veröffentlicht, ein Modul zum Ausführen von ausführbaren Dateien von FreeBSD unter Linux

Das BSDun-Projekt wurde veröffentlicht, das ein Modul für den Linux-Kernel entwickelt, das es ermöglicht, unveränderte ELF-Ausführungsdateien, die für FreeBSD kompiliert wurden, in Linux zu erkennen, zu laden und auszuführen. Zum Starten wird eine emulierte FreeBSD-Umgebung verwendet, die im Verzeichnis /compat/freebsd untergebracht ist. Insgesamt steht das Projekt im vollständigen Gegensatz zum FreeBSD Linuxulator. Der Code wird unter der GPLv2+-Lizenz verbreitet und wurde mit der Hilfe des KI-Assistenten Claude Code geschrieben.

Mit BSDun ist es gelungen, viele Anwendungen aus den FreeBSD-Paketen unter Linux erfolgreich zu starten, darunter pkg, nginx, mc, ping, xeyes, xfce4-panel, Thunar, xfce4-terminal, Libreoffice, Midori, Epiphany, Chromium und VScode. Um Chromium und VScode zu starten, müssen die Sandbox-Isolation deaktiviert und die Größe des Grafikspeichers mit den Optionen „—no-sandbox —force-gpu-mem-available-mb=1024“ eingeschränkt werden.

Das Modul strebt nicht an, in den Hauptbestandteil des Kernels aufgenommen zu werden, da seit der Entfernung der Solaris-ABI die Architektur des Linux-Kernels keine anderer Handler für Ausführungsdateien (OS Personalities) zulässt und nur eine Systemaufruf-Tabelle vorsieht. Um dieses Problem zu umgehen, wurde in BSDun der Mechanismus kprobe verwendet, der alle Systemaufrufe abfängt.

Mit kprobe wurden die Systemaufrufe von FreeBSD von den Systemaufrufen von Linux getrennt und in eine separate Tabelle verpackt. Ein Teil der Systemaufrufe von FreeBSD wurde direkt an die Systemaufrufe von Linux gebunden, für einen anderen wurde die Struktur der Parameter und Ergebnisse umgepackt, ein dritter wurde durch Platzhalter ersetzt (zum Beispiel im Zusammenhang mit Capcicum), und ein vierter wurde auf Basis interner Strukturen des Linux-Kernels realisiert. Um den Mechanismus kevent/kqueue über epoll() zu implementieren, wurde eine Modifikation der Komponenten im Benutzerspeicher angewendet, die beim Laden jeder FreeBSD-Ausführungsdatei automatisch durchgeführt wurde.

Insgesamt wurden etwa 250 Systemaufrufe implementiert. Es wurden auch SystemV IPC, Netzwerkfunktionen, futex, sysctl MIB, prctl, Timer und ioctl implementiert. Zur Trennung der Dateisysteme wurde eine chroot-Umgebung auf der Linux-Seite verwendet (im Verlauf der Experimente hätte der Autor, ohne chroot, beim Ausführen von „pkg install …“ den Inhalt von /usr/local/* in Linux überschrieben). Dennoch können einige Dienstprogramme weiterhin ohne chroot funktionieren.

Das vorgeschlagene Modul kann zur Entwicklung, Kompilierung und Portierung von Software für FreeBSD ohne Verwendung eingesetzt werden. virtuelle Maschinen. Kurzanleitung zur Verwendung: make make load ./bsdun-freebsd-root-resetup.sh ./bsdun-freebsd-enter.sh uname -a FreeBSD-Host 16.0-CURRENT FreeBSD 16.0-CURRENT (bsdun) amd64

Quelle: opennet.ru

60GB SSD 8Gb DDR4