Rumicos — операционная система для архитектуры x86-64, написанная с нуля на языке Rust. Она разрабатывается для сетевого оборудования: маршрутизаторов, межсетевых экранов и других сетевых устройств, где малая, проверяемая и безопасная по работе с памятью кодовая база важнее широкой совместимости с прикладными программами.
Rumicos не является ответвлением или производной Linux, BSD или любого другого существующего ядра. Каждая строка ядра — оригинальная разработка. Это означает, что в системе нет унаследованного иностранного кода, который пришлось бы принимать на доверие или отдельно аудировать.
Сетевой код по своей природе разбирает недоверенный ввод — пакеты приходят извне. Именно поэтому он остаётся одним из главных источников уязвимостей, связанных с работой с памятью, в традиционных сетевых стеках на языке 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 | перечисление устройств и доставка прерываний — основа для сетевой карты |
| Сетевой стек | не реализован — в разработке |
| Фильтрация пакетов | не реализована — запланирована |
| Постоянное хранилище | не реализовано — запланировано |
Два независимых уровня. Модульные тесты на хосте — чистая логика (арифметика аллокатора, кодирование таблиц страниц, разборщики) намеренно отделена от небезопасного кода, работающего с железом, и проверяется без оборудования. Регрессия загрузки в QEMU — cargo 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.