Проект Kerla развивает Linux-совместимое ядро на языке Rust

В рамках проекта Kerla ведётся разработка ядра операционной системы, написанного на языке Rust. Новое ядро изначально ориентировано на обеспечение совместимости с ядром Linux на уровне ABI, что позволит запускать в окружении на базе Kerla немодифицированные исполняемые файлы, собранные для Linux. Код распространяется под лицензиями Apache 2.0 и MIT. Проект развивает японский разработчик Сейя Нута (Seiya Nuta), известный созданием микроядерной операционной системы Resea, написанной на языке Си.

На текущем этапе развития Kerla может работать только на системах с архитектурой x86_64 и реализует базовые системные вызовы, такие как write, stat, mmap, pipe и poll, поддерживает сигналы, неименованные каналы и переключения контекста. Для управление процессами предоставляются такие вызовы, как fork, wait4 и execve. Имеется поддержка tty и псевдотерминалов (pty).
Из файловых систем пока поддерживаются initramfs (применяется для монтирования корневой ФС), tmpfs и devfs. Предоставляется сетевой стек с поддержкой сокетов TCP/UDP, реализованный на базе библиотеки smoltcp.

В качестве системной библиотеки может использоваться musl, а в качестве пользовательских утилит – cargo-binutils. Разработчиком подготовлено загрузочное окружение, запускаемое в QEMU или в виртуальной машине Firecracker c драйвером virtio-net, к которому уже можно подключиться по SSH. На базе Docker подготовлена система сборки, позволяющая формировать собственные загрузочные initramfs с ядром Kerla. Отдельно развиваются похожая на fish программная оболочка nsh и GUI-стек Kazari на базе протокола Wayland.

Использование языка Rust в проекте позволяет сократить число ошибок в коде благодаря применению приёмов безопасного программирования и повышению эффективности выявления проблем при работе с памятью. Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами и учёт времени жизни объектов (области видимости), а также через оценку корректности доступа к памяти во время выполнения кода. Кроме того, Rust предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок, упрощает обработку входных значений благодаря средствам сопоставления с образцом.

Для разработки низкоуровневых компонентов, таких как ядро ОС, Rust предоставляет поддержку raw-указателей, упаковки структур, ассемблерных inline-вставок, встраивания файлов на ассемблере. Для работы без привязки к стандартной библиотеке имеются обособленные crate-пакеты для выполнения операций со строками, векторами и битовыми флагами. Из достоинств также отмечается встроенные инструменты для оценки качества кода (linter, rust-analyzer) и создания unit-тестов, которые можно запускать не только на реальном оборудовании, но и в QEMU.

Release. Ссылка here.