Мигел Охеда (Miguel Ojeda), автор на проекта Rust-for-Linux, предложи за разглеждане от разработчиците на ядрото на Linux петия вариант компоненти за разработка на драйвери за устройства на езика Rust. Поддръжката на Rust се разглежда като експериментална, но вече е включена във версия linux-next и е достатъчно развита, за да започне работа по създаването на слоеве на абстракция над подсистемите на ядрото, а също така и за написване на драйвери и модули. Разработката се финансира от компанията Google и организацията ISRG (Internet Security Research Group), която е учредител на проекта Let’s Encrypt и способства за популяризирането на HTTPS и развитието на технологии за повишаване на сигурността в интернет.
Напомняме, че предложените промени дават възможност да се използва Rust като втори език за разработка на драйвери и модули на ядрото. Поддръжката на Rust е представена като опция, която не е активна по подразбиране и не води до включването на Rust в задължителните зависимости за изграждане на ядрото. Използването на Rust за разработка на драйвери ще позволи с минимални усилия да се създават безопасни и по-качествени драйвери, освободени от проблеми като достъп до памет след освобождаването ѝ, разименуване на нулеви указатели и излизане извън границите на буфера.
Безопасната работа с паметта се осигурява в Rust по време на компилация чрез проверка на референции, проследяване на собствеността на обекти и отчитане на времето на живот на обектите (област на видимост), както и чрез оценка на коректността на достъпа до паметта по време на изпълнението на кода. Rust също така предлага средства за защита от препълване на цели числа, изисква задължителна инициализация на стойностите на променливите преди използване, по-добре обработва грешките в стандартната библиотека, прилага концепцията за неизменяемост (immutable) на референции и променливи по подразбиране и предлага силна статична типизация за минимизиране на логически грешки.
В новата версия на патчовете продължава премахването на забележките, изразени по време на обсъждането на първата, втората, третата и четвъртата редакция на патчовете. В новата версия:
- В системата за непрекъсната интеграция, базирана на поддържания от Intel бот 0DAY/LKP, е добавена проверка на компонентите за поддръжка на Rust и започна публикуването на отчети за тестване. Подготвя се интеграция на поддръжката на Rust в системата за автоматично тестване KernelCI. Тестването, базирано на GitHub CI, е прехвърлено на използване на контейнери.
- Модулите на ядрото на Rust са освободени от необходимостта от определяне на crate-атрибутите «#![no_std]» и «#![feature(…)]».
- Добавена е поддръжка на единични строителни цели (.o, .s, .ll и .i).
- В препоръките за оформяне на кода са определени правила относно разделянето на коментарите («//») и документирането на кода («///»).
- Преработен е скриптът is_rust_module.sh.
- Добавена е поддръжка на статични (глобални общи променливи) примитиви за синхронизация, основани на реализацията на «CONFIG_CONSTRUCTORS».
- Управлението на блокировките е опростено: Guard и GuardMut са обединени в един параметризиран тип.
- Предоставена е възможност за определяне на допълнителни параметри при регистрацията на устройства.
- Добавена е абстракция «RwSemaphore», която служи като обвивка над Си-структурата rw_semaphore.
- За използване на mmap е добавен нов модул mm и абстракция VMA (обвивка над структурата vm_area_struct).
- Драйверът GPIO PL061 е прехвърлен на използване на макроса «dev_*!».
- Извършена е обща почистване на кода.
Източник: opennet.ru
