Opublikowano projekt BSDun, który rozwija moduł dla jądra Linux umożliwiający rozpoznawanie, ładowanie i uruchamianie w Linux niezmodyfikowanych plików wykonywalnych w formacie ELF, stworzonych dla FreeBSD. Do uruchomienia stosowane jest emulowane środowisko FreeBSD, umieszczane w katalogu /compat/freebsd. Projekt stanowi całkowite przeciwieństwo FreeBSD Linuxulator. Kod jest rozpowszechniany na licencji GPLv2+ i został napisany z użyciem asystenta AI Claude Code.
Dzięki BSDun udało się pomyślnie uruchomić w Linux wiele aplikacji z pakietów FreeBSD, w tym pkg, nginx, mc, ping, xeyes, xfce4-panel, Thunar, xfce4-terminal, Libreoffice, Midori, Epiphany, Chromium i VScode. Aby uruchomić Chromium i VScode, należy wyłączyć izolację sandbox oraz ograniczyć rozmiar pamięci wideo za pomocą opcji "—no-sandbox —force-gpu-mem-available-mb=1024".
Moduł nie aspiruje do włączenia w główną wersję jądra, ponieważ od momentu usunięcia ABI Solaris architektura jądra Linux nie dopuszcza włączania innych obsługujących pliki wykonywalne (OS Personalities) i przewiduje istnienie tylko jednej tabeli wywołań systemowych. Aby obejść ten problem, w BSDun wykorzystano mechanizm kprobe, który przechwytuje wszystkie wywołania systemowe.
Dzięki kprobe wywołania systemowe FreeBSD zostały oddzielone od wywołań systemowych Linux i zapakowane w osobną tabelę. Część wywołań systemowych FreeBSD została bezpośrednio powiązana z wywołaniami systemowymi Linux, dla innych wykonano przepakowanie struktury parametrów i wyniku, część została zastąpiona zamiennikami (np. związanymi z Capcicum), a czwarta została zrealizowana na podstawie wewnętrznych struktur jądra Linux. Aby zaimplementować mechanizm kevent/kqueue na epoll(), zastosowano osobną modyfikację komponentów w przestrzeni użytkownika, automatycznie realizowaną przy ładowaniu każdego pliku wykonywalnego FreeBSD.
W sumie zaimplementowano około 250 wywołań systemowych. Zrealizowano także SystemV IPC, funkcje sieciowe, futexy, sysctl MIB, prctl, timery i ioctl. W celu izolacji systemów plików zastosowano środowisko chroot po stronie Linux (w trakcie eksperymentów bez chroot autor wykonał „pkg install …”, co doprowadziło do nadpisania zawartości /usr/local/* w Linux). Niemniej jednak, niektóre narzędzia nadal mogą działać bez chroot.
Proponowany moduł może być wykorzystywany do rozwoju, kompilacji i portowania oprogramowania dla FreeBSD bez użycia maszyn wirtualnych. Krótka instrukcja użycia: 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
Źródło: opennet.ru
