Опубликован BSDun, модуль для запуска исполняемых файлов FreeBSD в Linux - QubStore

Опубликован BSDun, модуль для запуска исполняемых файлов FreeBSD в Linux

Опубликован проект BSDun, развивающий модуль для ядра Linux, позволяющий распознавать, загружать и запускать в Linux немодифицированные исполняемые файлы в формате ELF, собранные для FreeBSD. Для запуска применяется эмулируемое окружение FreeBSD, размещаемое в каталоге /compat/freebsd. В целом проект является полной противоположностью FreeBSD Linuxulator. Код распространяется под лицензией GPLv2+ и написан с использованием AI-ассистента Claude Code.

При помощи BSDun удалось успешно запустить в Linux многие приложения из пакетов FreeBSD, среди которых pkg, nginx, mc, ping, xeyes, xfce4-panel, Thunar, xfce4-terminal, Libreoffice, Midori, Epiphany, Chromium и VScode. Для запуска Chromium и VScode требуется отключение sandbox-изоляции и ограничение размера видеопамяти при помощи опций «—no-sandbox —force-gpu-mem-available-mb=1024».

Модуль не претендует на включение в основной состав ядра, поскольку с момента удаления ABI Solaris архитектура ядра Linux не допускает включения иных обработчиков исполняемых файлов (OS Personalities) и предусматривает наличие только одной таблицы системных вызовов. Для обхода этой проблемы в BSDun был задействован механизм kprobe, перехватывающий все системные вызовы.

При помощи kprobe cистемные вызовы FreeBSD отделялись от системных вызовов Linux и заворачивались в отдельную таблицу. Одна часть системных вызовов FreeBSD напрямую привязывалась к системным вызовам Linux, для другой выполнялась переупаковка структуры параметров и результата, третья заменялась заглушками (например, связанные с Capcicum), а четвёртая реализовывалась на основе внутренних структур ядра Linux. Для реализации механизма kevent/kqueue поверх epoll() отдельно была применена модификация компонентов в пространстве пользователя, автоматически осуществляемая при загрузке каждого исполняемого файла FreeBSD.

В общей сложности реализовано около 250 системных вызовов. Также реализованы SystemV IPC, сетевые функции, futex-ы, sysctl MIB, prctl, таймеры и ioctl. Для разграничения файловых систем использовано chroot-окружение на стороне Linux (в процессе экспериментов без chroot автор выполнив «pkg install …» перезаписал содержимое /usr/local/* в Linux). Тем не менее, некоторые утилиты все ещё могут работать без chroot.

Предложенный модуль может применяться для разработки, сборки и портирования ПО для FreeBSD без использования виртуальных машин. Краткая инструкция по использованию: 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

исправить  +34 +/–

  1. Главная ссылка к новости (https://gitlab.com/megastallma…)
  2. OpenNews: bsd-user-4-linux — проект по запуску программ FreeBSD в Linux
  3. OpenNews: Выпуск дистрибутива Chimera 20251220, сочетающего ядро Linux с окружением FreeBSD
  4. OpenNews: Выпуск Wifibox 0.12, окружения для использования WiFi-драйверов Linux во FreeBSD
  5. OpenNews: ChaosBSD — форк FreeBSD для тестирования драйверов
  6. OpenNews: Релиз FreeBSD 15.1

Автор новости: megastallman Лицензия: CC BY 3.0 Короткая ссылка: https://opennet.ru/65846-bsdun Ключевые слова: bsdun, freebsd, linux При перепечатке указание ссылки на opennet.ru обязательно

Ссылка на основную публикацию