На провеждащата се в тези дни конференция Linux Plumbers 2022 инженер от компанията Western Digital изнесе доклад за разработването на експериментален драйвер за SSD устройства с интерфейс NVM-Express (NVMe), написан на Rust и работещ на ниво Линус ядро. Въпреки че проектът все още е на начален етап, проведеното тестване показа, че производителността на NVMe драйвера на Rust отговаря на съществуващия NVMe драйвер в ядрото, написан на C.


В доклада се посочва, че текущият NVMe драйвер на C напълно удовлетворява разработчиците, но подсистемата NVMe е добро поле за изследване на целесъобразността на разработването на драйвери на Rust, тъй като е достатъчно проста, широко използвана, с високи изисквания за производителност, разполага с проверена референтна реализация за сравнение и поддържа различни интерфейси (dev, pci, dma, blk-mq, gendisk, sysfs).
Отбелязва се, че PCI NVMe драйверът на Rust вече предоставя необходимата функционалност за работа, но все още не е готов за широко приложение, тъй като изисква специални доработки. Сред бъдещите планове е премахването на недостатъчно сигурни блокове в кода, поддръжката на операции по премахване на устройство и изтегляне на драйвера, поддръжка на интерфейса 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
