A Linux kernel javításainak harmadik kiadása a Rust nyelv támogatásával

Miguel Ojeda, a Rust-for-Linux projekt szerzője egy harmadik összetevő-lehetőséget javasolt a Rust nyelvű eszközillesztőprogramok fejlesztésére a Linux kernelfejlesztők számára. A rozsdatámogatás kísérleti jellegű, de már megállapodtak a linux-next ágba való felvételről. A fejlesztést a Google és az ISRG (Internet Security Research Group) finanszírozza, amely a Let's Encrypt projekt alapítója, és a HTTPS-t és az internet biztonságát javító technológiák fejlesztését népszerűsíti.

Emlékezzünk vissza, hogy a javasolt változtatások lehetővé teszik a Rust második nyelvként való használatát illesztőprogramok és kernelmodulok fejlesztéséhez. A Rust támogatása olyan opcióként jelenik meg, amely alapértelmezés szerint nincs engedélyezve, és nem eredményezi, hogy a Rust szerepeljen a kernel szükséges összeállítási függőségeként. A Rust használata az illesztőprogramok fejlesztésére lehetővé teszi, hogy minimális erőfeszítéssel biztonságosabb és jobb illesztőprogramokat hozzon létre, olyan problémáktól mentesen, mint például a memória felszabadítása utáni hozzáférés, nullmutató hivatkozások és puffertúllépések.

A memóriabiztos kezelést a Rust fordítási időben biztosítja a referenciaellenőrzés, az objektum tulajdonjogának és az objektum élettartamának (hatókörének) nyomon követésével, valamint a kódvégrehajtás során a memória-hozzáférés helyességének értékelésével. A Rust védelmet nyújt az egész számok túlcsordulása ellen is, megköveteli a változó értékek kötelező inicializálását használat előtt, jobban kezeli a hibákat a szabványos könyvtárban, alapértelmezés szerint alkalmazza a megváltoztathatatlan hivatkozások és változók koncepcióját, erős statikus gépelést kínál a logikai hibák minimalizálása érdekében.

A javítások új verziója továbbra is megszünteti a javítások első és második verziójának tárgyalása során elhangzott megjegyzéseket. A legszembetűnőbb változások:

  • Átállás történt a Rust 1.57 stabil kiadásának referenciafordítóként való használatára, és hivatkozást biztosítottunk a Rust 2021 nyelv stabilizált kiadására. Korábban a javítások a Rust béta ágához voltak kötve, és olyan nyelvi funkciókat használtak, instabilnak minősítették. A Rust 2021 specifikációra való áttérés lehetővé tette számunkra, hogy megkezdjük a munkát annak érdekében, hogy elkerüljük az olyan instabil funkciók használatát a javításokban, mint a const_fn_transmute, const_panic, const_unavailable_unchecked és core_panic és try_reserve.
  • Folytatódott a javításokban található Rust könyvtár alloc verziójának fejlesztése, amelyet úgy módosítottak, hogy megszabadítsák a memóriafoglalási funkciókat a „pánik” állapot esetleges generálásától, amikor hiba történik, például kifogyott a memória. Az új verzió a „no_rc” és a „no_sync” opciókat alkalmazza a kernel Rust kódjában nem használt funkciók letiltására, így a könyvtár modulárisabbá válik. Folytatódik a munka a fő alloc fejlesztőkkel azzal a céllal, hogy a rendszermaghoz szükséges változtatásokat átvigyék a fő könyvtárba. A „no_fp_fmt_parse” opció, amely a könyvtár kernelszintű működéséhez szükséges, átkerült a Rust alapkönyvtárba (mag).
  • A kód megtisztításra került, hogy megszabaduljon a fordító esetleges figyelmeztetéseitől, amikor a kernel CONFIG_WERROR módban építi fel. A Rust kód építése során további fordítói diagnosztikai módok és Clippy linter figyelmeztetések engedélyezve vannak.
  • Az absztrakciók használata javasolt a Rust kódban seqlockokhoz (szekvenciazárak), energiagazdálkodási visszahívásokhoz, I/O memóriához (readX/writeX), megszakítás- és szálkezelőkhöz, GPIO-hoz, eszközökhöz, illesztőprogramokhoz és hitelesítő adatokhoz való hozzáféréshez.
  • Az illesztőprogram-fejlesztés eszközei kibővültek az áthelyezhető mutexekkel, bititerátorokkal, egyszerűsített mutató-összerendelésekkel, továbbfejlesztett hibadiagnosztikával és adatbusz-független infrastruktúrával.
  • Továbbfejlesztett munka a hivatkozásokkal egy egyszerűsített Ref típus használatával, amely a refcount_t háttérprogramon alapul, amely az azonos nevű kernel API-t használja a hivatkozások számlálásához. A szabványos alloc könyvtárban biztosított Arc és Rc típusok támogatása megszűnt, és nem érhető el a kernel szintjén végrehajtott kódban (magához a könyvtárhoz olyan opciók készültek, amelyek letiltják ezeket a típusokat).
  • A javítások tartalmazzák a PL061 GPIO illesztőprogram Rust nyelven átírt verzióját. A meghajtó különlegessége, hogy megvalósítása szinte soronként megismétli a meglévő GPIO drivert C nyelven. Azok a fejlesztők, akik szeretnének megismerkedni az illesztőprogramok Rustban történő létrehozásával, soronkénti összehasonlítást készítettek, amely lehetővé teszi számukra, hogy megértsék, hogy a Rust mely konstrukcióivá alakítják át a C kódot.
  • A fő Rust kódbázis átvette a rustc_codegen_gcc-t, a GCC rustc-háttérrendszerét, amely a libgccjit könyvtár használatával valósítja meg az idő előtti (AOT) fordítást. A háttér megfelelő fejlesztésével lehetővé teszi a rendszermagban lévő Rust kód összegyűjtését a GCC segítségével.
  • Az ARM, a Google és a Microsoft mellett a Red Hat érdeklődését fejezte ki a Rust nyelv Linux kernelben való használata iránt. Emlékezzünk vissza, hogy a Google közvetlenül támogatja a Rust for Linux projektet, fejleszti a Binder interprocess kommunikációs mechanizmus új megvalósítását Rustban, és fontolgatja a különböző illesztőprogramok átdolgozásának lehetőségét a Rustban. A Microsoft megkezdte a Hyper-V illesztőprogramjainak bevezetését Rustban. Az ARM azon dolgozik, hogy javítsa az ARM-alapú rendszerek Rust-támogatását. Az IBM bevezette a Rust támogatást a PowerPC rendszerek kernelébe.

Forrás: opennet.ru

Hozzászólás