Treće izdanje zakrpa za Linux kernel s podrškom za jezik Rust

Miguel Ojeda, autor projekta Rust-for-Linux, predložio je opciju treće komponente za razvoj upravljačkih programa uređaja u jeziku Rust koju bi trebali razmotriti programeri Linux kernela. Podrška za Rust smatra se eksperimentalnom, ali je već dogovoreno da se uključi u granu linux-next. Razvoj financiraju Google i ISRG (Internet Security Research Group), koji je osnivač projekta Let’s Encrypt te promiče HTTPS i razvoj tehnologija za poboljšanje sigurnosti na internetu.

Podsjetimo se da 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.

Nova verzija zakrpa nastavlja eliminirati komentare iznesene tijekom rasprave o prvoj i drugoj verziji zakrpa. Najuočljivije promjene:

  • Izvršen je prijelaz na korištenje stabilnog izdanja Rust 1.57 kao referentnog prevoditelja i pružena je poveznica na stabilizirano izdanje jezika Rust 2021. Prethodno su zakrpe bile vezane uz beta granu Rusta i koristile su neke jezične značajke koje klasificirani su kao nestabilni. Prijelaz na specifikaciju Rust 2021 omogućio nam je da započnemo rad na izbjegavanju upotrebe takvih nestabilnih značajki u zakrpama kao što su const_fn_transmute, const_panic, const_unavailable_unchecked i core_panic i try_reserve.
  • Nastavljen je razvoj alloc verzije biblioteke Rust uključene u zakrpe, modificirane kako bi se funkcije dodjele memorije oslobodile mogućeg stvaranja stanja "panike" kada se pojave pogreške, kao što je nedostatak memorije. Nova verzija implementira opcije “no_rc” i “no_sync” za onemogućavanje funkcionalnosti koje se ne koriste u Rust kodu kernela, čineći knjižnicu modularnijom. Nastavlja se rad s glavnim programerima alloc-a, s ciljem prijenosa promjena potrebnih za kernel u glavnu biblioteku. Opcija “no_fp_fmt_parse”, potrebna za rad biblioteke na razini kernela, premještena je u osnovnu biblioteku Rust (core).
  • Kod je očišćen kako bi se uklonila moguća upozorenja kompilatora prilikom izgradnje kernela u načinu rada CONFIG_WERROR. Prilikom izrade koda u Rustu, omogućeni su dodatni načini dijagnostike prevoditelja i Clippy linter upozorenja.
  • Apstrakcije su predložene za upotrebu u Rust kodu za seqlock (zaključavanje sekvence), povratne pozive za upravljanje napajanjem, I/O memoriju (readX/writeX), rukovatelje prekidima i nitima, GPIO, pristup uređajima, upravljačkim programima i vjerodajnicama.
  • Alati za razvoj upravljačkih programa prošireni su tako da uključuju premjestive mutekse, iteratore bitova, pojednostavljena povezivanja pokazivača, poboljšanu dijagnostiku grešaka i infrastrukturu neovisnu o sabirnici podataka.
  • Poboljšan rad s vezama pomoću pojednostavljenog tipa Ref, temeljenog na pozadini refcount_t, koja koristi istoimeni API kernela za brojanje referenci. Podrška za tipove Arc i Rc pružena u standardnoj biblioteci alloc je uklonjena i nije dostupna u kodu koji se izvodi na razini kernela (pripremljene su opcije za samu biblioteku koje onemogućuju te tipove).
  • Zakrpe uključuju verziju PL061 GPIO upravljačkog programa, ponovno napisanu u Rustu. Posebna značajka upravljačkog programa je da njegova implementacija gotovo redak po redak ponavlja postojeći GPIO upravljački program u C jeziku. Za programere koji se žele upoznati sa kreiranjem upravljačkih programa u Rustu, pripremljena je usporedba red po red koja im omogućuje da razumiju u koje se konstrukcije u Rustu C kod pretvara.
  • Glavna Rust kodna baza usvojila je rustc_codegen_gcc, rustc backend za GCC koji implementira kompilaciju unaprijed (AOT) pomoću biblioteke libgccjit. S pravilnim razvojem pozadine, omogućit će vam prikupljanje Rust koda uključenog u kernel pomoću GCC-a.
  • Uz ARM, Google i Microsoft, Red Hat je iskazao interes za korištenje Rust jezika u Linux kernelu. Podsjetimo, Google izravno pruža podršku za projekt Rust for Linux, razvija novu implementaciju Binder međuprocesnog komunikacijskog mehanizma u Rustu te razmatra mogućnost prerade raznih drajvera u Rustu. Microsoft je počeo implementirati upravljačke programe za Hyper-V u Rustu. ARM radi na poboljšanju podrške za Rust za sustave temeljene na ARM-u. IBM je implementirao podršku za kernel za Rust za PowerPC sustave.

Izvor: opennet.ru

Dodajte komentar