A nyolcadik Linux kernel patch verzió Rust nyelv támogatásával

Miguel Ojeda, a Rust-for-Linux projekt szerzője, javasolta, hogy a Linux kernel fejlesztői fontolják meg a v8 komponensek kiadását, amelyek támogatják a Rust nyelven írt eszközmeghajtók fejlesztését. Ez a patch kiadás a frissített változata az első verziónak, amely verziószám nélkül jelent meg. A Rust támogatása kísérleti jellegű, de már be van építve a linux-next ágba, és a 5.20/6.0 őszi kiadásba való integrálásra pályázik. A Rust már kellően fejlett ahhoz, hogy elkezdődjön az absztrakciós rétegek kidolgozása a kernel alsóbb szintű alrendszerei felett, valamint meghajtók és modulok írása. A fejlesztést a Google vállalat és az ISRG (Internet Security Research Group) finanszírozza, amely a Let’s Encrypt projekt alapítója, és hozzájárul a HTTPS használatának népszerűsítéséhez és az internet biztonságának fejlesztéséhez.

Az új verzióban:

  • A panic állapot generálásának elkerülésére kifejlesztett alloc könyvtár és eszközkészlet frissítése a Rust 1.62 kiadására készült. Az előző verzióval összehasonlítva a Rust eszközkészletében stabilizálódott a const_fn_trait_bound funkcionalitás támogatása, amely a kernelhez készült patch-ekben használatos.
  • A binderek kódja külön crate-csomagba, a „bindings”-be lett áttelepítve, így egyszerűbb a visszafelé építkezés, ha csak az alap „kernel” csomagban történik változás.
  • A „concat_idents!” makró implementációja átkonvertálásra került eljárási makró formává, amely nem függ a concat_idents funkcionalitástól, így lehetővé teszi a lokális változókra való hivatkozást.
  • A „static_assert!” makró újraírásra került, lehetővé téve a „core::assert!()-t” bármely kontextusban történő használatát a konstansok helyett.
  • A „build_error!” makrót úgy módosították, hogy a modulokban a „RUST_BUILD_ASSERT_{WARN,ALLOW}” beállításokkal együtt tudjon működni.
  • Hozzáadva egy külön fájl, a „kernel/configs/rust.config” a beállításokhoz.
  • A makrók behelyettesítése során használt „*.i” fájlokat átnevezték „*.rsi” fájlokra.
  • Megszüntették a Rust komponensek építésének támogatását olyan optimalizálási szinttel, amely eltér a C nyelven írt kódokétól.
  • Hozzáadva egy fs modult, amely a fájlrendszerekkel való munkára szolgáló burkolatokat biztosít. Bemutatva egy egyszerű fájlrendszer példáját, amely Rust nyelven íródott.
  • Hozzáadva egy workqueue modult a rendszer sorok kezelésére (burkolatokat biztosít a kernel work_struct és workqueue_struct struktúrák körül).
  • A modul fejlesztése folytatódott a kasync aszinkron programozás (async) módszereivel való implementálásával. Hozzáadtunk egy példát a Rust nyelven írt TCP-szerver működésére, amely a kernel szintjén fut.
  • Rust nyelven lehetőség lett a megszakítások kezelésére a [Threaded]Handler típusok és a [Threaded]Registration segítségével.
  • Hozzáadva a "#[vtable]" procedurális makró, amely egyszerűsíti a funkciómutató táblázatokkal való munkát, mint például a file_operations struktúra.
  • Bevezetésre került a kétdirekciójú láncolt listák "unsafe_list::List" implementációja.
  • Bevezetésre került az RCU (Read-copy-update) kezdeti támogatása és a Guard típus a jelenlegi szálhoz történő olvasási zárolás ellenőrzésére.
  • Hozzáadva a Task::spawn() funkció a szálak kernelben történő létrehozásához és automatikus indításához. Bevezetve a Task::wake_up() módszert is.
  • Hozzáadva a delay modul, amely lehetővé teszi a késleltetések használatát (wrapper az msleep() felett).

A javasolt módosítások lehetővé teszik a Rust használatát második nyelvként a meghajtók és kernel modulok fejlesztéséhez. A Rust támogatása opcionálnak számít, amely alapértelmezés szerint nem aktív, és nem okoz Rust kötelező build-függőségek közé sorolását a kernelhez. A Rust használata a meghajtók fejlesztése során minimális erőfeszítéssel teszi lehetővé biztonságosabb és jobb minőségű meghajtók létrehozását, megszabadítva azokat az olyan problémáktól, mint a memória területének hozzáférése a felszabadítás után, a null pointerek dereferálása és a puffertúllépés.

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.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster