Kolmas plaastrite väljaanne Linuxi kernelile, mis toetab Rust keelt

Projekti Rust-for-Linux autor Miguel Ojeda on pakkunud välja kolmanda komponendi valiku seadmedraiverite arendamiseks Rust keeles, et Linuxi kerneli arendajad saaksid seda kaaluda. Roostetoetust peetakse eksperimentaalseks, kuid selle lisamine linux-next harusse on juba kokku lepitud. Arendust rahastavad Google ja ISRG (Internet Security Research Group), mis on Let's Encrypt projekti asutaja ning propageerib HTTPS-i ja tehnoloogiate arendamist interneti turvalisuse parandamiseks.

Tuletame meelde, et kavandatud muudatused võimaldavad kasutada Rusti draiverite ja tuumamoodulite arendamiseks teise keelena. Rooste tugi esitatakse valikuna, mis ei ole vaikimisi lubatud ja mille tulemuseks ei ole rooste kaasamine kerneli kohustusliku ehitussõltuvusse. Rooste kasutamine draiverite arendamiseks võimaldab teil luua turvalisemaid ja paremaid draivereid minimaalse pingutusega, ilma probleemideta, nagu juurdepääs mälule pärast vabastamist, nullkursori viited ja puhvri ülekoormus.

Mälu turvalisus on Rustis kompileerimise ajal tagatud viidete kontrollimise, objekti omandiõiguse ja objekti eluea (ulatuse) jälgimise, samuti koodi täitmise ajal mälu juurdepääsu õigsuse hindamise kaudu. Rooste pakub ka kaitset täisarvude ületäitumise eest, nõuab muutujate väärtuste kohustuslikku lähtestamist enne kasutamist, käsitleb standardteegi vigu paremini, rakendab vaikimisi muutumatute viidete ja muutujate kontseptsiooni, pakub tugevat staatilist tippimist loogiliste vigade minimeerimiseks.

Plaastrite uus versioon jätkab plaastrite esimese ja teise versiooni arutelu käigus tehtud kommentaaride kõrvaldamist. Kõige märgatavamad muutused:

  • On tehtud üleminek Rust 1.57 stabiilse väljaande kasutamisele viitekompilaatorina ja lisatud on link Rust 2021 keele stabiliseeritud väljaandele. Varem olid paigad seotud Rusti beetaharuga ja kasutasid mõningaid keelefunktsioone, mis klassifitseeriti ebastabiilseks. Üleminek Rust 2021 spetsifikatsioonile võimaldas meil alustada tööd, et vältida selliste ebastabiilsete funktsioonide kasutamist paikades nagu const_fn_transmute, const_panic, const_unavailable_unchecked ja core_panic ja try_reserve.
  • Plaastrites sisalduva Rusti teegi jaotusversiooni arendus on jätkunud, mida on muudetud, et vabastada mälu jaotamise funktsioonid võimalikust paanikaseisundist, kui ilmnevad vead, näiteks mälu on otsas. Uus versioon rakendab suvandeid "no_rc" ja "no_sync", et keelata funktsioonid, mida kerneli Rust-koodis ei kasutata, muutes raamatukogu modulaarsemaks. Jätkub töö peamiste alloc-arendajatega, mille eesmärk on kerneli jaoks vajalike muudatuste ülekandmine põhiteeki. Suvand “no_fp_fmt_parse”, mis on vajalik teegi töötamiseks tuuma tasemel, on viidud Rusti baasteeki (tuum).
  • Kood on puhastatud, et vabaneda võimalikest kompilaatori hoiatustest kerneli loomisel režiimis CONFIG_WERROR. Rustis koodi ehitamisel on lubatud täiendavad kompilaatori diagnostikarežiimid ja Clippy linteri hoiatused.
  • Abstraktsioone soovitatakse kasutada Rust-koodis seqlockide (järjestuslukud), toitehalduse tagasihelistamiskõnede, I/O-mälu (readX/writeX), katkestuste ja lõimekäitlejate, GPIO, juurdepääsu seadmetele, draiveritele ja mandaatidele.
  • Draiverite arendamise tööriistu on laiendatud, et hõlmata ümberpaigutatavaid mutexe, bitiiteraatoreid, lihtsustatud osuti sidumist, täiustatud tõrkediagnostikat ja andmesiinist sõltumatut infrastruktuuri.
  • Täiustatud töö linkidega, kasutades lihtsustatud Ref-tüüpi, mis põhineb refcount_t taustaprogrammil, mis kasutab viidete loendamiseks samanimelist kerneli API-t. Tavalises alloc teegis pakutavate Arc- ja Rc-tüüpide tugi on eemaldatud ja see pole saadaval kerneli tasemel käivitatavas koodis (teegi enda jaoks on ette valmistatud valikud, mis need tüübid keelavad).
  • Plaastrid sisaldavad PL061 GPIO draiveri versiooni, mis on Rusti keeles ümber kirjutatud. Draiveri eripäraks on see, et selle rakendamine peaaegu rida-realt kordab olemasolevat GPIO draiverit C-keeles. Arendajatele, kes soovivad tutvuda draiverite loomisega Rustis, on koostatud rida-realt võrdlus, mis võimaldab aru saada, millisteks konstruktsioonideks Rustis C-kood teisendatakse.
  • Peamine Rusti koodibaas on võtnud kasutusele rustc_codegen_gcc, GCC rustc-taustaprogrammi, mis rakendab libgccjiti teeki kasutades enneaegset (AOT) kompileerimist. Taustaprogrammi nõuetekohase arendamise korral võimaldab see koguda GCC abil kernelisse kaasatud Rust-koodi.
  • Lisaks ARM-ile, Google'ile ja Microsoftile on Red Hat avaldanud huvi Rust keele kasutamise vastu Linuxi tuumas. Meenutagem, et Google pakub otse tuge projektile Rust for Linux, arendab Rustis Binderi protsessidevahelise suhtlusmehhanismi uut teostust ning kaalub võimalust Rustis erinevaid draivereid ümber töötada. Microsoft on alustanud Rusti Hyper-V draiverite juurutamist. ARM töötab selle nimel, et parandada ARM-põhiste süsteemide Rusti tuge. IBM on PowerPC süsteemide tuumas juurutanud Rusti toe.

Allikas: opennet.ru

Lisa kommentaar