Чацвёртая рэдакцыя патчаў для ядра Linux з падтрымкай мовы Rust

Мігель Охеда (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

Дадаць каментар