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

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

Як і мінулы варыянт патчаў выпуск v10 зрэзаны да самага неабходнага мінімуму, дастатковага для зборкі простага модуля ядра, напісанага на мове Rust. Адрозненні ад мінулай версіі зводзяцца да дробных праўкаў, замене sizeof на ARRAY_SIZE у kallsyms.c і адаптацыі патчаў да ядра v6.0-rc7. Мяркуецца, што мінімальны патч, памер якога скарочаны з з 40 да 13 тысяч радкоў кода, спросціць прыняцце падтрымкі Rust у асноўны склад ядра. Пасля забеспячэння мінімальнага падтрымання плануецца паступова нарошчваць наяўную функцыянальнасць, пераносячы і іншыя змены з галінкі Rust-for-Linux.

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

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

Крыніца: opennet.ru

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