Чуть меньше года назад мы опубликовали статью об операционной системе ToaruOS, которая выросла из студенческого проекта. Несмотря на то, что команда этого проекта не очень большая, система продолжает развиваться, и сейчас ее действительно можно назвать «взрослой». Разработчики выпустили версию 2.1, добавив новые возможности.
Сама система уже далеко не студенческий проект, а полноценная ОС с гибридной модульной архитектурой, в которой сочетаются как средства для использования загружаемых модулей, так и монолитная основа. При этом разработчики обеспечили поддержку большинства популярных устройств. Ну а о подробностях поговорим под катом.
Что это за система такая?
В целом, как система уже не студенческая, так и ее разработчики не студенты (они ими были, но с момента выпуска первой версии прошло 11 лет). Сам проект стартовал в 2010 году в Иллинойском университете. Разработчик — К. Ланге, который в то время решил заняться изучением возможностей композитных интерфейсов. Для этого он не стал использовать сторонние разработки, а создал свой собственный «велосипед», то есть написал прототип операционной системы с внедренными идеями.
Работу оценили коллеги, стали интересоваться ей и коллеги разработчика. Постепенно из небольшого проекта операционная система превратилась во вполне серьезную разработку с комьюнити, которое объединяет сейчас специалистов из разных стран. Это уже далеко не только коллеги разработчика, но и другие независимые программисты. Поэтому Ланге принял решение преобразовать исследовательскую работу в полноценную ОС, с которой может работать обычный пользователь.
Как и говорилось выше, система поддерживает большое количество популярных драйверов устройств, включая драйверы диска (PATA и ATAPI), ФС EXT2 и ISO9660, framebuffer, клавиатуры, мыши, сетевых карт (AMD PCnet FAST, Realtek RTL8139 и Intel PRO/1000), звуковых чипов (Intel AC'97), а также дополнений VirtualBox для гостевых систем. При этом ядро способно на многое. Например, оно поддерживает Unix-потоки, TTY, виртуальную ФС, псевдо-ФС /proc, многопоточность, IPC, ramdisk, ptrace, разделяемую память, многозадачность и другие типовые возможности.
Кроме всего прочего, ОС может похвастаться композитным оконным менеджером. Она поддерживает динамически связываемые исполняемые файлы в формате ELF, многозадачность, графический стек, плюс поддерживает Python 3 и GCC. Файловая система здесь — ext2, а загрузчик поддерживает как BIOS, так и EFI.
Разработчики выпустили и несколько нативных приложений, включая редактор кода Bim (он похож на Vi), файловый менеджер, эмулятор терминала, графическая панель с поддержкой виджетов, пакетный менеджер. Кроме того, команда проекта выпустила и библиотеки для поддержки изображений (PNG, JPEG) и TrueType-шрифтов. Занимались создатели системы и портированием софта, включая Vim, GCC, Binutils, FreeType, MuPDF, SDL, Cairo, Doom, Quake, Super Nintendo emulator, Bochs и т.п.
Конечно, систему не могли оставить без сетевых функций. По словам разработчиков, новая операционная система предоставляет возможность использовать API сокеты в стиле BSD-систем и поддерживает сетевые интерфейсы, включая loopback.
Новое, старое, модифицированное
Речь идет о расширении возможностей ОС, а также о добавлении новых функций. Например, в версии ToaruOS 2.1 добавлено и модифицировано вот что:
• Появилась поддержка архитектуры AArch64 (ARMv8), в том числе с экспериментальной возможностью использования ToaruOS на плате Raspberry Pi 400 и в эмуляторе QEMU. К сожалению, пока что это лишь тестовая поддержка, так что возможны проблемы при работе.
• Оптимизирована обработка и передача сигналов процессам в пространстве юзера. Так, появились вызовы sigaction, sigprocmask, sigwait и sigsuspend.
• Кроме того, разработчики оптимизировали управление памятью в пространстве пользователя, включая добавление системного вызова munmap.
• Отрисовка терминала тоже улучшена, плюс команда проекта добавила кэш глифов для шрифтов True Type.
• Значительно улучшен сетевой стек. Так, например, в ifconfig появилась поддержка установки адресов IPv4 и настроек маршрутизации. Обеспечена работа сокетов ICMP. Добавлена поддержка функции recvfrom для сокетов UDP и ICMP.
• Загрузчик теперь поддерживает работу с USB-клавиатурами.
• Появилась утилита grep с поддержкой регулярных выражений.
Софт разрабатывается при помощи предложенного командой языка программирования, который, в целом, можно назвать сокращенным вариантом Python. Его особенность в том, что в нем явно определяются переменные, плюс сам язык отличается компактной реализацией. Язык может использоваться и вне операционной системы ToaruOS. Работать с ним можно в таких ОС, как Linux, macOS, Windows. В браузерах с поддержкой WebAssembly он тоже запускается.
Язык называется Kuroko, его синтаксис похож на синтаксис Python, он поддерживает компиляцию и интерпретацию байткода.
Код же самого проекта написан на языке C, он распространятся под лицензией BSD. Если есть желание протестировать ОС, то вот live-образ, он весит всего 14,4 МБ. Ну а тестировать можно в QEMU, VMware или VirtualBox. Ну и вот Github с наработками команды.