Файловые операции Redox свели в один системный вызов: протокол stdfscall

11.02.2026

Вместо россыпи отдельных системных вызовов файловой системы в Redox появился один универсальный запрос: он несёт номер операции и её аргументы. Часть вызовов из ядра при этом исчезла, а крейт redox-scheme для авторов схем упростился.

Зачем нужен один вызов вместо многих

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

Такая схема не масштабируется. Каждая новая операция — это новый номер, новая ветка в ядре, новый пункт в проверке прав. Со временем ядро накапливает десятки похожих путей, и правка в общей части обязана учитывать каждый из них.

Альтернатива — один вызов, который принимает номер операции и аргументы, а ядро разбирает их. Новая операция добавляется в одну таблицу, а не в новый путь через всё ядро. Проект Redox шёл к этому с декабря 2025 года: тогда появился вызов syscall6 и ушли отдельные номера для открытия файла, удаления и удаления каталога. Февральская работа доводит то же самое до файловой системы целиком.

Как это устроено

Реализация описана в предложении 0029 проекта. Протокол stdfscall и пользовательская функция std_fs_call собирают все файловые операции под системным вызовом SYS_CALL. Номер операции передаётся отдельным типом, а не магическим числом, — это обычная практика системных интерфейсов.

Работа шла весь месяц. Сначала, 11 февраля, протокол появился в ядре и в крейте redox-scheme. Затем, до 28 февраля, к нему перевели RedoxFS, файловую систему в памяти, загрузочную файловую систему, демон управления питанием и драйвер USB. Отдельно в relibc объединены в std_fs_call функции fstat*, fchmod, getdents, ftruncate и futimens.

Что это даёт автору схемы на Rust

Схема в Redox — это пользовательская служба, отвечающая за ресурс одного типа: файловая система, сетевой стек, консоль. Раньше автор схемы реализовывал набор частных запросов.

Крейт redox-scheme теперь переводит универсальный вызов в конкретные запросы схемы, то есть берёт разбор на себя. Для автора схемы это одна точка расширения вместо набора частных. Крейт опубликован на crates.io: версии 0.10.0 вышли 25 февраля, 0.11.0 — 28-го.

Дополнительно определения протокола вынесены из служебного крейта в отдельный libredox::protocol, который не тянет за собой остальное. Добавлены типы для getdents и futimens.

Почему это не косметика

Меньше вызовов в ядре — меньше кода в привилегированном режиме, а значит меньше поверхность атаки. Это тот же довод, по которому capability-безопасность в проекте выносит пространства имён из ядра в userspace.

Для переносимости эффект обратный: операции, работающие через *at и другие богатые интерфейсы, на Redox требуют меньше подпорок.

Оригинал

Коммит Implement fscall RFC от 11 февраля 2026 года в репозитории redox-os/kernel; протокол в redox-os/redox-scheme того же дня, перевод RedoxFS и системных компонентов — 28 февраля. Предложение 0029 rfcs/text/0029-fscall.md. Сводка «This Month in Redox — February 2026», раздел «Filesystem System Call Unification»

Упоминаний: 1 · Просмотров: 3