Miguel Ojeda, autor projekta Rust-for-Linux, predloženo za razmatranje od strane programera kernela Linux Četvrta verzija komponenti za razvoj drajvera uređaja u Rustu. Podrška za Rust se smatra eksperimentalnom, ali je već odobrena za uključivanje u granu linux-next i dovoljno je zrela za početak rada na kreiranju slojeva apstrakcije preko podsistema kernela, kao i na pisanju drajvera i modula. Razvoj finansiraju Google i ISRG (Internet Security Research Group), osnivač projekta Let's Encrypt, koji promoviše HTTPS i razvoj tehnologija za poboljšanje sigurnosti na internetu.
Podsjetimo da predložene izmjene omogućavaju korištenje Rusta kao drugog jezika za razvoj drajvera i modula kernela. Podrška za Rust je predstavljena kao opcija koja nije omogućena prema zadanim postavkama i ne dovodi do uključivanja Rusta među potrebne ovisnosti o izgradnji za kernel. Korišćenje Rusta za razvoj drajvera omogućiće vam da kreirate sigurnije i bolje drajvere uz minimalan napor, bez problema kao što je pristup memorijskom području nakon što se oslobodi, dereferenciranje nul pokazivača i prekoračenje bafera.
Sigurnost memorije je obezbeđena u Rustu u vreme kompajliranja kroz proveru referenci, praćenje vlasništva nad objektom i životnog veka objekta (opsega), kao i kroz procenu ispravnosti pristupa memoriji tokom izvršavanja koda. Rust također pruža zaštitu od prekoračenja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli po defaultu, nudi snažno statičko kucanje kako bi se minimizirale logičke greške.
Nova verzija zakrpa nastavlja eliminirati komentare date tokom rasprave o prvom, drugom i trećem izdanju zakrpa. U novoj verziji:
- Prelazak na korištenje stabilnog izdanja Rust 1.58.0 kao referentnog kompajlera je napravljen. Među promjenama neophodnim za projekat, koje još nisu uključene u glavni Rust alat, zastavica “-Zsymbol-mangling-version=v0” (očekuje se u Rust 1.59.0) i mod “maybe_uninit_extra” (očekuje se u Rust 1.60.0 .XNUMX).
- Dodane su automatske provjere dostupnosti odgovarajućih Rust alata i proširena mogućnost testiranja podrške za Rust u sistemu.
- Predložene su nove apstrakcije za pristup tabelama identifikatora uređaja (“IdArray” i “IdTable”) iz Rust koda.
- Dodati slojevi za pristup funkcijama vezanim za tajmer (okvir sata).
- Pokretači platforme su sada definisani kroz implementacije osobina.
- Dodan je novi makro kako bi se pojednostavila registracija drajvera platforme, a predložen je i novi generički predložak drajvera.
- Dodati makroi za "dev_*" strukture.
- Dodane metode "{read,write}*_relaxed" za tip IoMem .
- Uklonjeno svojstvo FileOpener kako bi se pojednostavile operacije s datotekama.
- Parametar “ThisModule” je dodat argumentima proslijeđenim prilikom registracije drajvera.
- Predložen je standardni šablon za kreiranje modula kernela na jeziku Rust.
izvor: opennet.ru
