È stato pubblicato il progetto BSDun, che sviluppa un modulo per il kernel Linux, permettendo di riconoscere, caricare e eseguire in Linux file eseguibili non modificati in formato ELF, compilati per FreeBSD. Per l'esecuzione viene utilizzato un ambiente emulato FreeBSD, collocato nella directory /compat/freebsd. Nel complesso, il progetto è l'opposto completo del Linuxulator di FreeBSD. Il codice è distribuito con licenza GPLv2+ ed è stato scritto con l'assistenza dell'AI Claude Code.
Grazie a BSDun, è stato possibile avviare con successo in Linux molte applicazioni dei pacchetti FreeBSD, tra cui pkg, nginx, mc, ping, xeyes, xfce4-panel, Thunar, xfce4-terminal, Libreoffice, Midori, Epiphany, Chromium e VScode. Per avviare Chromium e VScode è necessario disattivare l'isolamento sandbox e limitare la dimensione della memoria video utilizzando le opzioni "—no-sandbox —force-gpu-mem-available-mb=1024".
Il modulo non mira a essere incluso nel core principale del kernel, poiché a seguito della rimozione dell'ABI Solaris, l'architettura del kernel Linux non consente l'inclusione di altri gestori di file eseguibili (OS Personalities) e prevede la presenza di una sola tabella per le chiamate di sistema. Per aggirare questo problema, in BSDun è stato impiegato il meccanismo kprobe, che intercetta tutte le chiamate di sistema.
Con kprobe, le chiamate di sistema di FreeBSD sono state separate da quelle di Linux e incapsulate in una tabella a parte. Una parte delle chiamate di sistema di FreeBSD è stata collegata direttamente alle chiamate di sistema di Linux, per un'altra è stata eseguita una riconfezione della struttura dei parametri e del risultato, la terza è stata sostituita da stub (ad esempio, quelle relative a Capcicum), mentre la quarta è stata implementata sulla base delle strutture interne del kernel di Linux. Per implementare il meccanismo kevent/kqueue sopra epoll(), è stata applicata una modifica separata dei componenti nello spazio utente, effettuata automaticamente al caricamento di ogni file eseguibile di FreeBSD.
In totale, sono state implementate circa 250 chiamate di sistema. Sono state implementate anche SystemV IPC, funzioni di rete, futex, sysctl MIB, prctl, timer e ioctl. Per delimitare i file system è stato utilizzato un ambiente chroot sul lato Linux (nel processo degli esperimenti senza chroot, l'autore ha sovrascritto il contenuto di /usr/local/* in Linux eseguendo 'pkg install ...'). Tuttavia, alcune utility possono ancora funzionare senza chroot.
Il modulo proposto può essere utilizzato per lo sviluppo, la compilazione e il porting di software per FreeBSD senza utilizzo di macchine virtuali. Istruzioni rapide per l'uso: make make load ./bsdun-freebsd-root-resetup.sh ./bsdun-freebsd-enter.sh uname -a host FreeBSD 16.0-CURRENT FreeBSD 16.0-CURRENT (bsdun) amd64
Fonte: opennet.ru
