Представлено реліз проекту Asterinas 0.18, що розвиває ядро, написане мовою Rust та призначене для використання в операційних системах загального призначення. Ядро надає ABI (Application Binary Interface), сумісний із ядром Linux і здатний використовуватись замість нього. Паралельно розвивається дистрибутив Asterinas NixOS, що поєднує ядро Asterinas із системним оточенням NixOS. Код проекту розповсюджується під ліцензією MPL (Mozilla Public License).
На даний час в ядрі реалізовано близько 240 системних викликів Linux. У дистрибутиві Asterinas NixOS верифіковано роботу поверх ядра Asterinas понад 100 пакетів із NixOS. Серед підтримуваних пакетів: Xfce, Firefox, bash, systemd, Podman, QEMU, rsync, Apache httpd, nginx, SQLite, Redis, Clang, GCC, Go, Lua, Node.js, OpenJDK, Perl, PHP, Python, Ruby, Rust, Git, FFxeg.
У ядрі забезпечена повна підтримка архітектури x86-64, часткова підтримка RISC-V 64 та x86-64 з ізоляцією на базі Intel TDX, а також початкова підтримка архітектури LoongArch 64. З пріоритетних областей застосування називаються системи, зав'язані Linux ABI, але потребують вищого рівня захищеності. Наприклад, Asterinas пропонується використовувати для формування системного оточення захищених віртуальних машин, Для ізоляції яких використовуються такі технології, як ARM CCA, AMD SEV та Intel TDX, а також на стороні хост-системи, що забезпечує запуск контейнерів.
Для зниження ймовірності появи помилок при роботі з пам'яттю, що є головним джерелом найбільш небезпечних уразливостей, при написанні Asterinas задіяна мова Rust та тактика обмеженого використання unsafe-блоків. Ядро побудоване з використанням архітектури framekernel, в якій спробували поєднати можливості ізоляції мікроядер з ефективністю монолітних ядер.
Компоненти ядра в Asterinas розміщуються в загальному адресному просторі, а безпека досягається на рівні логічного поділу безпечного коду та коду, в якому не виключено виникнення проблем із безпекою. Ядро розбите на дві частини, написані на Rust: OS Framework та OS Services. В OS Services заборонено застосування unsafe-блоків, а всі низькорівневі операції, що вимагають виконання коду в unsafe блоках, винесені в OS Framework і доступні тільки через високорівневий API. Усі системні виклики, файлові системи та драйвери реалізуються на рівні OS Services і не можуть включати unsafe-блоки.
Для розробки системних сервісів та модулів ядра поставляється інструментарій OSDK (Operating System Development Kit), що надає утиліту cargo-osdk для створення, складання, тестування та запуску компонентів операційної системи. Для розробників підготовлений набір бібліотек Operating System Standard Library (OSTD), що включає редакцію стандартних бібліотек Rust (crate std), адаптовану для використання в компонентах операційної системи.
Серед змін у версії 0.18:
- У рамках роботи з забезпечення запуску Asterinas як гостьова система в VM-контейнерах Kata Containers і Confidential Containers реалізована підтримка просторів імен IPC і cgroup, nsfs (/proc/[pid]/ns), cgroups, virtio-fs (для доступу до спільної з хост (/dev/hwrng для ентропії до генератора псеводоспадкових чисел) та vsock (для взаємодії між хостовою та гостьовою системами).
- Реалізовано системний виклик ptrace та можливості для налагодження в просторі користувача за допомогою GDB та strace.
- Запропоновано нову реалізацію файлової системи ext2 та додано драйвер NVMe. У VFS додано механізм Dentry (Directory Entry) та перероблено реалізацію сторінкового кешу.
- У дистрибутиві Asterinas NixOS реалізовано можливість запуску Codex, QEMU та Firefox.
- Додано системні виклики pidfd_getfd, pidfd_send_signal, pivot_root.
- Додана початкова підтримка IPv6.
- Реалізовано систему можливостей для делегування окремих привілейованих операцій.
- Додана початкова реалізація фреймворку LSM (Linux Security Modules).
Джерело: opennet.ru
