Miguel Ojeda, autorul proiectului Rust-for-Linux, a propus spre examinare de către dezvoltatorii kernel-ului Linux o variantă actualizată a componentelor pentru dezvoltarea driver-elor de dispozitive în limbajul Rust. Suportul pentru Rust este considerat experimental, dar a fost deja convenit pentru a fi inclus în ramura linux-next. În noua variantă au fost eliminate observațiile făcute în timpul discuțiilor despre prima versiune a patch-urilor. Linus Torvalds s-a alăturat deja discuțiilor și a propus modificarea logicii de procesare a unor operațiuni pe biți.
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.
Cele mai notabile schimbări în noua versiune a patch-urilor:
- Codul pentru distribuția memoriei a fost eliberat de posibilele generații de stare «panic» în cazul erorilor, cum ar fi lipsa de memorie. A fost inclusă o variantă a bibliotecii Rust alloc, în care a fost refăcut codul pentru gestionarea eșecurilor, dar scopul final este transferul în ediția de bază a alloc a tuturor funcționalităților necesare pentru kernel (schimbările au fost deja pregătite și trimise în cadrul bibliotecii standard Rust).
- În loc de compilările nocturne pentru compilarea kernel-ului cu suport pentru Rust, acum se pot folosi versiunile beta și versiunile stabile ale compilatorului rustc. În prezent, ca și compilator de referință este utilizat rustc 1.54-beta1, dar după lansarea versiunii 1.54 la sfârșitul lunii, acesta va fi suportat ca referință.
- A fost adăugată suportul pentru scrierea testelor folosind atributul standard pentru Rust «#[test]» și posibilitatea de a aplica doctests pentru documentarea testelor.
- A fost adăugată suportul pentru arhitecturile ARM32 și RISCV, pe lângă cele deja suportate x86_64 și ARM64.
- Au fost îmbunătățite implementările GCC Rust (frontend-ul GCC pentru Rust) și rustc_codegen_gcc (backend-ul rustc pentru GCC), care acum trece toate testele de bază.
- A fost propus un nou nivel de abstracție pentru utilizarea în programele scrise în limbajul Rust a mecanismelor kernel-ului, scrise în limbajul C, cum ar fi arbori roșu-negru, obiecte cu numărarea referințelor, crearea descriptorilor de fișiere, sarcini, fișiere și vectori de intrare/ieșire.
- În componentele pentru dezvoltarea driver-elor a fost îmbunătățit suportul pentru modulul «file_operations», macro-ul «module!», înregistrarea macro-urilor și driver-ele rudimentare (probe și remove).
- În Binder a fost implementat suportul pentru transmiterea descriptorilor de fișiere și a hook-urilor LSM.
- Un exemplu mai funcțional de driver în Rust — bcm2835-rng pentru generatorul hardware de numere aleatorii al plăcilor Raspberry Pi.
De asemenea, sunt menționate proiectele unor companii legate de utilizarea Rust în nucleu:
- Compania Microsoft și-a exprimat interesul de a participa la integrarea suportului Rust în nucleul Linux și este pregătită să ofere în următoarele luni implementări de drivere pentru Hyper-V în Rust.
- Compania ARM lucrează la îmbunătățirea suportului pentru Rust pe sistemele bazate pe procesoare ARM. Proiectului Rust i-au fost deja propuse modificări care să transforme sistemele ARM pe 64 de biți în platforme de prim nivel de suport (Tier-1).
- Compania Google oferă în mod direct suport pentru proiectul Rust for Linux, dezvoltând o nouă implementare a mecanismului de comunicare între procese Binder în Rust și ia în considerare reproiectarea diverselor drivere în Rust. Prin ISRG (Internet Security Research Group), Google a asigurat finanțare pentru integrarea suportului Rust în nucleul Linux.
- Compania IBM a implementat suport pentru Rust în nucleu pentru sistemele PowerPC.
- Laboratorul LSE (Laboratorul de Cercetare a Sistemelor) a dezvoltat un driver SPI în Rust.
Sursa: opennet.ro
