Ietvars drošu draiveru rakstīšanai Linux kodolam programmā Rust

Džošs Triplets, kurš strādā Intel un ir komitejas locekļi, kas pārrauga Crates.io izstrādi, uzstājas atvērtā pirmkoda tehnoloģiju samitā. ieviesa darba grupa, kuras mērķis bija Rust valodas līdzsvarošana ar C valodu sistēmu programmēšanas jomā.

Darba grupā, kas tiek veidota, Rust izstrādātāji kopā ar Intel inženieriem sagatavos specifikācijas, kas definēs funkcionalitāti, kas Rust ir jāievieš sistēmu programmēšanai. Sistēmas programmēšanai bieži ir nepieciešamas zema līmeņa manipulācijas, piemēram, priviliģētu procesora instrukciju izpilde un detalizētas informācijas iegūšana par procesora stāvokli. No līdzīgām funkcijām, kas jau tiek izstrādātas Rust, tiek atzīmēts atbalsts nenosauktām struktūrām, savienībām, montāžas valodas ieliktņiem (“asm!” makro) un peldošā komata skaitļu formātam BFLOAT16.

Džošs uzskata, ka sistēmas programmēšanas nākotne pieder Rustam, un C valoda mūsdienu realitātē pretendē uz vietu, kuru iepriekšējos gados ieņēma Assembly. Rūsa
ne tikai atbrīvo izstrādātājus no C valodai raksturīgajām problēmām, kas rodas zema līmeņa darbā ar atmiņu, bet arī sniedz iespēju to izmantot mūsdienu programmēšanas paradigmu izstrādē.

Laikā diskusijas izrādes
Džošs nāca klajā ar ideju pievienot iespēju izstrādāt draiverus Linux kodolā Rust valodā, kas ļautu izveidot drošākus un labākus draiverus ar minimālu piepūli, bez problēmām, piemēram, piekļuvi atmiņai pēc atbrīvošanas, nulles rādītāja novirzes un bufera pārtēriņi.

Gregs Kroahs-Hartmans, kurš ir atbildīgs par Linux kodola stabilās filiāles uzturēšanu, izteica gatavību pievienot kodolam ietvaru draiveru izstrādei Rust valodā, ja tam ir reālas priekšrocības salīdzinājumā ar C, piemēram, tas nodrošinās drošu. saistījumi, izmantojot Kernel API. Turklāt Gregs šo ietvaru uzskata tikai par opciju, kas pēc noklusējuma nav aktīvs, lai neiekļautu Rust kā uzbūves atkarību no kodola.

Izrādījās, ka šajā virzienā jau strādā vairākas komandas. Piemēram, izstrādātāji no uzņēmuma “Fish in a Barrel” sagatavots rīku komplekts ielādējamu moduļu rakstīšanai Linux kodolam Rust valodā, izmantojot abstraktu slāņu kopu virs saskarnēm un kodola struktūrām, lai palielinātu drošību. Slāņi tiek automātiski ģenerēti, pamatojoties uz esošajiem kodola galvenes failiem, izmantojot utilītu bindgen. Clang tiek izmantots slāņu veidošanai. Papildus starpslāņiem saliktajos moduļos tiek izmantota staticlib pakotne.

Paralēli attīstās Cits projekts bija vērsts uz draiveru izstrādi iegultajām sistēmām un IoT ierīcēm, kas arī izmanto bindgen, lai ģenerētu slāņus, pamatojoties uz kodola galvenes failiem. Ietvars ļauj uzlabot draiveru drošību, neveicot izmaiņas kodolā - tā vietā, lai radītu papildu izolācijas līmeņus draiveriem kodolā, tiek piedāvāts bloķēt problēmas kompilācijas stadijā, izmantojot drošāko Rust valodu. Tiek pieņemts, ka šādu pieeju varētu pieprasīt iekārtu ražotāji, kuri steigā izstrādā patentētus draiverus, neveicot atbilstošu auditu.

Vēl nav ieviesta visa paredzētā funkcionalitāte, taču ietvars jau ir diezgan piemērots darbam un tika izmantots, lai uzrakstītu darba draiveri Raspberry Pi 9512 plates komplektācijā iekļautajam USB Ethernet kontrollerim LAN3. Esošais smsc95xx draiveris, ko rakstījis in C valoda. Tiek atzīmēts, ka moduļa izmērs un izpildlaika komponentu pieskaitāmās izmaksas, izstrādājot draiveri Rust, ir nenozīmīgas, kas ļauj ietvaru izmantot ierīcēm ar ierobežotiem resursiem.

Avots: opennet.ru

Pievieno komentāru