Выпуск ядра Asterinas 0.18, написанного на языке Rust и совместимого с Linux

Представлен релиз проекта 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, FFmpeg, PyTorch, TensorFlow, Ollama и Codex.

В ядре обеспечена полная поддержка архитектуры 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 для создания, сборки, тестирования и запуска компонентов операционной системы. Для разработчиков подготовлен набор библиотек OSTD (Operating System Standard Library), включающий редакцию стандартных библиотек Rust(crate std), адаптированную для использования в компонентах операционной системы.

Среди изменений в версии 0.18:

  • В рамках работы по обеспечению запуска Asterinas в качестве гостевой системы в VM-контейнерах Kata Containers и Confidential Containers реализована поддержка пространств имён IPC и cgroup, nsfs (/proc/[pid]/ns), cgroups, virtio-fs (для доступа к общей с хост-системой ФС), virtio-rng (/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.
  • Реализована система capabilities для делегирования отдельных привилегированных операций.
  • Добавлена начальная реализация фреймворка LSM (Linux Security Modules).

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