A patra ediție de patch-uri pentru nucleul Linux cu suport pentru limbajul Rust

Miguel Ojeda, autorul proiectului Rust-for-Linux, a propus o a patra versiune de componente pentru dezvoltarea driverelor de dispozitiv în limbajul Rust pentru a fi luată în considerare de către dezvoltatorii de kernel Linux. Suportul Rust este considerat experimental, dar a fost deja convenit pentru includerea în ramura linux-next și este suficient de matur pentru a începe lucrul la crearea de straturi de abstractizare peste subsistemele kernelului, precum și la scrierea de drivere și module. Dezvoltarea este finanțată de Google și de ISRG (Internet Security Research Group), care este fondatorul proiectului Let's Encrypt și promovează HTTPS și dezvoltarea tehnologiilor pentru îmbunătățirea securității pe Internet.

Amintiți-vă că modificările propuse fac posibilă utilizarea Rust ca a doua limbă pentru dezvoltarea driverelor și modulelor kernelului. Suportul Rust este prezentat ca o opțiune care nu este activată implicit și nu are ca rezultat includerea Rust ca dependență de construcție necesară pentru nucleu. Folosirea Rust pentru dezvoltarea driverelor vă va permite să creați drivere mai sigure și mai bune cu un efort minim, fără probleme precum accesul la memorie după eliberare, dereferențele pointerului nul și depășirile de buffer.

Siguranța memoriei este asigurată în Rust în timpul compilării prin verificarea referințelor, urmărirea proprietății obiectului și a duratei de viață a obiectului (sfera de aplicare), precum și prin evaluarea corectitudinii accesului la memorie în timpul execuției codului. Rust oferă, de asemenea, protecție împotriva depășirilor de numere întregi, necesită inițializarea obligatorie a valorilor variabilelor înainte de utilizare, gestionează mai bine erorile în biblioteca standard, aplică implicit conceptul de referințe imuabile și variabile, oferă tastare statică puternică pentru a minimiza erorile logice.

Noua versiune a patch-urilor continuă să elimine comentariile făcute în timpul discuției despre prima, a doua și a treia ediție a patch-urilor. În noua versiune:

  • A fost făcută trecerea la utilizarea versiunii stabile a Rust 1.58.0 ca compilator de referință. Printre modificările necesare pentru proiect, care nu sunt încă incluse în setul principal de instrumente Rust, se numără steag-ul „-Zsymbol-mangling-version=v0” (așteptată în Rust 1.59.0) și modul „maybe_uninit_extra” (așteptată în Rust 1.60.0). .XNUMX) se notează.
  • S-au adăugat verificări automate pentru disponibilitatea instrumentelor Rust adecvate și s-a extins capacitatea de a testa suportul Rust în sistem.
  • Au fost propuse noi abstracții pentru accesarea tabelelor de identificare a dispozitivului („IdArray” și „IdTable”) din codul Rust.
  • Straturi adăugate pentru accesarea funcțiilor legate de cronometru (cadru de ceas).
  • Driverele platformei sunt acum definiți prin implementări de trăsături.
  • A fost adăugată o nouă macrocomandă pentru a simplifica înregistrarea driverelor de platformă și a fost propus un nou șablon de driver generic.
  • S-au adăugat macrocomenzi pentru structurile „dev_*”.
  • S-au adăugat metode „{read,write}*_relaxed” pentru tipul IoMem .
  • S-a eliminat proprietatea FileOpener pentru a simplifica operațiunile cu fișierele.
  • Parametrul „ThisModule” a fost adăugat la argumentele transmise la înregistrarea unui driver.
  • Este propus un șablon standard pentru crearea modulelor kernel în limbajul Rust.

Sursa: opennet.ru

Adauga un comentariu