Втора редакция на пачовете за ядрото на Linux с поддръжка на езика Rust

Мигел Охеда (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-hooks.
  • Предложен по-функционален пример на 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster