Miguel Ojeda, autor projektu Rust-for-Linux, navrhol pre vývojárov jadra Linux tretiu variantu komponentov na vývoj ovládačov zariadení v jazyku Rust. Podpora Rust je považovaná za experimentálnu, ale už bola schválená na zaradenie do vetvy linux-next. Vývoj je financovaný spoločnosťou Google a organizáciou ISRG (Internet Security Research Group), ktorá je zakladateľom projektu Let’s Encrypt a prispieva k propagácii HTTPS a rozvoju technológií na zvýšenie bezpečnosti internetu.
Pripomeňme, že navrhované zmeny umožňujú používať Rust ako druhý jazyk na vývoj ovládačov a modulov jadra. Podpora Rust sa prezentuje ako možnosť, ktorá nie je predvolene aktívna a nevedie k zaradeniu Rustu medzi povinné zostavovacie závislosti jadra. Použitie Rustu na vývoj ovládačov umožní s minimálnym úsilím vytvárať bezpečné a kvalitnejšie ovládače, zbavené takých problémov ako je prístup do pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov a pretečenie vyrovnávacej pamäte.
Bezpečná práca s pamäťou je v Rust zabezpečená počas kompilácie prostredníctvom overovania referencií, sledovania vlastníctva objektov a zohľadnenia životnosti objektov (oblasti viditeľnosti), ako aj prostredníctvom hodnotenia správnosti prístupu k pamäti počas vykonávania kódu. Rust tiež poskytuje prostriedky na ochranu pred pretečením celočíselných hodnôt, vyžaduje povinnú inicializáciu hodnôt premenných pred ich použitím, lepšie spracováva chyby v štandardnej knižnici, aplikuje koncept nemennosti (immutable) odkazov a premenných ako predvolených a ponúka silnú statickú typizáciu na minimalizáciu logických chýb.
V novej verzii patchov pokračuje odstránenie pripomienok vyjadrených v priebehu diskusie o prvej a druhej verzii patchov. Najvýraznejšie zmeny sú:
- Prešlo sa na používanie stabilnej verzie kompilátora Rust 1.57 ako referenčného a zabezpečila sa väzba na stabilizovanú edíciu jazyka Rust 2021. Predtým boli patche naviazané na beta vetvu Rust a využívali niektoré možnosti jazyka, ktoré spadajú do kategórie nestabilných funkcií. Prechod na špecifikáciu Rust 2021 umožnil iniciovať prácu na odstránení použitia nestabilných funkcií v patchoch, ako sú const_fn_transmute, const_panic, const_unreachable_unchecked a core_panic a try_reserve.
- Pokračuje sa vo vývoji variantu Rust knižnice alloc, upraveného tak, aby sa zbavil funkcií alokácie pamäte, ktoré by mohli generovať stav „panic“ pri chybách, ako je nedostatok pamäte. V novej verzii sú implementované možnosti „no_rc“ a „no_sync“ na vypnutie funkčnosti, ktorá sa v Rust kóde pre jadro nepoužíva, čím sa knižnica stáva modulárnejšou. Pokračuje sa v spolupráci s hlavnými vývojármi alloc, zameranej na prenášanie potrebných zmien pre jadro do hlavného súboru knižnice. Do základnej knižnice Rust (core) bola prenesená možnosť „no_fp_fmt_parse“, potrebná na fungovanie knižnice na úrovni jadra.
- Bola vykonaná údržba kódu na odstránenie možných varovaní kompilátora pri zostavovaní jadra v režime CONFIG_WERROR. Pri zostavovaní kódu v jazyku Rust boli zahrnuté ďalšie diagnostické režimy kompilátora a varovania lintera Clippy.
- Navrhnuté sú abstrakcie na použitie v kóde jazyka Rust pre blokovanie seqlock (sekvenčné zámky), spätne volania na správu napájania, I/O Memory (readX/writeX), obsluhu prerušenia a prúdov, GPIO, prístup k zariadeniam, ovládačom a údajom.
- Rozšírené prostriedky na vývoj ovládačov s použitím presúvateľných mutexov, bitových iterátorov, zjednodušených obalov okolo ukazovateľov, vylepšenej diagnostiky porúch a infraštruktúry, ktorá nie je závislá od dátovej zbernice.
- Zlepšená práca so referenciami pomocou zjednodušeného typu Ref, ktorý je založený na backendu refcount_t a využíva rovnomenné API jadra na počítanie referencií. Podpora typov Arc a Rc, poskytovaných v štandardnej knižnici alloc, bola odstránená a nie je dostupná v kóde, ktorý beží na úrovni jadra (pre samotnú knižnicu sú pripravené možnosti, ktoré tieto typy vypínajú).
- Do patchov bol pridaný variant ovládača PL061 GPIO, prepísaný na Rust. Špeciálnosťou ovládača je to, že jeho implementácia prakticky riadok po riadku opakuje existujúci ovládač GPIO v jazyku C. Pre vývojárov, ktorí sa chcú oboznámiť s vytváraním ovládačov na Rust, bolo pripravené riadkové porovnanie, ktoré umožňuje pochopiť, do akých konštrukcií na Rust bol pretransformovaný kód na C.
- Do základného kódu jazyka Rust bol prijatý rustc_codegen_gcc, backend rustc pre GCC, ktorý implementuje možnosť predkompilácie (AOT) s použitím knižnice libgccjit. Pri riadnom rozvoji backendu umožní kompilovať použitý v jadre kód Rust pomocou GCC.
- Okrem spoločností ARM, Google a Microsoft, záujem o použitie jazyka Rust v jadre Linux vyjadrila aj spoločnosť Red Hat. Pripomíname, že Google priamo zabezpečuje podporu projektu Rust for Linux, vyvíja novú implementáciu mechanizmu medzi procesným zdieľaním Binder na Rust a zvažuje prepracovanie rôznych ovládačov na Rust. Spoločnosť Microsoft začala s implementáciou ovládačov pre Hyper-V na Rust. Spoločnosť ARM pracuje na zlepšení podpory Rust pre systémy založené na procesoroch ARM. Spoločnosť IBM implementovala podporu Rust do jadra pre systémy PowerPC.
Zdroj: opennet.ru
