Мигель Охеда (Miguel Ojeda), автор проекта Rust-for-Linux, предложил для рассмотрения разработчиками ядра Linux пятый вариант компонентов для разработки драйверов устройств на языке Rust. Поддержка Rust рассматривается как экспериментальная, но уже включена в ветку linux-next и достаточно развита для начала работы по созданию слоёв абстракции над подсистемами ядра, а также для написания драйверов и модулей. Разработка финансируется компанией Google и организацией ISRG (Internet Security Research Group), которая является учредителем проекта Let’s Encrypt и способствует продвижению HTTPS и развитию технологий для повышения защищённости интернета.
Подсетимо се да предложене измене омогућавају коришћење Руста као другог језика за развој драјвера и модула кернела. Подршка за Руст је представљена као опција која није подразумевано омогућена и не доводи до тога да Руст буде укључен као обавезна зависност изградње за кернел. Коришћење Руст-а за развој драјвера ће вам омогућити да креирате сигурније и боље драјвере уз минималан напор, без проблема као што су приступ меморији након ослобађања, нулте референце показивача и прекорачење бафера.
Руковање безбедно за меморију обезбеђено је у Русту у време компајлирања кроз проверу референци, праћење власништва над објектом и животног века објекта (обим), као и кроз процену исправности приступа меморији током извршавања кода. Руст такође пружа заштиту од прекорачења целог броја, захтева обавезну иницијализацију вредности променљивих пре употребе, боље обрађује грешке у стандардној библиотеци, подразумевано примењује концепт непроменљивих референци и променљивих, нуди снажно статичко куцање како би се минимизирале логичке грешке.
В новом варианте патчей продолжено устранение замечаний, высказанных в процессе обсуждения первой, второй, третьей и четвёртой редакций патчей. В новой версии:
- В систему непрерывной интеграции на базе поддерживаемого компанией 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_*!».
- Проведена общая чистка кода.
Извор: опеннет.ру