Мигел Охеда (Miguel Ojeda), авторът на проекта Rust-for-Linux, предложи на разработчиците на ядрото Linux обновен вариант на компонентите за разработка на драйвери на езика Rust. Подкрепата за Rust се разглежда като експериментална, но вече е одобрена за вмъкване в клон linux-next. В новия вариант са отстранени забележките, изразени по време на обсъждането на първата версия на пачовете. Линус Торвалдс вече се включи в дискусията и предложи да се промени логиката на обработка на някои битови операции.
Напомняме, че предложените изменения дават възможност да се използва Rust като втори език за разработка на драйвери и модули на ядрото. Подкрепата за Rust се предлага като опция, която не е активна по подразбиране и не води до включването на Rust в броя на задължителните зависимости на ядрото. Използването на Rust за разработка на драйвери ще осигури с минимални усилия създаването на безопасни и по-качествени драйвери, лишени от проблеми като достъп до освобождаваща памет, разыменуване на нулеви указатели и изход извън границите на буфера.
Безопасността на работата с паметта в Rust се осигурява по време на компилация чрез проверка на указателите, проследяване на собствеността на обектите и отчитане на времето на живот на обектите (обхват), както и чрез оценка на коректността на достъпа до паметта по време на изпълнение на кода. Rust предлага също така средства за защита от аритметични препълвания, изисква задължителна инициализация на стойностите на променливите преди употреба, по-добро управление на грешки в стандартната библиотека, прилага концепцията за неизменяемост (immutable) на указателите и променливите по подразбиране и предлага силна статична типизация за минимизиране на логическите грешки.
Най-забележителните промени в новата версия на пачовете:
- Кодът за разпределяне на паметта е освободен от възможни генерации на състояние „panic“ при възникване на грешки, като недостиг на памет. Включен е вариант на Rust-библиотеката alloc, в която е преработен кодът за обработка на сривове, но крайната цел е прехвърлянето в основната редакция alloc на всички възможности, необходими за ядрото (промените вече са подготвени и предадени в състава на стандартната библиотека Rust).
- Вместо нощни сборки за компилиране на ядрото с подкрепа за Rust, сега могат да се използват бета издания и стабилни версии на компилатора rustc. В момента за референтен компилатор се използва rustc 1.54-beta1, но след излизането на версията 1.54 в края на месеца, именно тя ще бъде поддържана като референтна.
- Добавена е подкрепа за написване на тестове, използвайки стандартния за Rust атрибут „#[test]“ и възможността за прилагане на doctests за документиране на тестовете.
- Добавена е подкрепа за архитектурите ARM32 и RISCV в допълнение към преди това поддържаните x86_64 и ARM64.
- Подобрени са реализациите на GCC Rust (GCC фронтенд за Rust) и rustc_codegen_gcc (бекенд на rustc за GCC), които вече преминават всички основни тестове.
- Предложен е ново ниво на абстракция за използване в програми на езика Rust механизми на ядрото, написани на езика C, като червено-черно дърво, обекти с броене на референции, създаване на файлови дескриптори, задачи, файлове и вектори за вход/изход.
- В компонентите за разработка на драйвери е подобрена подкрепата за модула „file_operations“, макроса „module!“, регистрацията на макроси и рудиментарни драйвери (probe и remove).
- В Binder е реализирана подкрепа за предаване на файлови дескриптори и LSM хукове.
- Предложен е по-функционален пример за драйвер на Rust — bcm2835-rng за хардуерния генератор на случайни числа на платките Raspberry Pi.
Допълнително се споменават проекти на някои компании, свързани с използването на Rust в ядрото:
- Компанията Microsoft изрази интерес да участва в работата по интегриране на подкрепата за Rust в ядрото Linux и е готова в следващите месеци да предостави реализации на драйвери за Hyper-V на Rust.
- Компания ARM работи над подобряване на поддръжката на Rust за системи, базирани на ARM процесори. Проектът Rust вече получи предложения за изменения, които превръщат 64-битовите ARM системи в платформи от първо ниво поддръжка (Tier-1).
- Компания Google осигурява директна поддръжка на проекта Rust for Linux, разработва нова реализация на механизма за междупроцесно взаимодействие Binder на Rust и обмисля преработка на различни драйвери на Rust. Чрез ISRG (Internet Security Research Group) компанията Google финансира работата по интеграцията на поддръжка за Rust в ядрото на Linux.
- Компания IBM реализира поддръжка на Rust в ядрото за системи PowerPC.
- Лабораторията LSE (Systems Research Laboratory) разработи SPI драйвер на Rust.
Източник: opennet.ru
