Четвърто издание на корекции за ядрото на 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 1.58.0 като референтен компилатор е направен. Сред промените, необходими за проекта, които все още не са включени в основния инструментариум на Rust, флагът „-Zsymbol-mangling-version=v0“ (очаква се в Rust 1.59.0) и режимът „maybe_uninit_extra“ (очаква се в Rust 1.60.0 .XNUMX) са отбелязани.
  • Добавени са автоматични проверки за наличието на подходящи инструменти на Rust и е разширена възможността за тестване на поддръжката на Rust в системата.
  • Предложени са нови абстракции за достъп до таблици с идентификатори на устройства („IdArray“ и „IdTable“) от код на Rust.
  • Добавени са слоеве за достъп до функции, свързани с таймера (часовник).
  • Драйверите на платформата вече се дефинират чрез реализации на черти.
  • Добавен е нов макрос за опростяване на регистрацията на драйвери на платформа и е предложен нов общ шаблон на драйвер.
  • Добавени макроси за структури "dev_*".
  • Добавени са методи "{read,write}*_relaxed" за типа IoMem .
  • Премахнато е свойството FileOpener, за да се опростят файловите операции.
  • Параметърът „ThisModule“ е добавен към аргументите, предавани при регистриране на драйвер.
  • Предлага се стандартен шаблон за създаване на модули на ядрото на езика Rust.

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

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