Мигел Охеда (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
