Выпуск операционной системы Redox OS 0.6, написанной на языке Rust

После полутора лет разработки опубликован выпуск операционной системы Redox 0.6, разработанной с использованием языка Rust и концепции микроядра. Наработки проекта распространяются под свободной лицензией MIT. Для тестирования Redox OS предложены готовые загрузочные образы (61 МБ). В отличие от прошлых выпусков, ветка 0.6 рассматривается как пригодная для экспериментов на реальном оборудовании, а не только в QEMU и VirtualBox. 0_1608968791.png

Из новшеств, добавленных в выпуске Redox 0.6, можно отметить:

  • Полностью переписана система управления памятью ядра (rmm, kernel memory manager). В новой реализации удалось избавиться от утечек памяти, которые создавали проблемы при использовании старого менеджера памяти. Кроме того, повышена стабильность поддержки многоядерных систем.
  • В состав включены многие проекты, разработанные студентами в рамках инициативы RSoC (Redox OS Summer of Code), включая разработки, связанные с поддержкой io_uring, ptrace, strace, gdb, дисковыми разделами и ведением логов.
  • Значительно доработана развиваемая проектом стандартная Си-библиотека Relibc, способная работать не только в Redox, но и в дистрибутивах на базе ядра Linux.
  • Добавлен собственный пакетный менеджер pkgar и связанный с ним формат пакетов, развиваемый с учётом специфики Redox OS. Пакетным менеджером предоставляется верификация источника по цифровой подписи, контроль целостности, возможность повторяемой сборки, автоматические обновления, передача только изменившихся данных, независимость от каталога установки. В отличие от других форматов, pkgar включает только метаданные, необходимые для извлечения пакета.
  • Скрипты cookbook, включающие инструкции по сборке различных компонентов Redox OS, переведены на новую сборочную систему, написанную на языке Rust. В новой сборочной системе вместо Shell-сценариев для описания логики сборки предложены файлы с формате Toml.
  • Много времени при подготовке новой версии было потрачено на борьбу с нарушающими совместимость изменениями в ночных сборках Rust, связанными с переработкой макроса Asm.

Напомним, что операционная система развивается в соответствии с философией Unix и заимствует некоторые идеи из SeL4, Minix и Plan 9. Redox использует концепцию микроядра, при котором на уровне ядра обеспечивается только взаимодействие между процессами и управление ресурсами, а вся остальная функциональность вынесена в библиотеки, которые могут использоваться как ядром, так и пользовательскими приложениями. Все драйверы выполняются в пространстве пользователя в изолированных sandbox-окружениях. Для совместимости с существующими приложениями предоставляется специальная POSIX-прослойка, позволяющая запускать многие программы без портирования.

В системе применяется принцип «все есть URL». Например, для записи в лог может использоваться URL «log://», для взаимодействия между процессами «bus://», для сетевого взаимодействия «tcp://» и т.п. Модули, которые могут быть реализованы в форме драйверов, расширений ядра и пользовательских приложений, могут регистрировать свои обработчики URL, например, можно написать модуль обращения к портам ввода/вывода и привязать его к URL «port_io://», после чего можно использовать его для доступа к 60 порту через открытие URL «port_io://60». Наработки проекта распространяются под свободной лицензией MIT.

Пользовательское окружение в Redox построено на базе собственной графической оболочки Orbital (не путать с другой оболочкой Orbital, использующей Qt и Wayland) и тулкита OrbTk, предоставляющего API, похожий на Flutter, React и Redux. В качестве web-браузера применяется Netsurf. Проектом также развивается собственный пакетный менеджер, набор стандартных утилит (binutils, coreutils, netutils, extrautils), командная оболочка ion, стандартная Си-библиотека relibc, vim-подобный текстовый редактор sodium, сетевой стек и файловая система TFS, развиваемая на основе идей ZFS (модульный вариант ZFS на языке Rust). Конфигурация задаётся на языке Toml.



Источник: http://www.opennet.ru/opennews/art.shtml? num=54316

© OpenNet