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

Мигел Охеда, авторът на проекта Rust-for-Linux, предложи пета версия на компоненти за разработване на драйвери на устройства на езика Rust за разглеждане от разработчиците на ядрото на Linux. Поддръжката на Rust се счита за експериментална, но вече е включена в клона linux-next и е достатъчно развита, за да започне работа по създаване на абстракционни слоеве върху подсистеми на ядрото, както и писане на драйвери и модули. Разработката е финансирана от Google и ISRG (Internet Security Research Group), която е основател на проекта Let's Encrypt и насърчава HTTPS и развитието на технологии за подобряване на интернет сигурността.

Спомнете си, че предложените промени правят възможно използването на Rust като втори език за разработване на драйвери и модули на ядрото. Поддръжката на Rust е представена като опция, която не е активирана по подразбиране и не води до включването на Rust сред необходимите зависимости за компилация за ядрото. Използването на Rust за разработване на драйвери ще ви позволи да създадете по-безопасни и по-добри драйвери с минимални усилия, без проблеми като достъп до област на паметта, след като е освободена, дерефериране на нулеви указатели и препълване на буфер.

Безопасното боравене с паметта е осигурено в Rust по време на компилиране чрез проверка на референции, проследяване на собствеността върху обекта и продължителността на живот (обхват) на обекта, както и чрез оценка на коректността на достъпа до паметта по време на изпълнение на кода. Rust също осигурява защита срещу препълване на цели числа, изисква задължителна инициализация на стойностите на променливите преди употреба, обработва грешките по-добре в стандартната библиотека, прилага концепцията за неизменни препратки и променливи по подразбиране, предлага силно статично въвеждане за минимизиране на логическите грешки.

Новата версия на пачовете продължава да елиминира коментарите, направени по време на обсъждането на първото, второто, третото и четвъртото издание на пачовете. В новата версия:

  • Тестването на компоненти за поддръжка на Rust беше добавено към системата за непрекъсната интеграция, базирана на поддържания от Intel 0DAY/LKP бот и започна публикуването на отчети за тестване. Подготвяме се да интегрираме поддръжката на Rust в автоматизираната система за тестване KernelCI. Тестването, базирано на GitHub CI, е прехвърлено към използването на контейнери.
  • Модулите на ядрото на Rust са освободени от необходимостта да дефинират атрибутите на кутията „#![no_std]“ и „#![feature(…)]“.
  • Добавена е поддръжка за единични цели за сглобяване (.o, .s, .ll и .i).
  • Насоките за код дефинират правила за разделяне на коментари („//“) и документиране на код („///“).
  • Скриптът is_rust_module.sh е преработен.
  • Добавена е поддръжка за статични (глобална споделена променлива) примитиви за синхронизиране въз основа на имплементацията "CONFIG_CONSTRUCTORS".
  • Управлението на заключване е опростено: Guard и GuardMut са комбинирани и един параметризиран тип.
  • Възможно е да се определят допълнителни параметри при регистриране на устройства.
  • Добавена е абстракцията „RwSemaphore“, която действа като обвивка върху C структурата rw_semaphore.
  • За да използвате mmap, са добавени нов mm модул и VMA абстракция (обвивка върху структурата vm_area_struct).
  • Драйверът GPIO PL061 е превключен към използване на макроса „dev_*!“.
  • Беше извършено общо почистване на кода.

Източник: opennet.ru

Добавяне на нов коментар