О проекте

Rumicos — операционная система для архитектуры x86-64, написанная с нуля на языке Rust. Она разрабатывается для сетевого оборудования: маршрутизаторов, межсетевых экранов и других сетевых устройств, где малая, проверяемая и безопасная по работе с памятью кодовая база важнее широкой совместимости с прикладными программами.

Rumicos не является ответвлением или производной Linux, BSD или любого другого существующего ядра. Каждая строка ядра — оригинальная разработка. Это означает, что в системе нет унаследованного иностранного кода, который пришлось бы принимать на доверие или отдельно аудировать.

Почему Rust и почему сетевые устройства

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

Поскольку система нацелена на сетевые устройства, а не на универсальные компьютеры, ей не нужны обширный набор драйверов, настольное окружение и слои совместимости с приложениями — именно они делают ядра общего назначения большими и трудными для аудита. Меньше кода — меньше поверхность атаки и проще проверка.

Статус

Фундамент ядра готов и проверен на реальном оборудовании под KVM. Сетевой стек — текущее направление разработки и пока не реализован. Ниже — честная таблица состояния, включая то, что ещё не сделано.

СлойСостояние
Загрузкапротокол Limine, UEFI, ядро в верхней половине адресного пространства
ПроцессорGDT / TSS / IDT, SYSCALL/SYSRET, состояние на каждое ядро через GSBASE
Память4-уровневая трансляция, прямое отображение, PCID, NUMA-буфер, SMAP/SMEP
Многоядерностьразбор ACPI/MADT, запуск ядер, x2APIC/xAPIC, TLB-shootdown
Планировщиквытесняющий MLFQ, очереди на ядро, work-stealing, futex, мьютексы
Процессызагрузчик ELF64, кольцо 3, copy-on-write fork, execve, потоки
Отображение памятианонимные и файловые mmap, MAP_SHARED, кэш страниц
Файловая системаVFS, ramfs, devfs, initrd в формате CPIO
Взаимодействие процессовpipe, dup/dup2, сигналы POSIX, wait4
Пользовательское пространствоинтерактивная оболочка с конвейерами и перенаправлением, ввод с клавиатуры
Шина PCI / MSI-Xперечисление устройств и доставка прерываний — основа для сетевой карты
Сетевой стекне реализован — в разработке
Фильтрация пакетовне реализована — запланирована
Постоянное хранилищене реализовано — запланировано

Как это проверяется

Два независимых уровня. Модульные тесты на хосте — чистая логика (арифметика аллокатора, кодирование таблиц страниц, разборщики) намеренно отделена от небезопасного кода, работающего с железом, и проверяется без оборудования. Регрессия загрузки в QEMUcargo xtask qemu-test запускает настоящий образ ядра и сверяет вывод в последовательный порт с ожидаемым. Кроме того, проект сканирует собственный скомпилированный бинарник на известные ошибки генерации кода: во время разработки было найдено три различных дефекта компилятора, каждый из которых незаметно портил данные и обнаруживался только по машинному коду.

Дорожная карта

Лицензия и модель

Rumicos — свободное программное обеспечение под лицензией GNU GPL v3. Исходный код открыт полностью.

Модель дохода не связана с продажей самой операционной системы. Планируемые источники — коммерческое лицензирование для организаций, которым обязательства GPL не подходят; техническая поддержка и сопровождение; работы по сертификации; а также интеграция системы в оборудование заказчика. Ни один из этих источников не требует закрывать код от сообщества.

Контакты

Проект развивается открыто; по вопросам сотрудничества, лицензирования или использования пишите на Ilya.Sutorma-rumicos@yandex.ru.

Сборка и запуск

rustup target add x86_64-unknown-none
cargo build -p kernel --target x86_64-unknown-none --release   # собрать ядро
cargo xtask qemu-test                                          # загрузить, проверить вывод
cargo test --workspace                                         # модульные тесты

Исходный код и инженерные заметки — в репозитории на GitHub.