Osma verzija zakrpa za Linux kernel s podrškom za Rust jezik

Miguel Ojeda, autor projekta Rust-for-Linux, predložio je izdavanje v8 komponenti za razvoj upravljačkih programa uređaja u jeziku Rust na razmatranje od strane programera Linux kernela. Ovo je revidirana verzija zakrpa, uzimajući u obzir prvu verziju, objavljenu bez broja verzije. Podrška za Rust smatra se eksperimentalnom, ali je već uključena u granu linux-next, tvrdi da je integrirana u jesensko izdanje 5.20/6.0 i dovoljno je zrela za početak rada na stvaranju slojeva apstrakcije preko podsustava jezgre, kao i pisanja upravljačkih programa i moduli. Razvoj financiraju Google i ISRG (Internet Security Research Group) koji je osnivač projekta Let's Encrypt te promovira HTTPS i razvoj tehnologija za poboljšanje internetske sigurnosti.

U novoj verziji:

  • Skup alata i varijanta biblioteke alloc, bez mogućeg stvaranja stanja "panike" kada se pojave pogreške, ažurirani su za izdanje Rust 1.62. U usporedbi s prethodno korištenom verzijom, Rust toolkit ima stabiliziranu podršku za funkcionalnost const_fn_trait_bound koja se koristi u zakrpama kernela.
  • Kod za vezanje odvojen je u odvojeni "vezovi" paketa sanduka, što pojednostavljuje ponovnu izgradnju ako se promjene izvrše samo na glavnom paketu "kernel".
  • Implementacija makronaredbe “concat_idents!” prepisan u obliku proceduralne makronaredbe koja nije vezana uz funkcionalnost concat_idents i dopušta upotrebu referenci na lokalne varijable.
  • Makronaredba “static_assert!” je ponovno napisana, dopuštajući korištenje “core::assert!()” u bilo kojem kontekstu umjesto konstanti.
  • Makro "build_error!" prilagođen za rad kada je za module postavljen način rada “RUST_BUILD_ASSERT_{WARN,ALLOW}”.
  • Dodana zasebna datoteka s postavkama “kernel/configs/rust.config”.
  • Datoteke “*.i” obrađene u makro supstitucijama preimenovane su u “*.rsi”.
  • Podrška za izgradnju Rust komponenti s razinama optimizacije različitim od onih koje se koriste za C kod je prekinuta.
  • Dodan fs modul, koji omogućuje povezivanja za rad sa datotečnim sustavima. Naveden je primjer jednostavnog datotečnog sustava napisanog u Rustu.
  • Dodan modul workqueue za rad s redovima čekanja sustava (omogućuje povezivanja preko struktura kernela work_struct i workqueue_struct).
  • Razvoj kasync modula nastavljen je implementacijom metoda asinkronog programiranja (async). Dodan primjer TCP poslužitelja na razini jezgre napisanog u Rustu.
  • Dodana je mogućnost rukovanja prekidima u jeziku Rust pomoću tipova [Threaded]Handler i [Threaded]Registration` tipova.
  • Dodana proceduralna makronaredba "#[vtable]" kako bi se olakšao rad s tablicama pokazivača funkcija, kao što je struktura file_operations.
  • Dodana implementacija dvosmjernih povezanih popisa "unsafe_list::List".
  • Dodana početna podrška za RCU (Read-copy-update) i tip Guard za provjeru je li zaključavanje čitanja vezano za trenutnu nit.
  • Dodana funkcija Task::spawn() za stvaranje i automatsko pokretanje niti kernela. Dodana je i metoda Task::wake_up().
  • Dodan je modul odgode koji vam omogućuje korištenje odgoda (omot preko msleep()).

Predložene promjene omogućuju korištenje Rusta kao drugog jezika za razvoj upravljačkih programa i modula kernela. Podrška za Rust predstavljena je kao opcija koja nije omogućena prema zadanim postavkama i ne rezultira uključivanjem Rusta kao obavezne ovisnosti o izgradnji za kernel. Korištenje Rusta za razvoj upravljačkih programa omogućit će vam stvaranje sigurnijih i boljih upravljačkih programa uz minimalan napor, bez problema poput pristupa memoriji nakon oslobađanja, dereferenciranja nultog pokazivača i prekoračenja međuspremnika.

Rukovanje sigurnim za memoriju omogućeno je u Rustu tijekom kompajliranja provjerom referenci, praćenjem vlasništva objekta i životnog vijeka objekta (opseg), kao i procjenom ispravnosti pristupa memoriji tijekom izvođenja koda. Rust također pruža zaštitu od prekoračenja cjelobrojnih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje pogreške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli prema zadanim postavkama, nudi snažno statično tipkanje za smanjenje logičkih pogrešaka.

Izvor: opennet.ru

Dodajte komentar