Мигел Охеда (Miguel Ojeda), автор на проекта Rust-for-Linux, предложи на разработчиците на ядрото Linux четвъртата версия на компонентите за разработка на драйвери на устройства на езика Rust. Поддръжката на Rust се смята за експериментална, но вече е одобрена за включване в клон linux-next и е достатъчно развита, за да започне работа по създаването на абстрактни слоеве над подсистемите на ядрото, както и за написването на драйвери и модули. Разработката се финансира от компанията Google и организацията ISRG (Internet Security Research Group), която е основател на проекта Let’s Encrypt и подпомага популяризирането на HTTPS и развитието на технологии за подобряване на сигурността в интернет.
Напомняме, че предложените промени дават възможност да се използва Rust като втори език за разработка на драйвери и модули на ядрото. Поддръжката на Rust е представена като опция, която не е активна по подразбиране и не води до включването на Rust в задължителните зависимости за изграждане на ядрото. Използването на Rust за разработка на драйвери ще позволи с минимални усилия да се създават безопасни и по-качествени драйвери, освободени от проблеми като достъп до памет след освобождаването ѝ, разименуване на нулеви указатели и излизане извън границите на буфера.
Безопасната работа с паметта се осигурява в Rust по време на компилация чрез проверка на референции, проследяване на собствеността на обекти и отчитане на времето на живот на обектите (област на видимост), както и чрез оценка на коректността на достъпа до паметта по време на изпълнението на кода. Rust също така предлага средства за защита от препълване на цели числа, изисква задължителна инициализация на стойностите на променливите преди използване, по-добре обработва грешките в стандартната библиотека, прилага концепцията за неизменяемост (immutable) на референции и променливи по подразбиране и предлага силна статична типизация за минимизиране на логически грешки.
В новата версия на патчовете продължава премахването на бележките, направени по време на дискусията на първата, втората и третата редакция на патчовете. В новата версия:
- Преходът към използването на стабилната версия на компилатора Rust 1.58.0 е осъществен. От необходимите за проекта промени, които все още не са включени в основния инструментариум на Rust, се отбелязват флагът „-Zsymbol-mangling-version=v0“ (очакван в Rust 1.59.0) и режимът „maybe_uninit_extra“ (очакван в Rust 1.60.0).
- Добавени са автоматични проверки за наличието на подходящ инструментариум за Rust и разширени възможности за тестване на поддръжката на Rust в системата.
- Предложени са нови абстракции за достъп от кода на езика Rust до таблиците с идентификатори на устройства („IdArray“ и „IdTable“).
- Добавени са прослойки за извикване на функции, свързани с таймерите (clock framework).
- Драйверите за платформите сега са определени чрез реализиране на типажи.
- Добавен е нов макрос за улесняване на регистрацията на драйвери на платформи, а също така е предложен нов шаблон за типов драйвер.
- Добавени са макроси за структурите „dev_*“.
- Добавени са методи „{read,write}*_relaxed“ за типа IoMem.
- Премахнато е свойството FileOpener за опростяване на операциите с файлове.
- Към числото на аргументите, предавани при регистрацията на драйвера, е добавен параметър „ThisModule“.
- Предложен е типов шаблон за създаване на модули на ядрото на езика Rust.
Източник: opennet.ru
