Das Projekt BSDun wurde veröffentlicht, das ein Modul für den Linux-Kernel entwickelt, das es ermöglicht, standardmäßig ausgeführte ELF-Dateien, die für FreeBSD erstellt wurden, in Linux zu erkennen, zu laden und auszuführen. Zum Start wird eine emulierte FreeBSD-Umgebung verwendet, die im Verzeichnis /compat/freebsd untergebracht ist. Insgesamt stellt das Projekt das genaue Gegenteil des FreeBSD Linuxulators dar. Der Code wird unter der GPLv2+-Lizenz verbreitet und wurde mit Hilfe des KI-Assistenten Claude Code geschrieben.
Mit BSDun ist es gelungen, viele Anwendungen aus den FreeBSD-Paketen erfolgreich in Linux auszuführen, 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-Isolierung deaktiviert und die Größe des Videospeichers mit den Optionen „—no-sandbox —force-gpu-mem-available-mb=1024“ begrenzt werden.
Das Modul beansprucht nicht, in den Hauptteil des Kernels aufgenommen zu werden, da seit der Entfernung des ABI Solaris die Architektur des Linux-Kernels keine anderen Handler für ausführbare Dateien (OS Personalities) zulässt und lediglich eine Systemaufruftabelle vorsehen kann. Um dieses Problem zu umgehen, wurde im BSDun der Mechanismus kprobe eingesetzt, der alle Systemaufrufe abfängt.
Mit Hilfe von kprobe wurden die Systemaufrufe von FreeBSD von den Systemaufrufen von Linux getrennt und in eine separate Tabelle eingewickelt. Ein Teil der Systemaufrufe von FreeBSD wurde direkt an die Systemaufrufe von Linux gebunden, während für einen anderen Teil die Parameter- und Ergebnisstruktur neu verpackt wurde. Einige Aufrufe wurden durch Platzhalter ersetzt (zum Beispiel jene, die mit Capcicum verbunden sind), und andere wurden auf Basis interner Strukturen des Linux-Kernels realisiert. Um den Mechanismus kevent/kqueue über epoll() umzusetzen, wurde eine separate Modifikation der Komponenten im Benutzermodus angewendet, die automatisch beim Laden jeder ausführbaren Datei von FreeBSD erfolgt.
Insgesamt wurden etwa 250 Systemaufrufe implementiert. Darüber hinaus sind SystemV IPC, Netzwerkfunktionen, Futexe, sysctl MIB, prctl, Timer und ioctl realisiert worden. Zur Abgrenzung der Dateisysteme wurde eine chroot-Umgebung auf der Linux-Seite verwendet (während der Experimente ohne chroot überschrieb der Autor den Inhalt von /usr/local/* in Linux, indem er 'pkg install …' ausführte). 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. virtuellen 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
