Šest měsíců po zveřejnění druhé verze, Miguel Ojeda, autor projektu Rust-for-Linux, oznámila návrh třetí možnosti pro vývoj ovladačů zařízení v jazyce Rust v jádře Linuxu.
Podpora Rust je považována za experimentální, ale její zařazení do větve linux-next již bylo dohodnuto. Vývoj financuje Google a organizace ISRG (Internet Security Research Group), která je zakladatelem projektu Let's Encrypt a přispívá k propagaci HTTPS a vývoji technologií pro zlepšení bezpečnosti internetu.
Je třeba mít na paměti, že navrhované změny umožňují použít Rust jako druhý jazyk pro vývoj ovladačů jádra a modulů.
Podpora rzi je inzerována jako možnost, která není ve výchozím nastavení aktivní a nevede k tomu, že Rust bude zahrnut do požadovaných základních závislostí sestavení. Použití Rustu pro vývoj ovladačů vám umožní vytvářet lepší a bezpečnější ovladače s minimálním úsilím, bez potíží s přístupem k oblasti paměti po uvolnění, dereferencováním nulových ukazatelů a překročením limitů vyrovnávací paměti.
Nová verze oprav nadále odstraňuje komentáře učiněné během diskuse o první a druhé verzi oprav a nejpozoruhodnějších změn, které můžeme najít:
Přechod na stabilní verzi Rust 1.57 jako referenční kompilátor a byla zajištěna vazba na stabilizovanou edici jazyka Rust 2021. Přechod na specifikaci Rust 2021 ppovoleno začít pracovat, aby se zabránilo použití takových nestabilních funkcí v patchích jako const_fn_transmute, const_panic, const_unreachable_unchecked a core_panic a try_reserve.
To také vyniká vývoj alloc verze pokračoval z knihovny Rust, v nové verzi, možnosti "no_rc" a "no_sync" jsou implementovány pro zakázání této funkce který se nepoužívá v kódu Rust pro jádro, díky čemuž je knihovna modulárnější. Pokračujeme ve spolupráci s hlavními vývojáři alloc, abychom přinesli nezbytné změny jádra do hlavní knihovny. Volba "no_fp_fmt_parse", která je vyžadována pro fungování knihovny na úrovni jádra, byla přesunuta do základní knihovny (kernel) Rust.
Kód byl vyčištěn, aby se odstranila možná varování kompilátoru při kompilaci jádra v režimu CONFIG_WERROR. Když je kód vytvořen v Rust, jsou zahrnuty další režimy diagnostického kompilátoru a varování Clippy linter.
Navrhli abstrakce k použití seqlocků (sekvenční zámky), volání zpětného volání pro správu napájení, I/O paměti (čteníX / zápisX), obsluhy přerušení a vláken, GPIO, přístup k zařízení, ovladače a přihlašovací údaje v rust kódu.
Nástroje pro vývoj ovladačů byly rozšířeny s použitím přemístitelných mutexů, bitových iterátorů, zjednodušených vazeb přes ukazatele, vylepšené diagnostiky chyb a infrastruktury nezávislé na datové sběrnici.
Práce s odkazy byla vylepšena pomocí typu Ref zjednodušené, založené na backendu refcount_t, který k počítání referencí používá stejnojmenné centrální API. Podpora typů Arc a Rc poskytovaná ve standardní knihovně mapování byla odstraněna a není dostupná v kódu spouštěném na úrovni jádra (pro samotnou knihovnu byly připraveny možnosti pro zakázání těchto typů).
K opravám byla přidána verze ovladače PL061 GPIO, přepsaná v Rustu. Charakteristickým rysem ovladače je, že jeho implementace téměř řádek po řádku opakuje stávající ovladač C GPIO. Pro vývojáře, kteří se chtějí seznámit s regulátory budov v Rustu, bylo připraveno srovnání řádek po řádku, které poskytuje náhled na to, jakými buildy v Rustu se stal C kód.
Hlavní kódová základna Rustu přijímá rustc_codegen_gcc, rustc backend pro GCC, který implementuje kompilaci AOT pomocí knihovny libgccjit. Při správném vývoji backendu vám to umožní sbírat kód Rust zapojený do jádra pomocí GCC.
Kromě ARM, Google a Microsoft projevil zájem o použití Rust v linuxovém jádru i Red Hat.
Nakonec, pokud máte zájem dozvědět se o tom více, můžete si prostudovat podrobnosti Na následujícím odkazu.