Miguel Ojeda, autor projekta Rust-for-Linux, predložio je petu verziju komponenti za razvoj upravljačkih programa uređaja u jeziku Rust na razmatranje programerima Linux kernela. Podrška za Rust smatra se eksperimentalnom, ali je već uključena u granu linux-next i dovoljno je razvijena za početak rada na stvaranju slojeva apstrakcije preko podsustava jezgre, kao i pisanja upravljačkih programa i modula. Razvoj financiraju Google i ISRG (Internet Security Research Group), koji je osnivač projekta Let’s Encrypt te promiče HTTPS i razvoj tehnologija za poboljšanje sigurnosti na internetu.
Podsjetimo se da predložene promjene omogućuju korištenje Rusta kao drugog jezika za razvoj upravljačkih programa i modula kernela. Podrška za Rust predstavljena je kao opcija koja nije omogućena prema zadanim postavkama i ne rezultira uključivanjem Rusta kao obavezne ovisnosti o izgradnji za kernel. Korištenje Rusta za razvoj upravljačkih programa omogućit će vam stvaranje sigurnijih i boljih upravljačkih programa uz minimalan napor, bez problema poput pristupa memoriji nakon oslobađanja, dereferenciranja nultog pokazivača i prekoračenja međuspremnika.
Rukovanje sigurnim za memoriju omogućeno je u Rustu tijekom kompajliranja provjerom referenci, praćenjem vlasništva objekta i životnog vijeka objekta (opseg), kao i procjenom ispravnosti pristupa memoriji tijekom izvođenja koda. Rust također pruža zaštitu od prekoračenja cjelobrojnih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje pogreške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli prema zadanim postavkama, nudi snažno statično tipkanje za smanjenje logičkih pogrešaka.
Nova verzija zakrpa nastavlja eliminirati komentare dane tijekom rasprave o prvom, drugom, trećem i četvrtom izdanju zakrpa. U novoj verziji:
- Testiranje komponenti za podršku za Rust dodano je sustavu kontinuirane integracije koji se temelji na botu 0DAY/LKP koji podržava Intel i počelo je objavljivanje izvješća o testiranju. Pripremamo se za integraciju podrške za Rust u automatizirani sustav testiranja KernelCI. Testiranje temeljeno na GitHub CI prebačeno je na korištenje spremnika.
- Moduli Rust kernela oslobođeni su potrebe za definiranjem atributa sanduka “#![no_std]” i “#![feature(…)]”.
- Dodana podrška za pojedinačne montažne ciljeve (.o, .s, .ll i .i).
- Smjernice koda definiraju pravila za odvajanje komentara (“//”) i koda dokumentiranja (“///”).
- Skripta is_rust_module.sh je prerađena.
- Dodana podrška za statičke (globalne zajedničke varijable) primitive sinkronizacije temeljene na implementaciji "CONFIG_CONSTRUCTORS".
- Upravljanje bravom je pojednostavljeno: Guard i GuardMut su kombinirani i imaju jednu parametriranu vrstu.
- Moguće je definirati dodatne parametre prilikom registracije uređaja.
- Dodana je apstrakcija "RwSemaphore", koja djeluje kao omot preko C strukture rw_semaphore.
- Za korištenje mmap-a dodan je novi mm modul i VMA apstrakcija (omot preko strukture vm_area_struct).
- Upravljački program GPIO PL061 prebačen je na korištenje makronaredbe “dev_*!”.
- Provedeno je generalno čišćenje koda.
Izvor: opennet.ru