Miguel Ojeda, autor projektu Rust-for-Linux, navrhl čtvrtou verzi komponent pro vývoj ovladačů zařízení v jazyce Rust k posouzení vývojáři jádra Linux. Podpora Rustu je považována za experimentální, ale byla již schválena pro zařazení do větve linux-next a je dostatečně vyspělá na to, aby bylo možné začít vytvářet vrstvy abstrakce nad subsystémy jádra, stejně jako psát ovladače a moduly. Vývoj je financován společností Google a organizací ISRG (Internet Security Research Group), která je zakladatelem projektu Let’s Encrypt a podporuje rozvoj HTTPS a technologií pro posílení 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é verzi patchů pokračuje odstranění námitek vznesených během diskusí o prvních, druhých a třetích verzích patchů. V nové verzi:
- Byl proveden přechod na používání stabilní verze kompilátoru Rust 1.58.0 jako referenčního. Mezi potřebné změny pro projekt, které zatím nejsou zahrnuty ve standardní sadě nástrojů Rust, patří příznak „-Zsymbol-mangling-version=v0“ (očekává se v Rust 1.59.0) a režim „maybe_uninit_extra“ (očekává se v Rust 1.60.0).
- Byly přidány automatické kontroly existence vhodného nástroje Rust a rozšířeny možnosti testování podpory Rustu v systému.
- Byly navrženy nové abstrakce pro přístup z kódu v jazyce Rust k tabulkám identifikátorů zařízení ("IdArray" a "IdTable").
- Byly přidány vrstvy pro přístup k funkcím souvisejícím s časovačem (clock framework).
- Ovladače pro platformy jsou nyní definovány prostřednictvím implementace typových tříd.
- Byl přidán nový makro pro zjednodušení registrace ovladačů platforem a navržen nový šablonový typ ovladače.
- Byly přidány makra pro struktury „dev_*“.
- Byly přidány metody „{read,write}*_relaxed“ pro typ IoMem<T>.
- Byla odstraněna vlastnost FileOpener pro zjednodušení operací se soubory.
- Do počtu argumentů předávaných při registraci ovladače byl přidán parametr „ThisModule“.
- Byl navržen šablonový typ pro vytváření modulů jádra v jazyce Rust.
Zdroj: opennet.ru
