Skip to content

Latest commit

 

History

History
76 lines (48 loc) · 5.67 KB

File metadata and controls

76 lines (48 loc) · 5.67 KB

Anvil OS

Микроядро на основе capability для x86-64

Anvil — микроядро с фокусом на безопасность, написанное на Rust с userspace на C. Проект объединяет строгую capability-модель seL4 с практичным API-дизайном Zircon, создавая систему, в которой каждый доступ к ресурсу явно авторизован, каждый процесс изолирован, и каждая привилегия контролируется.

Зачем ещё одно микроядро?

Большинство операционных систем доверяют слишком большому объёму кода. Один баг в драйвере монолитного ядра может уронить всю систему. Anvil идёт другим путём: ядро делает минимум — планирование потоков, управление памятью, IPC — а всё остальное работает как изолированные userspace-сервисы, общающиеся через передачу сообщений.

Идея не нова. seL4 доказал, что это возможно с гарантиями математической корректности. Zircon показал, что это может быть достаточно практичным для потребительских устройств. Anvil ищет золотую середину: capability-based система, которая безопасна по дизайну и при этом доступна для системных программистов.

Архитектура

Ядро предоставляет четыре основные подсистемы:

Потоки — создание TCB (Thread Control Block), конфигурация, настройка регистров, планирование. SMP с per-CPU очередями и work stealing.

Память — VMO (Virtual Memory Object) как единица физической памяти. VMA-маппинг в адресные пространства. Процессы не могут обращаться к памяти, к которой им явно не предоставлен доступ.

Capability — каждый ядерный объект (поток, адресное пространство, объект памяти, endpoint) доступен через capability, хранящиеся в CNode процесса. Capability несут права (read, write, manage), которые можно только уменьшать, но никогда увеличивать. Передача capability между процессами через cap_copy.

IPC — синхронная rendezvous-модель передачи сообщений через Endpoint. Вместе с данными можно передавать capability, обеспечивая безопасное делегирование полномочий между сервисами.

Текущий статус

Anvil находится на ранней стадии активной разработки. Что работает сейчас:

  • Ядро загружается на x86-64 (QEMU), многоядерный SMP-планировщик работает
  • Init-процесс загружает сервисы из CPIO-архива, создаёт TCB/VSpace/CNode
  • Передача capability от init к дочерним процессам (cap_copy)
  • Дочерние процессы взаимодействуют со своим VSpace (маппинг/анмаппинг памяти)
  • Интерфейс системных вызовов: tcb_create, tcb_configure, tcb_set_regs, tcb_resume, vmo_create, vma_map, vma_unmap, vma_alloc, cap_copy

Следующие шаги: реализация IPC, name server, bootstrap libc, IO server.

Технологический стек

Компонент Технология
Ядро Rust (nightly, x86_64-unknown-none)
Userspace C (freestanding, -nostdlib)
Сборка Cargo (ядро) + CMake (userspace)
Платформа x86-64, QEMU
Загрузка CPIO-based initramfs

Сборка

# Сборка ядра
cargo build --target x86_64-unknown-none

# Сборка userspace-сервисов
mkdir build && cd build
cmake .. && make -j$(nproc)

# Запуск в QEMU
./run.sh

Подробные инструкции — в руководстве разработчика.

Участие в разработке

Anvil ищет системных программистов, знакомых с C, виртуальной памятью и работой без стандартной библиотеки. Текущие приоритеты:

  1. Bootstrap libc — минимальный C runtime для userspace-сервисов (malloc, строковые функции, printf)
  2. IPC — синхронная передача сообщений через ядерные endpoint'ы
  3. Name server — реестр сервисов для обнаружения процессов друг другом
  4. IO server — централизованное управление вводом-выводом, замена debug-syscall'ов

Подробности об архитектуре и онбординг — в руководстве разработчика.

Лицензия

[TBD]