Проект 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.

Розробником підготовлено завантажувальне оточення, яке запускається в QEMU або у віртуальній машині Firecracker з драйвером virtio-net, до якого вже можна підключитися SSH. В якості системної бібліотеки використовується musl, а в якості утиліт користувача - BusyBox.

Проект Kerla розвиває Linux-сумісне ядро ​​на мові Rust

На базі Docker підготовлено систему збирання, що дозволяє формувати власні завантажувальні initramfs з ядром Kerla. Окремо розвиваються схожа на fish програмна оболонка nsh та GUI-стек Kazari на базі протоколу Wayland.

Проект Kerla розвиває Linux-сумісне ядро ​​на мові Rust

Використання мови Rust у проекті дозволяє скоротити кількість помилок у коді завдяки застосуванню прийомів безпечного програмування та підвищенню ефективності виявлення проблем під час роботи з пам'яттю. Безпечна робота з пам'яттю забезпечується в Rust під час компіляції через перевірку посилань, відстеження володіння об'єктами та облік часу життя об'єктів (області видимості), а також оцінку коректності доступу до пам'яті під час виконання коду. Крім того, Rust надає засоби для захисту від цілих переповнень, вимагає обов'язкової ініціалізації значень змінних перед використанням, застосовує концепцію незмінності (immutable) посилань і змінних за умовчанням, пропонує сильну статичну типізацію для мінімізації логічних помилок, спрощує обробку вхідних значень. .

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

Джерело: opennet.ru

Додати коментар або відгук