Foi publicado o projeto BSDun, que desenvolve um módulo para o núcleo Linux que permite reconhecer, carregar e executar arquivos executáveis no formato ELF, compilados para FreeBSD, de forma não modificada no Linux. Para a execução, um ambiente emulado do FreeBSD é utilizado, localizado no diretório /compat/freebsd. De forma geral, o projeto é exatamente o oposto do Linuxulator do FreeBSD. O código é distribuído sob a licença GPLv2+ e foi escrito com a ajuda do assistente AI Claude Code.
Com o BSDun, foi possível iniciar com sucesso muitos aplicativos dos pacotes FreeBSD no Linux, incluindo pkg, nginx, mc, ping, xeyes, xfce4-panel, Thunar, xfce4-terminal, Libreoffice, Midori, Epiphany, Chromium e VScode. Para executar o Chromium e o VScode, é necessário desativar a isolamento sandbox e limitar o tamanho da memória de vídeo usando as opções “—no-sandbox —force-gpu-mem-available-mb=1024”.
O módulo não pretende ser incluído na composição principal do núcleo, pois desde a remoção da ABI Solaris, a arquitetura do núcleo Linux não permite a inclusão de outros manipuladores de arquivos executáveis (OS Personalities) e prevê apenas uma tabela de chamadas de sistema. Para contornar esse problema, o BSDun utilizou o mecanismo kprobe, que intercepta todas as chamadas de sistema.
Com o kprobe, as chamadas de sistema do FreeBSD eram separadas das chamadas de sistema do Linux e encapsuladas em uma tabela separada. Parte das chamadas de sistema do FreeBSD estava diretamente vinculada às chamadas de sistema do Linux, enquanto para outras, a estrutura de parâmetros e resultados era reempacotada, algumas eram substituídas por stubs (por exemplo, relacionadas ao Capcicum), e outras eram implementadas com base nas estruturas internas do núcleo Linux. Para implementar o mecanismo kevent/kqueue sobre epoll(), uma modificação separada dos componentes no espaço do usuário foi aplicada, realizada automaticamente ao carregar cada arquivo executável do FreeBSD.
No total, cerca de 250 chamadas de sistema foram implementadas. Também foram implementadas IPC SystemV, funções de rede, futexes, sysctl MIB, prctl, temporizadores e ioctl. Para delimitação dos sistemas de arquivos, foi utilizado um ambiente chroot do lado do Linux (durante os experimentos, sem chroot, o autor executando “pkg install …” sobrescreveu o conteúdo de /usr/local/* no Linux). No entanto, alguns utilitários ainda podem funcionar sem chroot.
O módulo proposto pode ser utilizado para o desenvolvimento, compilação e portabilidade de software para FreeBSD sem necessidade de utilização. máquinas virtuais. Instruções rápidas de uso: 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
Fonte: opennet.ru
