На проходящей в эти дни конференции Linux Plumbers 2022 инженер из компании Western Digital выступил с докладом о разработке экспериментального драйвера для SSD-накопителей с интерфейсом NVM-Express (NVMe), написанного на языке Rust и работающего на уровне ядра Linux. Несмотря на то, что проект пока находится на раннем этапе развития, проведённое тестирование показало, что производительность NVMe-драйвера на языке Rust соответствует имеющемуся в ядре NVMe-драйверу, написанному на языке Си.
В докладе говорится, что текущий NVMe-драйвер на языке Си полностью устраивает разработчиков, но подсистема NVMe является хорошей площадкой для изучения целесообразности разработки драйверов на языке Rust, так как она достаточно простая, широко используется, предъявляет высокие требования к производительности, имеет проверенную эталонную реализацию для сравнения и поддерживает различные интерфейсы (dev, pci, dma, blk-mq, gendisk, sysfs).
Отмечается, что PCI NVMe драйвер на Rust уже предоставляет необходимую для работы функциональность, но пока не готов для широкого использования, так как требует отдельных доработок. Среди планов на будущее называется избавление кода от имеющихся unsafe-блоков, поддержка операций удаления устройства и выгрузки драйвера, поддержка интерфейса sysfs, реализация отложенной инициализации, создание драйвера для blk-mq и эксперименты с использованием асинхронной модели программирования для queue_rq.
Дополнительно можно отметить проводимые компанией NCC Group эксперименты по разработке драйверов на языке Rust для ядра FreeBSD. В качестве примера подробно разбирается простой echo-драйвер, возвращающий данные, записанные в файл /dev/rustmodule. На следующем этапе экспериментов NCC Group рассматривает возможность переработки на языке Rust базовых компонентов ядра для повышения безопасности сетевых и файловых операций.
При этом, несмотря на то, что показана возможность создания простых модулей на языке Rust, более плотная интеграция Rust в ядро FreeBSD потребует проведения дополнительной работы. Например, упоминается необходимость создания набора слоёв абстракции над подсистемами и структурами ядра, похожих на надстройки, подготовленные проектом Rust for Linux. В дальнейшем планируется провести похожие эксперименты с ядром Illumos и выделить общие абстракции на Rust, которые могли бы использоваться в написанных на Rust драйверах для Linux, BSD и Illumos.
По данным компаний Microsoft и Google около 70% уязвимостей в их программных продуктах вызваны небезопасной работой с памятью. Предполагается, что использование языка Rust позволит снизить риск появления уязвимостей, вызванных небезопасной работой с памятью, и исключить появление таких ошибок, как обращение к области памяти после её освобождения и выход за границы буфера.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами и учёт времени жизни объектов (области видимости), а также через оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Источник: opennet.ru