В состав ветки linux-next, на основе которой будет сформирован выпуск ядра Linux 5.13, включён начальный набор компонентов для разработки драйверов устройств на языке Rust. Отдельно опубликована документация по использованию Rust в ядре Linux и пример модуля ядра с драйвером символьного устройства на языке Rust. Код добавил Стивен Ротвелл (Stephen Rothwell), мэйнтейнер ветки Linux-next. Обычно ветка Linux-next включает код, готовый для принятия в следующем цикле приёма изменений в ядро, но пока точно не ясно будет ли поддержка Rust принята Линусом Торвальдсом в состав Linux 5.13, так как код не прошёл рецензирование широким кругом разработчиков.
Поддержка разработки драйверов ядра Linux на языке Rust активно обсуждалась в прошлом году, в том числе с участием Линуса Торвальдса, который не исключал такую возможность. Идею также поддержал Грег Кроа-Хартман (Greg Kroah-Hartman), отвечающий за поддержку стабильной ветки ядра Linux. Использование Rust для разработки драйверов позволит с минимальными усилиями создавать безопасные и более качественные драйверы, избавленные от таких проблем как обращение к области памяти после её освобождения, разыменование нулевых указателей и выход за границы буфера.
Для активации поддержки Rust в ветке linux-next в KConfig добавлена опция CONFIG_RUST («Rust support» в меню «General setup»), при включении которой проверяется наличие в системе компилятора rustc и при его присутствии даётся возможность включить остальные компоненты, завязанные на Rust (например, в меню «Kernel hacking» появляется секция «Rust hacking»). Использование Rust рассматривается как опция, не активная по умолчанию и не приводящая к включению Rust в число обязательных сборочных зависимостей к ядру.
Сборка компонентов ядра на Rust возможна как при использовании GCC, так и при сборке с помощью Clang. Для использования Rust в ядре требуется установка свежих ночных сборок компилятора rustc, не старее ветки nightly-2021-02-20 (по возможности обещают добавить поддержку стабильных веток Rust, но пока имеется привязка к некоторым экспериментальным возможностям). Также необходимо наличие в системе стандартных библиотек Rust, поставляемых в пакете rust-src, и генератора привязок bindgen. Поддержка пока ограничена платформами x86_64 и ARM64.
Источник: opennet.ru