A treia ediție a patch-urilor pentru kernelul Linux cu suport pentru limbajul Rust.

Miguel Ojeda, autorul proiectului Rust-for-Linux, a propus pentru considerație dezvoltatorilor core-ului Linux o a treia variantă de componente 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. Dezvoltarea este finanțată de compania Google și organizația ISRG (Internet Security Research Group), care este fondatoarea proiectului Let’s Encrypt și contribuie la promovarea HTTPS și dezvoltarea tehnologiilor pentru îmbunătățirea 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 au fost continuate remedierea observațiilor exprimate în procesul de discuție a primelor și celor de-a doua versiuni ale patch-urilor. Cele mai notabile modificări sunt:

  • A fost realizat trecerea la utilizarea ca compilator de referință a versiunii stabile Rust 1.57 și a fost asigurată legătura cu ediția stabilizată a limbajului Rust 2021. Anterior, patch-urile erau legate de ramura beta Rust și foloseau anumite funcționalități ale limbajului care intrau în categoria instabilă. Trecerea la specificația Rust 2021 a permis inițierea lucrărilor pentru a abandona utilizarea în patch-uri a unor funcționalități instabile, cum ar fi const_fn_transmute, const_panic, const_unreachable_unchecked și core_panic și try_reserve.
  • Dezvoltarea variantei de bibliotecă Rust alloc, inclusă în patch-uri, a fost continuată, modificată pentru a elimina generarea posibilelor stări „panic” la distribuirea memoriei în caz de erori, cum ar fi lipsa de memorie. Noua versiune implementează opțiunile „no_rc” și „no_sync” pentru a dezactiva funcționalitățile neutilizate în codul Rust pentru kernel, făcând biblioteca mai modulară. Lucrările cu principalii dezvoltatori ai alloc continuă, având ca obiectiv transferul modificărilor necesare pentru kernel în baza bibliotecii. Opțiunea „no_fp_fmt_parse”, necesară pentru funcționarea bibliotecii la nivel de kernel, a fost transferată în biblioteca de bază Rust (core).
  • A fost efectuată o curățare a codului pentru a elimina posibilele avertizări ale compilatorului la compilarea kernel-ului în modul CONFIG_WERROR. La compilarea codului în limbajul Rust au fost incluse moduri diagnostice suplimentare ale compilatorului și avertizări ale lintrului Clippy.
  • Au fost propuse abstracții pentru utilizarea în codul în limbajul Rust a blocărilor seqlock (secuență de blocare), apelurilor callback pentru gestionarea alimentării, memorie I/O (readX/writeX), gestionarea întreruperilor și fluxurilor, GPIO, acces la dispozitive, drivere și acreditive.
  • S-au extins uneltele pentru dezvoltarea driverelor prin utilizarea mutexurilor mobile, iteratorilor biți, ambalajelor simplificate pentru pointere, diagnosticului îmbunătățit al erorilor și infrastructurii independente de magistrala de date.
  • A fost îmbunătățită lucrul cu referințele prin intermediul unui tip simplificat Ref, bazat pe backendul refcount_t, care folosește API-ul corespunzător al nucleului pentru numărarea referințelor. Suportul pentru tipurile Arc și Rc, oferite în biblioteca standard alloc, a fost eliminat și nu este disponibil în codul executat la nivel de nucleu (opțiuni au fost pregătite pentru bibliotecă, care dezactivează aceste tipuri).
  • În pachetul de actualizări a fost adăugat un driver PL061 GPIO, rescris în Rust. Caracteristica acestui driver este aceea că implementarea sa repetă practic linie cu linie driverul GPIO existent în limbajul C. Pentru dezvoltatorii care doresc să se familiarizeze cu crearea driverelor în Rust, a fost pregătită o comparație linie cu linie, permițându-le să înțeleagă în ce structuri în Rust a fost transformat codul în C.
  • În baza principală de cod Rust a fost acceptat rustc_codegen_gcc, backend-ul rustc pentru GCC, care implementează posibilitatea compilării în avans (AOT) utilizând biblioteca libgccjit. Odată cu dezvoltarea corespunzătoare a backend-ului, va permite compilarea codului Rust implicat în nucleu prin intermediul GCC.
  • Pe lângă companiile ARM, Google și Microsoft, compania Red Hat a exprimat interes în utilizarea limbajului Rust în nucleul Linux. Să ne reamintim că Google oferă direct suport pentru proiectul Rust for Linux, dezvoltând o nouă implementare a mecanismului de interacțiune între procese Binder în Rust și considerând posibilitatea reproiectării diferitelor drivere în Rust. Compania Microsoft a început implementarea driverelor pentru Hyper-V în Rust. Compania ARM lucrează la îmbunătățirea suportului Rust pentru sistemele bazate pe procesoare ARM. Compania IBM a implementat suport pentru Rust în nucleu pentru sistemele PowerPC.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster