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

Miguel Ojeda, autorul proiectului Rust-for-Linux, a propus o versiune actualizată a componentelor 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. Noua versiune elimină comentariile făcute în timpul discuției despre prima versiune a patch-urilor. Linus Torvalds s-a alăturat deja discuției și a propus schimbarea logicii procesării unor operații pe biți.

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.

Cele mai vizibile modificări în noua versiune a patch-urilor:

  • Codul de alocare a memoriei este eliberat de generarea potențială a unei stări de „panică” atunci când apar erori precum lipsa memoriei. Este inclusă o variantă a bibliotecii Rust alloc, care reprocesează codul pentru a gestiona eșecurile, dar scopul final este transferul tuturor caracteristicilor necesare nucleului în ediția principală a alloc (modificările au fost deja pregătite și transferate la standard). Biblioteca Rust).
  • În loc de versiuni nocturne, acum puteți folosi versiuni beta și versiuni stabile ale compilatorului rustc pentru a compila un nucleu cu suport Rust. În prezent, rustc 1.54-beta1 este folosit ca compilator de referință, dar după lansarea versiunii 1.54 la sfârșitul lunii, va fi acceptat ca compilator de referință.
  • S-a adăugat suport pentru scrierea testelor folosind atributul standard „#[test]” pentru Rust și capacitatea de a folosi doctests pentru a documenta teste.
  • S-a adăugat suport pentru arhitecturile ARM32 și RISCV, pe lângă x86_64 și ARM64 acceptate anterior.
  • Implementări îmbunătățite ale GCC Rust (GCC frontend pentru Rust) și rustc_codegen_gcc (rustc backend pentru GCC), care trece acum toate testele de bază.
  • Un nou nivel de abstractizare este propus pentru utilizare în programele Rust a mecanismelor nucleului scrise în C, cum ar fi arbori roșu-negru, obiecte numărate în funcție de referință, crearea de descriptori de fișiere, sarcini, fișiere și vectori I/O.
  • Componentele de dezvoltare a driverelor au suport îmbunătățit pentru modulul file_operations, macromodulul module!, înregistrarea macro și driverele rudimentare (sondare și eliminare).
  • Binder acceptă acum trecerea de descriptori de fișiere și cârlige LSM.
  • Este propus un exemplu mai funcțional de driver Rust - bcm2835-rng pentru generatorul hardware de numere aleatorii al plăcilor Raspberry Pi.

În plus, sunt menționate proiectele unor companii legate de utilizarea Rust în nucleu:

  • Microsoft și-a exprimat interesul de a participa la lucrările de integrare a suportului Rust în kernel-ul Linux și este gata să furnizeze implementări de drivere pentru Hyper-V pe Rust în lunile următoare.
  • ARM lucrează pentru a îmbunătăți suportul Rust pentru sistemele bazate pe ARM. Proiectul Rust a propus deja modificări care ar face din sistemele ARM pe 64 de biți o platformă de nivel 1.
  • Google oferă în mod direct suport pentru proiectul Rust pentru Linux, dezvoltă o nouă implementare a mecanismului de comunicare interprocese Binder în Rust și ia în considerare posibilitatea de a reelabora diverse drivere în Rust. Prin ISRG (Internet Security Research Group), Google a oferit finanțare pentru munca de integrare a suportului Rust în kernel-ul Linux.
  • IBM a implementat suport pentru kernel pentru Rust pentru sistemele PowerPC.
  • Laboratorul LSE (Systems Research Laboratory) a dezvoltat un driver SPI în Rust.

Sursa: opennet.ru

Adauga un comentariu