Miguel Ojeda, a szerzője a Rust-for-Linux projektnek, egy harmadik lehetőséget javasolt a Linux kernel fejlesztői számára eszközmeghajtók Rust nyelven való fejlesztéséhez. A Rust támogatása kísérleti jellegű, de már beleegyeztek a linux-next ágba való beépítésébe. A fejlesztést a Google és az ISRG (Internet Security Research Group), amely a Let’s Encrypt projekt alapítója és a HTTPS előmozdítására, valamint az internet biztonságának javítására irányuló technológiák fejlesztésére szakosodott, finanszírozza.
Ne feledjük, hogy a javasolt változások lehetővé teszik a Rust használatát második nyelvként a meghajtók és modulok fejlesztésében a kernelben. A Rust támogatása lehetőségként van megjelenítve, amely alapértelmezés szerint nem aktív, nem vezetve a Rust kötelező build függőségek közé történő bevonásához a kernelhez. A Rust használata a meghajtók fejlesztésében lehetővé teszi, hogy minimális erőfeszítéssel biztonságosabb és jobb minőségű meghajtókat készítsünk, amelyek mentesek az olyan problémáktól, mint a memória törlés utáni hozzáférés, null pointerek dereferálása és a buffer határai túllépése.
A memória biztonságos kezelése a Rust nyelvben a fordítás során a hivatkozások ellenőrzésével, az objektumok tulajdonlásának nyomon követésével, valamint az objektumok élettartamának (láthatóságának) figyelembevételével történik, továbbá a memóriához való hozzáférés helyességének értékelésével a kód futtatása alatt. A Rust eszközöket is biztosít a egész számok túlfutásának védelmére, kötelezővé teszi a változók értékeinek inicializálását használat előtt, jobban kezeli a hibákat a standard könyvtárban, alkalmazza az immutable (változhatatlan) hivatkozások és változók fogalmát alapértelmezés szerint, valamint erős statikus típust kínál a logikai hibák minimalizálására.
Az új patch verzióján folytatódik az első és második verziók vita során megfogalmazott megjegyzések orvoslása. A legszembetűnőbb változások:
- Átálltak a stabil Rust 1.57 verzió használatára referencia fordítókánt, és biztosították a Rust 2021 stabilizált nyelvi kiadásához való kötődést. Korábban a patch-ek a Rust bétája ágaira épültek, és használták a nyelv egyes, instabil kategóriába tartozó lehetőségeit. A Rust 2021 specifikációra való áttérés lehetővé tette a munkát azon instabil lehetőségek eltávolításán, mint a const_fn_transmute, const_panic, const_unreachable_unchecked, valamint core_panic és try_reserve.
- Folyamatosan fejlesztik a patch-ek részét képező Rust alloc könyvtárakat, amelyeket úgy módosítottak, hogy a memóriakezelő függvények ne generáljanak „panic” állapotokat hibák, például memóriahiány esetén. Az új verzióban bevezetésre kerültek a „no_rc” és „no_sync” lehetőségek, amelyek kikapcsolják a Rust kernel kódjában nem használt funkciókat, így a könyvtár modulárisabbá vált. Tovább folyik a fő alloc fejlesztőkkel való együttműködés, célja a kernel számára szükséges változtatások átvezetése a könyvtár fő törzsébe. A Rust alapkönyvtárhoz (core) átkerült a „no_fp_fmt_parse” lehetőség, amely szükséges a könyvtár kernel szintű működéséhez.
- A kód tisztítása történt a lehetséges fordítói figyelmeztetések eltávolítására, amikor a kernel összeállítása CONFIG_WERROR módban történik. Rust kód összeállításakor további diagnosztikai fordító módok és a Clippy linter figyelmeztetései aktiválódtak.
- Ajánlott absztrakciók a Rust nyelven történő programozás során használt seqlock (sorozatok zárolása), callback-hívás a tápellátás kezelésére, I/O memória (readX/writeX), megszakításkezelők és szálak, GPIO, eszközökhez, illesztőprogramokhoz és hitelesítő adatokhoz való hozzáférés.
- Bővítették az illesztőprogramok fejlesztésére szolgáló eszközöket, beleértve a mozgatható mutexeket, biteket iteráló iteratorokat, egyszerűsített segédprogramokat a mutatókhoz, javított hibaelhárítást és adatbusz-független infrastruktúrát.
- Javultak a hivatkozások kezelése egy egyszerűsített Ref típussal, amely a refcount_t háttérre épül és az azonos nevű kernel API-t használja a hivatkozások számolására. Az Arc és Rc típusok, amelyek az alapértelmezett alloc könyvtárban találhatóak, eltávolításra kerültek és nem érhetők el kernel szinten végrehajtott kód esetén (a könyvtárhoz készültek olyan opciók, amelyek letiltják ezeket a típusokat).
- A patchok közé bekerült a PL061 GPIO illesztőprogram Rust-ra írt változata. Az illesztőprogram jellemzője, hogy megvalósítása gyakorlatilag soronként megismétli a meglévő GPIO illesztőprogramot C nyelven. A Rust-ra illesztőprogramok készítésével ismerkedni kívánó fejlesztők számára soronkénti összehasonlító anyagot állítottak össze, amely lehetővé teszi a C kód Rust-ra való átalakításának megértését.
- A Rust fő kódalapjába belépett a rustc_codegen_gcc, a GCC-hez tartozó rustc háttér, amely lehetővé teszi az előrelátó (AOT) fordítást a libgccjit könyvtár használatával. A háttér megfelelő fejlődésével lehetővé teszi a Rust-kód GCC általi fordítását, amely a kernelben használatos.
- Az ARM, Google és Microsoft cégek mellett a Red Hat is érdeklődést mutatott a Rust nyelv Linux kernelben történő használata iránt. Emlékeztetőül, a Google közvetlen támogatást nyújt a Rust for Linux projekt számára, új megvalósítást fejleszt a Rust-on történő folyamatok közötti kommunikációra Binder néven, és fontolóra veszi a különféle illesztőprogramok Rust-ra való átírását. A Microsoft megkezdte a Hyper-V illesztőprogramok Rust-ra történő megvalósítását. Az ARM a Rust támogatásának javításán dolgozik az ARM architektúrára alapozott rendszerek számára. Az IBM pedig a PowerPC rendszerek kernel támogatásába integrálta a Rust-ot.
Forrás: opennet.ru
