Het project BSDun is gepubliceerd. Het ontwikkelt een module voor de Linux-kernel die het mogelijk maakt om niet-gemodificeerde uitvoerbare ELF-bestanden die voor FreeBSD zijn samengesteld, te herkennen, te laden en uit te voeren in Linux. Voor de uitvoering wordt een geëmuleerd FreeBSD-omgeving gebruikt, geplaatst in de map /compat/freebsd. Over het algemeen is het project een complete tegenstelling tot de FreeBSD Linuxulator. De code wordt verspreid onder de GPLv2+ licentie en is geschreven met behulp van de AI-assistent Claude Code.
Met behulp van BSDun is het succesvol gelukt om vele applicaties uit FreeBSD-pakketten in Linux te starten, waaronder pkg, nginx, mc, ping, xeyes, xfce4-panel, Thunar, xfce4-terminal, Libreoffice, Midori, Epiphany, Chromium en VScode. Voor het starten van Chromium en VScode is het uitschakelen van sandbox-isolatie en het beperken van de videogeheugengrootte met de opties '--no-sandbox --force-gpu-mem-available-mb=1024' vereist.
De module is niet bedoeld om in de hoofdversie van de kernel te worden opgenomen, aangezien de Linux-kernel sinds de verwijdering van ABI Solaris niet toestaat dat andere uitvoerbare bestanden (OS Personalities) worden opgenomen en alleen één systeemaanroepentabel voorziet. Om dit probleem te omzeilen, werd in BSDun het kprobe-mechanisme gebruikt, dat alle systeemaanroepen onderschept.
Met behulp van kprobe werden de systeemaanroepen van FreeBSD gescheiden van die van Linux en verpakt in een aparte tabel. Een deel van de systeemaanroepen van FreeBSD werd direct gekoppeld aan de systeemaanroepen van Linux, voor een ander werd de structuur van parameters en resultaten opnieuw verpakt, een derde werd vervangen door stubs (bijvoorbeeld die met betrekking tot Capcicum), en een vierde werd geïmplementeerd op basis van interne structuren van de Linux-kernel. Voor de implementatie van het kevent/kqueue-mechanisme bovenop epoll() werd een aparte modificatie van de componenten in de gebruikersruimte toegepast, die automatisch werd uitgevoerd bij het starten van elk FreeBSD-uitvoerbaar bestand.
In totaal zijn er ongeveer 250 systeemaanroepen geïmplementeerd. Ook zijn SystemV IPC, netwerffuncties, futex-en, sysctl MIB, prctl, timers en ioctl geïmplementeerd. Voor het scheiden van bestandssystemen werd een chroot-omgeving aan de Linux-zijde gebruikt (tijdens experimenten zonder chroot heeft de auteur 'pkg install ...' uitgevoerd en de inhoud van /usr/local/* in Linux overschreven). Desondanks kunnen sommige hulpprogramma's nog steeds zonder chroot werken.
De voorgestelde module kan worden gebruikt voor de ontwikkeling, bouw en portering van software voor FreeBSD zonder gebruik te maken van virtuele machines. Korte handleiding voor gebruik: 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
Bron: opennet.ru
