Miguel Oheda, autor projektu Rust-for-Linux, navrhl pro zvažování vývojářům jádra Linux vydání v5 komponent pro vývoj ovladačů zařízení v jazyce Rust. Toto je šestá verze patchů s ohledem na první variantu, publikovanou bez čísla verze. Podpora Rustu je považována za experimentální, ale již byla zahrnuta do větve linux-next a je dostatečně rozvinutá pro zahájení práce na vytváření vrstev abstrakce nad subsystémy jádra, stejně jako pro psaní ovladačů a modulů. Vývoj je financován společností Google a organizací ISRG (Internet Security Research Group), která je zakladatelem projektu Let’s Encrypt a přispívá k propagaci HTTPS a rozvoji technologií pro zlepšení bezpečnosti internetu.
Připomínáme, že navržené změny umožňují používat Rust jako druhý jazyk pro vývoj ovladačů a modulů jádra. Podpora Rustu je zvažována jako volba, která není aktivní ve výchozím nastavení a nevede k zahrnutí Rustu mezi povinné závislosti při sestavení jádra. Použití Rustu pro vývoj ovladačů umožní s minimálními námahou vytvářet bezpečné a kvalitnější ovladače, zbavené problémů, jako je přístup k oblasti paměti po jejím uvolnění, dereference nulových ukazatelů a překročení hranic bufferu.
Bezpečná práce s pamětí je zajištěna v Rustu během kompilace prostřednictvím kontroly odkazů, sledování vlastnictví objektů a zohlednění doby života objektů (oblastí viditelnosti), stejně jako hodnocením správnosti přístupu k paměti během vykonávání kódu. Rust také poskytuje prostředky k ochraně před přetečením celočíselných hodnot, vyžaduje povinnou inicializaci hodnot proměnných před použitím, lépe zpracovává chyby ve standardní knihovně, aplikuje koncept neměnnosti (immutable) odkazů a proměnných ve výchozím nastavení, a nabízí silnou statickou typizaci pro minimalizaci logických chyb.
V nové variantě patchů pokračuje odstranění poznámek, které byly vyjádřeny během diskuse první, druhé, třetí, čtvrté a páté verze patchů. V nové verzi:
- Nástroje byly aktualizovány na vydání Rust 1.59.0. S novou verzí Rust byla také synchronizována varianta knihovny alloc, zbavená možných generací stavu „panic“ při výskytu chyb, jako je nedostatek paměti. Byla stabilizována možnost využívání assemblerových vložek („feature(global_asm)“).
- Byla přidána podpora pro vytváření hostitelských programů v jazyce Rust, které se používají během kompilace jádra.
- Místo dodávání předem vytvořených souborů se specifikací cílových platforem byla zajištěna jejich dynamická generace na základě konfigurace jádra.
- Přidán parametr jádra HAVE_RUST, který je aktivován pro architektury, kde je Rust podporován.
- Byly navrhnuty abstrakce pro použití v kódu v jazyce Rust pro hardwarový generátor pseudonáhodných čísel.
- Bylo povoleno používání chybových kódů bez prefixu „Error::“ (např. „return Err(EINVAL)“) pro přiblížení se k zpracování chybových kódů v C.
- Byl přidán typ „CString“ pro vlastní C-řetězce. Byly sloučeny typy Formatter a Buffer.
- Byly přidány typy Bool a LockInfo.
- Byla zjednodušena implementace spin-zámků.
Zdroj: opennet.ru
