Пятая рэдакцыя патчаў для ядра 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) спасылак і зменных па змаўчанні, прапануе моцную статычную тыпізацыю для мінімізацыі лагічных памылак.

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

  • У сістэму бесперапыннай інтэграцыі на базе падтрымоўванага кампаніяй Intel робата 0DAY/LKP дададзеная праверка кампанентаў для падтрымкі Rust і пачалася публікацыя справаздач аб тэставанні. Рыхтуецца інтэграцыя падтрымкі Rust у сістэму аўтаматызаванага тэсціравання KernelCI. Тэставанне на базе GitHub CI пераведзена на выкарыстанне кантэйнераў.
  • Модулі ядра на Rust пазбаўлены ад неабходнасці вызначэння crate-атрыбутаў "#![no_std]" і "#![feature(…)]".
  • Дададзена падтрымка адзінкавых зборачных мэт (.o, .s, .ll і .i).
  • У рэкамендацыях па афармленні кода вызначаны правілы ў дачыненні да падзелу каментароў ("//") і дакументавання кода ("///").
  • Перапрацаваны скрыпт is_rust_module.sh.
  • Дададзена падтрымка статычных (глабальных агульных зменных) прымітываў сінхранізацыі, заснаваных на рэалізацыі "CONFIG_CONSTRUCTORS".
  • Спрошчана кіраванне блакіроўкамі: Guard і GuardMut аб'яднаны і адзін параметрызаваны тып.
  • Дана магчымасць вызначэння дадатковых параметраў пры рэгістрацыі прылад.
  • Дададзена абстракцыя "RwSemaphore", якая выступае ў ролі абвязкі над Сі-структурай rw_semaphore.
  • Для выкарыстання mmap дададзены новы модуль mm і абстракцыя VMA (абвязка над структурай vm_area_struct).
  • Драйвер GPIO PL061 пераведзены на выкарыстанне макраса "dev_*!".
  • Праведзена агульная чыстка кода.

Крыніца: opennet.ru

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