Miguel Ojeda, a Rust-for-Linux projekt szerzője azt javasolta, hogy a Linux kernel fejlesztői megfontolják a v8-as összetevők kiadását az eszközillesztő-fejlesztéshez Rust nyelven. Ez a javítások felülvizsgált változata, az első verzió figyelembevételével, verziószám nélkül megjelent. A Rust támogatás kísérleti jellegűnek tekinthető, de már benne van a linux-next ágban, állítása szerint integrálva van az 5.20/6.0 őszi kiadásába, és elég érett ahhoz, hogy elkezdje a kernel alrendszerek feletti absztrakciós rétegek létrehozását, valamint az írási illesztőprogramokat. és modulok. 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.
Az új verzióban:
- A Rust 1.62 kiadásához frissítve lett az eszközkészlet és az alloc könyvtár egy változata, amely mentes a "pánik" állapot generálásától hiba esetén. A korábban használt verzióhoz képest a Rust eszközkészlet stabilizálta a kernelfoltokban használt const_fn_trait_bound funkciót.
- A kötési kód külön ládacsomag „kötésekre” van szétválasztva, ami leegyszerűsíti az újraépítést, ha csak a fő csomag „kernel”-en történik változtatás.
- A „concat_idents!” makró megvalósítása átírva egy eljárási makró formájában, amely nem kapcsolódik a concat_idents funkcióhoz, és lehetővé teszi a helyi változókra való hivatkozások használatát.
- A „static_assert!” makró átírásra került, lehetővé téve a „core::assert!()” használatát bármilyen környezetben konstansok helyett.
- Makró "build_error!" akkor működik, ha a „RUST_BUILD_ASSERT_{WARN,ALLOW}” mód be van állítva a modulokhoz.
- Hozzáadott egy külön fájlt a „kernel/configs/rust.config” beállításokkal.
- A makróhelyettesítések során feldolgozott „*.i” fájlok „*.rsi”-re lettek átnevezve.
- A C kódhoz használtaktól eltérő optimalizálási szintekkel rendelkező Rust összetevők építésének támogatása megszűnt.
- Hozzáadott fs modul, amely kötéseket biztosít a fájlrendszerekkel való munkához. Példa egy Rust nyelven írt egyszerű fájlrendszerre.
- Hozzáadott munkasor-modul a rendszervárólista-kezeléshez (összerendeléseket biztosít a work_struct és workqueue_struct kernelstruktúrákon).
- A kasync modul fejlesztése az aszinkron programozási módszerek (async) megvalósításával folytatódott. Példa hozzáadva egy Rust nyelven írt magszintű TCP-kiszolgálóra.
- Hozzáadtuk a megszakítások kezelésének lehetőségét a Rust nyelvben a [Threaded] Handler típusok és a [Threaded]Registration` típusok használatával.
- A „#[vtable]” eljárási makró hozzáadása megkönnyíti a függvénymutatókat tartalmazó táblázatokkal való munkavégzést, például a file_operations szerkezettel.
- A kétirányú linkelt listák "unsafe_list::List" megvalósítása hozzáadva.
- Az RCU (Read-copy-update) és a Guard típus kezdeti támogatása hozzáadva annak ellenőrzéséhez, hogy az olvasási zárolás az aktuális szálhoz van-e kötve.
- Feladat::spawn() függvény hozzáadva a kernelszálak létrehozásához és automatikus indításához. Szintén hozzáadta a Task::wake_up() metódust.
- Hozzáadott egy késleltetési modult, amely lehetővé teszi a késleltetések használatát (a wrapper over msleep()).
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 kötelező összeépí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 a felszabadítás utáni memóriahozzáférés, a nulla mutató hivatkozásai és a puffertúllépés.
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.
Forrás: opennet.ru