Miguel Ojeda, a Rust-for-Linux projekt szerzője kiadta a nyolcadik kiadást A Linux kernel-javítások fejlesztése Rust nyelvi támogatással a Linux kernel fejlesztői számára.
Ez a javítások kilencedik kiadása (figyelembe véve az első verziószám nélküli verziót). A rozsdatámogatás kísérleti jellegű, de már benne van a linux-next ágban, igényli az integrációt az 5.20/6.0 őszi kiadásában, és elég fejlett ahhoz, hogy elkezdjen dolgozni a kernel alrendszerek tetején lévő absztrakciós rétegek létrehozásán, valamint vezérlők és modulok írásán.
A fejlesztést a Google és az ISRG finanszírozza (Internet Security Research Group), amely a Let's Encrypt projekt alapítója, és a HTTPS-t és az internet biztonságát növelő technológiák fejlesztését népszerűsíti.
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építési függőségei között. A Rust használata az illesztőprogramok fejlesztésére lehetővé teszi jobb és biztonságosabb illesztőprogramok létrehozását minimális erőfeszítéssel, anélkül, hogy olyan problémákat okozna, mint a memóriaterület elérése a felszabadítás után, a nulla mutatók hivatkozásának megszüntetése és a puffer túlcsordulása.
A memória biztonságát a Rust a fordítási időben biztosítja a hivatkozások ellenőrzésével, az objektum tulajdonjogának és az objektum élettartamának (hatókörének) követésével, valamint a memória-elérés helyességének értékelésével a kód végrehajtása során.
Mi az új ebben a nyolcadik kiadásban?
Ebben az új, közzétett javaslatban ez szerepel az alloc könyvtár változat, amely kiküszöbölte a hibák esetleges "pánik" állapotát, frissítve a Rust 1.62-es verziójára. Az előző verzióhoz képest a Rust eszközkészlet stabilizálta a kernelfoltokban használt const_fn_trait_bound funkciót.
Amellett a kötési kód egy köteg „kötés” dobozra van szétválasztva külön-külön, ami megkönnyíti az újraépítést, ha csak a fő kernelcsomagot módosítjuk.
A a "concat_idents!" makró megvalósítása, Átírva eljárási makróként, nem kötődik a concat_idents funkcióhoz, és lehetővé teszi a helyi változóhivatkozások használatát.
Ezen kívül megemlítik, hogy a makró "static_assert!" át lett írva, hogy engedélyezze a "core::assert!()" konstansok helyett tetszőleges kontextusban használatos, míg a "construction_error!" a modulok "RUST_BUILD_ASSERT_{WARN,ALLOW}" módban való működéséhez lett igazítva.
fs modul hozzáadva amely hivatkozásokat biztosít a fájlrendszerekkel való munkához. A javaslat egy egyszerű, Rust nyelven írt fájlrendszerre, valamint a rendszervárólistákhoz hozzáadott jobsor-modulra van példa.
A többi változás közül amelyek kiemelkednek ebből az új javaslatból:
- Hozzáadott egy külön konfigurációs fájlt "kernel/configs/rust.config".
- A makrócsere során feldolgozott "*.i" fájlok átnevezték "*.rsi"-re.
- Eltávolítottuk a Rust komponensek építésének támogatását a C kódhoz használtaktól eltérő optimalizálási szintekkel.
- A kasync modul fejlesztése az aszinkron programozási módszerek (async) megvalósításával folytatódott.
- Hozzáadtunk egy példát egy Rust nyelven írt kernel szintű TCP szerverre, és hozzáadtuk a Rust megszakítások kezelésének képességét.
- Eljárásmakrót adtunk hozzá, hogy megkönnyítsük a funkciómutató táblákkal való munkát, például a file_operations szerkezettel.
- Hozzáadott kétirányú linkelt lista megvalósítása "unsafe_list::List".
- Kezdeti támogatás hozzáadva az RCU-hoz és a Guard típushoz annak ellenőrzésére, hogy olvasási zár van-e kötve az aktuális szálhoz.
- Feladat::spawn() függvény hozzáadva a kernelszálak automatikus indításához.
- A Task::wake_up() metódus is hozzáadásra került.
- Késleltető modul hozzáadva
Végül ha érdekel, hogy többet tudjon meg róla, ellenőrizheti a részleteket A következő linken.