Мигель Охеда, автор проекта Rust-for-Linux, Теме недавно обнародовал четвертое предложение по компоненты драйвера устройства Rust для разработчиков ядра Linux.
Поддержка Rust считается экспериментальной, но она уже согласована для включения в ветку linux-next и достаточно зрела, чтобы начать работу над слоями абстракции поверх подсистем ядра, а также писать драйверы и модули. Разработка финансируется Google и ISRG (Internet Security Research Group), которая является основателем проекта Let’s Encrypt и продвигает HTTPS и разработку технологий для повышения интернет-безопасности.
Для тех, кто еще не знает о предлагаемых изменениях, они должны знать, что они делают это возможным. использование Rust в качестве второго языка для разработки контроллеров и модулей ядра. Поддержка Rust представлена как опция, которая не включена по умолчанию и не приводит к включению Rust в число необходимых зависимостей сборки для ядра.
Использование Rust для разработки драйверов позволит вам создавать более качественные и безопасные драйверы с минимальными усилиями, без проблем, таких как доступ к области памяти после ее освобождения, разыменование нулевых указателей и переполнение буфера.
Безопасность памяти обеспечивается в Rust во время компиляции путем проверки ссылок, отслеживания владения объектом и времени жизни объекта (область действия), а также путем оценки правильности доступа к памяти во время выполнения кода.
Rust также обеспечивает защиту от целочисленного переполнения, требует инициализации переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемых переменных и ссылок по умолчанию и предлагает строгую статическую типизацию для минимизации логических ошибок.
Какие изменения в четвертой части?
В этой новой версии патчей, которые представлены, упоминается, что комментарии, сделанные во время обсуждения первой, второй и третьей редакции патчей, продолжают устраняться.
Мы будем обновлять до тех пор, пока не перестанем зависеть от каких-либо нестабильных функций;
в этот момент мы можем захотеть объявить минимальную версию Rust
поддерживается, как это сделано, например, для GCC и Clang.Точно так же мы перешли на версию языка Rust 2021 года.
Что касается других изменений, которые были внесены в эту новую версию, в объявлении упоминается следующее:
- Перешел на использование стабильной версии Rust 1.58.0 в качестве эталонного компилятора.
- Изменения, необходимые для проекта, еще не включенные в основной набор инструментов Rust, включают флаг «-Zsymbol-mangling-version=v0» (ожидается в Rust 1.59.0) и режим «maybe_uninit_extra» (ожидается в Rust 1.60.0). .
- Добавлены автоматические проверки наличия инструментов Rust и их пригодности, а также расширена возможность тестирования поддержки Rust в системе.
- Предлагаются новые абстракции для доступа к таблицам идентификаторов устройств («IdArray» и «IdTable») из кода Rust.
- Добавлены слои для вызова функций, связанных с таймером (кадр часов).
- Контроллеры платформы теперь определяются через реализации трейтов.
- Добавлен новый макрос для упрощения регистрации драйвера платформы, а также предложен новый общий шаблон драйвера.
- Добавлены новые макросы для структур "dev_*".
- Добавлены новые методы "{read,write}*_relaxed" для типа IoMem. .
- Удалено свойство FileOpener для упрощения операций с файлами.
- В число аргументов, передаваемых при регистрации контроллера, добавлен параметр ThisModule.
- Предлагается типовой шаблон для создания модулей ядра на языке Rust.
Наконец, если вам интересно узнать больше об этой новой версии, вы можете ознакомиться с подробностями По следующей ссылке.