Miguel Ojeda, autor projekta Rust-for-Linux, predložio je razmatranje petog skupa komponenti za razvoj drajvera uređaja na jeziku Rust od strane developera Linux jezgra. Podrška za Rust se razmatra kao eksperimentalna, ali je već uključena u granu linux-next i dovoljno je razvijena da bi se moglo započeti rad na stvaranju slojeva apstrakcije nad podsistemima jezgra, kao i za pisanje drajvera i modula. Razvoj se finansira od strane kompanije Google i organizacije ISRG (Internet Security Research Group), koja je osnivač projekta Let’s Encrypt i doprinosi unapređenju HTTPS-a i razvoju tehnologija za povećanje sigurnosti interneta.
Podsjećamo da predložene promjene omogućuju korištenje Rusta kao drugog jezika za razvoj drajvera i modula jezgra. Podrška za Rust se nudi kao opcija, koja nije aktivna prema zadanim postavkama i ne dovodi do uključivanja Rusta kao obvezne gradbene zavisnosti za jezgro. Korištenje Rusta za razvoj drajvera omogućit će stvaranje sigurnijih i kvalitetnijih drajvera s minimalnim naporom, bez problema poput pristupa memorijskom prostoru nakon oslobađanja, dereferenciranja nultih pokazivača i izlaska iz granica bafera.
Siguran rad s memorijom osigurava se u Rust-u tijekom kompajlacije putem provjere referenci, praćenja vlasništva nad objektima i uzimanja u obzir vremena života objekata (opseg vidljivosti), kao i procjenom ispravnosti pristupa memoriji tijekom izvođenja koda. Rust također pruža alate za zaštitu od prelivanja cijelih brojeva, zahtijeva obveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivosti (immutable) referenci i varijabli prema zadanim postavkama te nudi snažnu statičku tipizaciju za minimiziranje logičkih grešaka.
U novoj verziji zakrpa nastavlja se rešavanje komentara koji su izneseni tokom rasprave o prvoj, drugoj, trećoj i četvrtoj verziji zakrpa. U novoj verziji:
- U sistem kontinuirane integracije baziranom na botu 0DAY/LKP, koji podržava Intel, dodana je provera komponenti za podršku Rust-u i započelo je objavljivanje izveštaja o testiranju. Priprema se integracija podrške za Rust u sistem automatskog testiranja KernelCI. Testiranje bazirano na GitHub CI prebačeno je na korišćenje kontejnera.
- Moduli jezgra na Rust-u oslobođeni su potrebe za definisanjem crate atributa "#![no_std]" i "#![feature(…)]".
- Dodana je podrška za ciljeve jedinstvene gradnje (.o, .s, .ll i .i).
- U preporukama za formatiranje koda definisana su pravila u vezi sa odvojenim komentarima ("//") i dokumentovanjem koda ("///").
- Revidiran je skript is_rust_module.sh.
- Dodana je podrška za statičke (globalne deljene promenljive) primitive sinhronizacije zasnovane na implementaciji "CONFIG_CONSTRUCTORS".
- P pojednostavljeno je upravljanje zaključavanjima: Guard i GuardMut su spojeni u jedan parametrizovani tip.
- Omogućeno je definisanje dodatnih parametara prilikom registracije uređaja.
- Dodana je apstrakcija "RwSemaphore", koja služi kao obavijač nad C-strukturom rw_semaphore.
- Za korišćenje mmap-a dodat je novi modul mm i apstrakcija VMA (obavijač nad strukturom vm_area_struct).
- Drajver GPIO PL061 prebačen je na korišćenje makroa "dev_*!".
- Obavljena je generalna čišćenje koda.
Izvor: opennet.ru
