Новая версія патчаў для ядра Linux з падтрымкай мовы Rust

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

Нагадаем, што прапанаваныя змены даюць магчымасць выкарыстоўваць Rust у якасці другой мовы для распрацоўкі драйвераў і модуляў ядра. Падтрымка Rust падаецца як опцыя, не актыўная па змаўчанні і не якая прыводзіць да ўключэння Rust у лік абавязковых зборачных залежнасцяў да ядра. Выкарыстанне Rust для распрацоўкі драйвераў дазволіць з мінімальнымі намаганнямі ствараць бяспечныя і больш якасныя драйверы, пазбаўленыя ад такіх праблем як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў і выхад за межы буфера.

Бяспечная праца з памяццю забяспечваецца ў Rust падчас кампіляцыі праз праверку спасылак, адсочванне валодання аб'ектамі і ўлік часу жыцця аб'ектаў (вобласці бачнасці), а таксама праз адзнаку карэктнасці доступу да памяці падчас выканання кода. Rust таксама дае сродкі для абароны ад цэлалікіх перапаўненняў, патрабуе абавязковай ініцыялізацыі значэнняў зменных перад выкарыстаннем, лепш апрацоўвае памылкі ў стандартнай бібліятэцы, ужывае канцэпцыю нязменнасці (immutable) спасылак і зменных па змаўчанні, прапануе моцную статычную тыпізацыю для мінімізацыі лагічных памылак.

У новым варыянце патчаў працягнута ўхіленне заўваг, выказаных падчас абмеркаванняў першай, другой, трэцяй, чацвёртай і пятай рэдакцый патчаў. У новай версіі:

  • Інструментарый абноўлены да выпуску Rust 1.59.0. З новай версіяй Rust таксама сінхранізаваны варыянт бібліятэкі alloc, пазбаўлены ад магчымых генерацый стану "panic" пры ўзнікненні памылак, такіх як недахоп памяці. Стабілізаваная магчымасць выкарыстання асэмблерных уставак («feature(global_asm)»).
  • Дададзена падтрымка стварэння на мове Rust хостовых праграм, якія выкарыстоўваюцца ў працэсе кампіляцыі ядра.
  • Замест пастаўкі загадзя створаных файлаў са спецыфікацыяй мэтавых платформаў забяспечана іх дынамічная генерацыя на аснове канфігурацыі ядра.
  • Дададзены параметр ядра HAVE_RUST, які ўключаецца для архітэктур, на якіх падтрымліваецца Rust.
  • Прапанаваны абстракцыі для выкарыстання ў кодзе на мове Rust апаратнага генератара псеўдавыпадковых лікаў.
  • Дазволена выкарыстанне кодаў памылак без прэфікса "Error::" (напрыклад, "return Err(EINVAL)") для набліжэння да апрацоўкі кодаў памылак на Сі.
  • Дададзены тып "CString" для ўласных Сі-радкоў. Аб'яднаны тыпы Formatter і Buffer.
  • Дададзены тыпажы Bool і LockInfo.
  • Спрошчана рэалізацыя spin-блакіровак.

Крыніца: opennet.ru

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