Miguel Ojeda, autor projektu Rust-for-Linux, navrhl pro vývojáře jádra Linux pátou variantu komponent pro vývoj ovladačů zařízení v jazyce Rust. Podpora Rust 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 zvýš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 v průběhu diskuse o prvních, druhých, třetích a čtvrtých verzích patchů. V nové verzi:
- Do systému kontinuální integrace založeného na podpoře společnosti Intel bota 0DAY/LKP byla přidána kontrola komponent pro podporu Rust a začalo se publikovat zprávy o testování. Připravuje se integrace podpory Rust do systému automatizovaného testování KernelCI. Testování na základě GitHub CI bylo převedeno na použití kontejnerů.
- Moduly jádra v Rustu byly zbaveny nutnosti definovat crate-atributy „#![no_std]“ a „#![feature(…)]“.
- Byla přidána podpora jednotkových sestavení (.o, .s, .ll a .i).
- V doporučeních pro formátování kódu byla stanovena pravidla týkající se oddělení komentářů („//“) a dokumentace kódu („///“).
- Byl přepracován skript is_rust_module.sh.
- Byla přidána podpora statických (globálních) sdílených proměnných synchronizačních primitiv, založená na implementaci „CONFIG_CONSTRUCTORS“.
- Bylo zjednodušeno řízení zámků: Guard a GuardMut byly sloučeny do jednoho parametrového typu.
- Byla poskytnuta možnost definování dodatečných parametrů při registraci zařízení.
- Byla přidána abstrakce „RwSemaphore“, která funguje jako obal nad strukturou rw_semaphore v C.
- Pro použití mmap byl přidán nový modul mm a abstrakce VMA (obal nad strukturou vm_area_struct).
- Ovladač GPIO PL061 byl převeden na použití makra „dev_*!“.
- Byla provedena celková údržba kódu.
Zdroj: opennet.ru
