Miguel Ojeda, autorul proiectului Rust-for-Linux, a propus pentru examinare de către dezvoltatorii nucleului Linux a patra variantă a componentelor pentru dezvoltarea driverelor de dispozitive în limbajul Rust. Suportul pentru Rust este considerat experimental, dar a fost deja aprobat pentru includerea în ramura linux-next și este suficient de dezvoltat pentru a începe lucrările la crearea straturilor de abstracție pentru subsistemele nucleului, precum și pentru scrierea driverelor și modulelor. Dezvoltarea este finanțată de Google și organizația ISRG (Internet Security Research Group), care este fondatorul proiectului Let’s Encrypt și contribuie la promovarea HTTPS și dezvoltarea tehnologiilor pentru creșterea securității internetului.
Reamintim că schimbările propuse permit utilizarea Rust ca a doua limbă pentru dezvoltarea driverelor și modulelor nucleului. Suportul pentru Rust este prezentat ca o opțiune, care nu este activată în mod implicit și nu duce la includerea Rust între dependențele obligatorii pentru compilarea nucleului. Utilizarea Rust pentru dezvoltarea driverelor va permite, cu eforturi minime, crearea de drivere sigure și de calitate superioară, lipsite de probleme precum accesarea memoriei după eliberare, dereferențierea pointerilor nuli și depășirea limitelor buffer-ului.
Funcționarea sigură a memoriei este asigurată în Rust în timpul compilării prin verificarea referințelor, urmărirea deținerii obiectelor și gestionarea duratei de viață a obiectelor (zona de vizibilitate), precum și prin evaluarea corectitudinii accesului la memorie în timpul execuției codului. Rust oferă, de asemenea, instrumente pentru protecția împotriva depășirilor de numere întregi, necesită inițializarea obligatorie a valorilor variabilelor înainte de utilizare, gestionează mai bine erorile în biblioteca standard, aplică conceptul de referințe și variabile imutabile (immutable) în mod implicit și oferă o tipizare statică puternică pentru a minimiza erorile logice.
În noua variantă a patch-urilor continuă eliminarea observațiilor făcute în procesul de discuție a primelor, celei de-a doua și celei de-a treia ediții a patch-urilor. În noua versiune:
- S-a realizat trecerea la utilizarea ca compilator de referință a versiunii stabile Rust 1.58.0. Printre modificările necesare pentru proiect, care nu sunt încă incluse în instrumentele principale Rust, se remarcă flag-ul „-Zsymbol-mangling-version=v0” (așteptat în Rust 1.59.0) și modul „maybe_uninit_extra” (așteptat în Rust 1.60.0).
- Au fost adăugate verificări automate pentru a verifica existența instrumentelor adecvate Rust și au fost extinse capacitățile de testare a suportului Rust în sistem.
- Au fost propuse noi abstracții pentru accesul din codul scris în limbajul Rust la tabelele de identificare a dispozitivelor („IdArray” și „IdTable”).
- Au fost adăugate straturi pentru accesarea funcțiilor legate de cronometru (framework-ul ceasului).
- Driverele pentru platforme sunt acum definite prin implementarea trăsăturilor.
- A fost adăugat un nou macro pentru simplificarea înregistrării driverelor de platformă, iar un nou șablon de driver tip a fost propus.
- Au fost adăugate macro-uri pentru structurile „dev_*”.
- Au fost adăugate metodele „{read,write}*_relaxed” pentru tipul IoMem.
- Proprietatea FileOpener a fost eliminată pentru simplificarea operațiunilor cu fișiere.
- În numărul argumentelor transmise la înregistrarea driverului a fost adăugat parametrul „ThisModule”.
- A fost propus un șablon tipic pentru crearea modulelor nucleului în limbajul Rust.
Sursa: opennet.ro
