Miguel Ojeda, autor projektu Rust-for-Linux, navrhol na zváženie vývojárom jadra Linux piatu verziu komponentov pre vývoj ovládačov zariadení v jazyku Rust. Podpora jazyka Rust sa považuje za experimentálnu, no už je zahrnutá vo vetve linux-next a je dostatočne vyvinutá na začatie práce na vytváraní vrstiev abstrakcie nad subsystémami jadra, ako aj na písanie ovládačov a modulov. 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 podporuje propagáciu HTTPS a rozvoj 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 novom variantu patchov pokračuje odstraňovanie poznámok vyjadrených v procese diskusie prvej, druhej, tretej a štvrtej edície patchov. V novej verzii:
- Do systému nepretržitej integrácie založeného na podpore spoločnosťou Intel bol pridaný bot 0DAY/LKP, ktorý kontroluje komponenty pre podporu Rust a začala sa publikácia správ o testovaní. Pripravuje sa integrácia podpory Rust do systému automatizovaného testovania KernelCI. Testovanie založené na GitHub CI prešlo na používanie kontajnerov.
- Moduly jadra na Rust sa zbavili potreby definovania crate-atribútov „#![no_std]“ a „#![feature(…)]“.
- Pridaná podpora jednorazových zostavovacích cieľov (.o, .s, .ll a .i).
- V odporúčaniach na formátovanie kódu boli stanovené pravidlá týkajúce sa oddelenia komentárov („//“) a dokumentovania kódu („///“).
- Prepracovaný skript is_rust_module.sh.
- Pridaná podpora statických (globálnych zdieľaných premenných) primitív synchronizácie, založených na implementácii „CONFIG_CONSTRUCTORS”.
- Zjednodušená správa zámkov: Guard a GuardMut boli zlúčené do jedného parametrového typu.
- Poskytnutá možnosť definovať dodatočné parametre pri registrácii zariadení.
- Pridaná abstrakcia „RwSemaphore“, ktorá slúži ako obal nad C-štruktúrou rw_semaphore.
- Pre použitie mmap bol pridaný nový modul mm a abstrakcia VMA (obal nad štruktúrou vm_area_struct).
- Ovládač GPIO PL061 bol preložený na používanie makra „dev_*!“.
- Vykonaná celková úprava kódu.
Zdroj: opennet.ru
