Энтузиаст создал клон Unix за 27 дней. Он назвал свой проект Bunnix. Разработчик поделился установочным образом, который можно загрузить с помощью qemu или записать на USB-накопитель.
Энтузиаст полагает, что Bunnix будет работать на большинстве устройств AMD64 — сам он тестировал его на ThinkPad X220 и Starlabs Starbook Mk IV. Клон поддерживает legacy и EFI, однако в нём не предусмотрена поддержка USB, поэтому требуется клавиатура PS/2 или эмуляция PS/2 через BIOS.
Ядро однопользовательской системы Bunnix написано на Hare и включает некоторые компоненты C, в том числе lwext4 для поддержки файловой системы ext4 и libvterm для видеотерминала ядра.
A short demo of the Bunnix operating systemspacepub.space
Ядро поддерживает следующие драйверы:
PCI,
устройства AHCI,
таблицы разделов GPT и MBR,
клавиатуру PS/2,
последовательные порты платформы,
КМОП-часы,
фреймбуферы,
файловые системы ext4 и memfs.
Также поддерживаются следующие функции ядра: виртуальная файловая система, /dev, /dev/kbd и /dev/fb0, последовательные и VideoTTY, управляющий терминал /dev/tty, эмулятор терминала, termios, а также около 40 системных вызовов, включая clock_gettime, poll, openat, fork, exec, Pipe, dup, dup2, ioctl и т. д.
В Bunnix входит следующее стороннее программное обеспечение:
Colossal Cave Adventure;
dash (/bin/sh);
Doom;
gzip;
less;
lok (/bin/awk);
lolcat;
mandoc (справочные страницы);
sbase (основные утилиты)1;
tcc (компилятор C);
Vim 5.7.
Энтузиаст предупреждает, что система периодически выдаёт ошибки.
Часть кода Bunnix взята из более раннего проекта Helios. Сюда входят части ядра, которые отвечают за некоторые относительно общие настройки ЦП (GDT, IDT и т. д.). Некоторые драйверы, такие как AHCI, были адаптированы для системы.
Двумя наиболее сложными аспектами стали поддержка ext4 и виртуального терминала, для чего потребовалось добавить две внешние зависимости: lwext4 и libvterm. Разработчику пришлось несколько раз переписать уровень файловой системы.
Кроме того, у Helios более простой планировщик, чем у Bunnix. Обе являются однопроцессорными системами, но, в отличие от Helios, Bunnix позволяет переключать контекст внутри ядра. Это требует использования нескольких стеков и другого подхода к переключению задач. Преимущество в том, что реализация блокирующих операций, таких как чтение с диска и Pipe(2), с помощью очередей ожидания становится намного проще.
Портировать стороннее программное обеспечение было относительно легко благодаря тому, что libc была основана на musl libc. Энтузиаст импортировал musl в свою собственную библиотеку libc и адаптировал ее для работы на Bunnix.
Кроме того, в Bunnix используется простой распределитель растровых изображений.
Автор проекта отмечает, что он не собирается развивать его. Однако он указал некоторые моменты, на которые стоит обратить внимание тем, кто заинтересуется Bunnix:
кэш каталогов для файловой системы и лучшее кеширование;
устранение ошибок ext4;
procfs и top;
файлы сопоставления;
больше сигналов (например, SIGSEGV);
многопользовательская поддержка;
устройства NVMe и IDE;
поддержка ATAPI и ISO 9660;
поддержка звука Intel HD;
сетевой стек;
набор инструментов Hare в базовой системе;
самостоятельный хостинг.
Источник: habr.com