Miguel Ojeda, autor projekta Rust-for-Linux, predložio je za razmatranje programerima Linux jezgre ažuriranu verziju komponenti za razvoj drajvera uređaja na jeziku Rust. Podrška za Rust smatra se eksperimentalnom, ali je već odobrena za uključivanje u liniju linux-next. U novoj verziji ispravljene su primjedbe iznesene tijekom rasprave o prvoj verziji zakrpa. Linus Torvalds već se uključio u raspravu i predložio promjenu logike obrade nekih bitnih operacija.
Podsjećamo da predložene promjene omogućuju korištenje Rusta kao drugog jezika za razvoj drajvera i modula jezgra. Podrška za Rust se nudi kao opcija, koja nije aktivna prema zadanim postavkama i ne dovodi do uključivanja Rusta kao obvezne gradbene zavisnosti za jezgro. Korištenje Rusta za razvoj drajvera omogućit će stvaranje sigurnijih i kvalitetnijih drajvera s minimalnim naporom, bez problema poput pristupa memorijskom prostoru nakon oslobađanja, dereferenciranja nultih pokazivača i izlaska iz granica bafera.
Siguran rad s memorijom osigurava se u Rust-u tijekom kompajlacije putem provjere referenci, praćenja vlasništva nad objektima i uzimanja u obzir vremena života objekata (opseg vidljivosti), kao i procjenom ispravnosti pristupa memoriji tijekom izvođenja koda. Rust također pruža alate za zaštitu od prelivanja cijelih brojeva, zahtijeva obveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivosti (immutable) referenci i varijabli prema zadanim postavkama te nudi snažnu statičku tipizaciju za minimiziranje logičkih grešaka.
Najistaknutije promjene u novoj verziji zakrpa:
- Kod za raspodjelu memorije oslobođen je mogućih generacija stanja 'panic' kada dođe do pogrešaka poput nedostatka memorije. U sastav je uključen varijanta Rust-biblioteke alloc, u kojoj je preuređen kod za obradu kvarova, ali je konačni cilj prijenos svih mogućnosti potrebnih za jezgru u glavnu verziju alloc (promjene su već pripremljene i poslane u sastav standardne biblioteke Rust).
- Umjesto noćnih gradnji za kompajliranje jezgre s podrškom za Rust, sada je moguće koristiti beta izdanja i stabilne verzije kompajlera rustc. Trenutno se kao referentni kompajler koristi rustc 1.54-beta1, ali nakon izlaska verzije 1.54 krajem mjeseca, on će se održavati kao referentni.
- Dodana je podrška za pisanje testova koristeći standardni Rust atribut '#[test]' i mogućnost primjene doctestova za dokumentiranje testova.
- Dodana je podrška za arhitekture ARM32 i RISCV, uz prethodno podržane x86_64 i ARM64.
- Poboljšane su implementacije GCC Rust (GCC frontend za Rust) i rustc_codegen_gcc (backend rustc za GCC), koji sada prolazi sve osnovne testove.
- Predložen je novi nivo apstrakcije za korištenje u programima na jeziku Rust mehanizama jezgre, napisanih na jeziku C, kao što su crveno-crna stabla, objekti s brojanjem referenci, kreiranje datotečnih deskriptora, zadaci, datoteke i vektori ulaza/izlaza.
- U komponentama za razvoj drajvera poboljšana je podrška za modul 'file_operations', makro 'module!', registraciju makroa i rudimentarnih drajvera (probe i remove).
- U Binder-u je implementirana podrška za prijenos datotečnih deskriptora i LSM-hookova.
- Predložen je funkcionalniji primjer drajvera na Rustu – bcm2835-rng za hardverski generator slučajnih brojeva na Raspberry Pi pladnjama.
Dodatno se spominju projekti nekih kompanija vezani uz korištenje Rusta u jezgru:
- Kompanija Microsoft izrazila je interes za sudjelovanje u radu na integraciji podrške za Rust u jezgru Linux i spremna je u narednim mjesecima pružiti implementacije drajvera za Hyper-V na Rastu.
- Kompanija ARM radi na poboljšanju podrške za Rust za sustave temeljene na ARM procesorima. Projektu Rust već su predložene promjene koje 64-bitne ARM sustave prebacuju u razinu prvog razreda podrške (Tier-1).
- Kompanija Google izravno osigurava podršku projektu Rust for Linux, razvija novu implementaciju mehanizma međuprosječnog komunikacijskog sustava Binder na Rastu i razmatra mogućnost preinake raznih drajvera na Rust. Kroz ISRG (Internet Security Research Group) kompanija Google osigurala je financiranje rada na integraciji podrške za Rust u jezgru Linux.
- Kompanija IBM implementirala je podršku za Rust u jezgru za PowerPC sustave.
- Laboratorija LSE (Laboratorij za sustavna istraživanja) razvila je SPI-drajver na Rastu.
Izvor: opennet.ru
