Фрэймворк для напісання абароненых драйвераў для ядра Linux на мове Rust

Джош Трыплет (Josh Triplett), які працуе ў кампаніі Intel і ўваходзіць у камітэт, які курыруе развіццё Crates.io, у сваім выступе на канферэнцыі Open Source Technology Summit прадставіў працоўную групу, накіраваную на давядзенне мовы Rust да парытэту з мовай Сі ў галіне сістэмнага праграмавання.

У працоўнай групе, якая знаходзіцца падчас стварэнняў, распрацоўнікі Rust сумесна з інжынерамі з кампаніі Intel падрыхтуюць спецыфікацыі з вызначэннем функцыянальнасці, якую неабходна рэалізаваць у Rust для сістэмнага праграмавання. Сістэмнае праграмаванне часта патрабуе нізкаўзроўневых маніпуляцый, такіх як выкананне прывілеяваных працэсарных інструкцый і атрыманне дэталёвых звестак аб стане працэсара. З ужо якія развіваюцца для Rust падобных магчымасцяў адзначаецца падтрымка неназваных структур, аб'яднанняў (union), асэмблерных уставак (макрос "asm!") і фармату лікаў з якая плавае коскі BFLOAT16.

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

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

Грег Кроа-Хартман (Greg Kroah-Hartman), які адказвае за падтрымку стабільнай галіны ядра Linux, выказаў гатоўнасць дадаць у ядро ​​фрэймворк для распрацоўкі драйвераў на мове Rust, калі ён будзе валодаць рэальнымі перавагамі ў параўнанні з Сі, напрыклад, будзе падаваць бяспечныя абвязкі над API ядра. Акрамя таго, Грег разглядае дадзены фрэймворк толькі як опцыю, не актыўную па змаўчанні, каб не ўключаць Rust у лік зборачных залежнасцяў да ядра.

Аказалася, што некалькі каманд ужо працуюць у гэтым напрамку. Напрыклад, распрацоўшчыкі з кампаніі "Fish in a Barrel" падрыхтавалі інструментар для напісання загружаных модуляў для ядра Linux на мове Rust, выкарыстаючы для падвышэння абароны набор абстрактных праслоек над інтэрфейсамі і структурамі ядра. Праслойкі аўтаматычна генеруюцца на базе наяўных загалоўкавых файлаў ядра пры дапамозе ўтыліты bindgen. Для зборкі праслоек выкарыстоўваецца Clang. Збіраныя модулі апроч праслоек выкарыстоўваюць пакет staticlib.

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

Не ўся задуманая функцыянальнасць пакуль рэалізаваная, але фрэймворк ужо суцэль прыдатны для працы і скарыстаны для напісання працоўнага драйвера для Ethernet-кантролера LAN9512 USB, які пастаўляецца ў плаце Raspberry Pi 3. У якасці эталоннай рэалізацыі пры напісанні Rust-драйвера быў скарыстаны існуючы драйвер smsc95x на мове Сі. Адзначаецца, што памер модуля і накладныя выдаткі ад runtime-кампанентаў пры распрацоўцы драйвера на Rust малаважныя, што дазваляе ўжываць фрэймворк для прылад з абмежаванымі рэсурсамі.

Крыніца: opennet.ru

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