Новая версия патчей для ядра Linux с поддержкой языка Rust

Мигель Охеда (Miguel Ojeda), автор проекта Rust-for-Linux, предложил для рассмотрения разработчиками ядра Linux выпуск v5 компонентов для разработки драйверов устройств на языке Rust. Это шестая редакция патчей с учётом первого варианта, опубликованного без номера версии. Поддержка Rust рассматривается как экспериментальная, но уже включена в ветку linux-next и достаточно развита для начала работы по созданию слоёв абстракции над подсистемами ядра, а также для написания драйверов и модулей. Разработка финансируется компанией Google и организацией ISRG (Internet Security Research Group), которая является учредителем проекта Let’s Encrypt и способствует продвижению HTTPS и развитию технологий для повышения защищённости интернета.

Напомним, что предложенные изменения дают возможность использовать Rust в качестве второго языка для разработки драйверов и модулей ядра. Поддержка Rust преподносится как опция, не активная по умолчанию и не приводящая к включению Rust в число обязательных сборочных зависимостей к ядру. Использование Rust для разработки драйверов позволит с минимальными усилиями создавать безопасные и более качественные драйверы, избавленные от таких проблем как обращение к области памяти после её освобождения, разыменование нулевых указателей и выход за границы буфера.

Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами и учёт времени жизни объектов (области видимости), а также через оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.

В новом варианте патчей продолжено устранение замечаний, высказанных в процессе обсуждения первой, второй, третьей, четвёртой и пятой редакций патчей. В новой версии:

  • Инструментарий обновлён до выпуска Rust 1.59.0. С новой версией Rust также синхронизирован вариант библиотеки alloc, избавленный от возможных генераций состояния “panic” при возникновении ошибок, таких как нехватка памяти. Стабилизирована возможность использования ассемблерных вставок (“feature(global_asm)”).
  • Добавлена поддержка создания на языке Rust хостовых программ, используемых в процессе компиляции ядра.
  • Вместо поставки заранее созданных файлов со спецификацией целевых платформ обеспечена их динамическая генерация на основе конфигурации ядра.
  • Добавлен параметр ядра HAVE_RUST, включаемый для архитектур, на которых поддерживается Rust.
  • Предложены абстракции для использования в коде на языке Rust аппаратного генератора псевдослучайных чисел.
  • Разрешено использование кодов ошибок без префикса “Error::” (например, “return Err(EINVAL)”) для приближения к обработке кодов ошибок на Си.
  • Добавлен тип “CString” для собственных Си-строк. Объединены типы Formatter и Buffer.
  • Добавлены типажи Bool и LockInfo.
  • Упрощена реализация spin-блокировок.
Release. Ссылка here.