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