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


В доклада се посочва, че текущият NVMe драйвер на C напълно удовлетворява разработчиците, но подсистемата 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
