A hatodik verziója a Linux kernelhez készült Rust támogatással ellátott javításoknak

Miguel Ojeda, a szerzője a Rust-for-Linux projektnek, javasolta a Linux kernel fejlesztői számára a v6 összetevők kiadását, melyek a Rust nyelvű eszközmeghajtók fejlesztésére vonatkoznak. Ez a hetedik kiadása a patch-eknek, figyelembe véve az első verziót, 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 elegendően ki van fejlesztve ahhoz, hogy megkezdődjön az absztrakciós rétegek létrehozása a kernel alrendszerek felett, valamint a meghajtók és modulok írása. A fejlesztést a Google és az ISRG (Internet Security Research Group) finanszírozza, amely a Let’s Encrypt projekt alapítója, és támogatja a HTTPS terjesztését valamint az internet biztonságának növelésére irányuló technológiák fejlesztését.

Az új verzióban:

  • Az eszközkészlet és az alloc könyvtár verziója, amely megszabadít a lehetséges „panic” állapotok generálásától hibaelhárítás közben, frissítve lett a Rust 1.60 kiadásra, amelyben stabilizálták a „maybe_uninit_extra” mód támogatását, amit a kernel patch-eiben használnak.
  • Hozzáadták a lehetőséget a dokumentációban szereplő tesztek futtatására (tesztek, amelyek egyben példák is a dokumentációban), a tesztek fordítási időben történő átalakításán keresztül, amelyek az API-kernelre fektetett, a KUnit tesztekké alakulnak, amelyek a kernel betöltésének időpontjában futnak.
  • Elfogadták azokat a követelményeket, amelyek alapján a tesztek nem okozhatnak figyelmeztetést a Clippy lint előírásai szerint, akárcsak a Rust nyelvű kernel kódja.
  • Javasolták a „net” modul kezdeti megvalósítását a hálózati funkciók számára. A Rust nyelvű kód számára hozzáférést biztosítanak a kernel hálózati struktúráihoz, mint például: „Namespace” (a kernel „struct net” struktúrájára alapozva), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) és azok IPv6 megfelelői.
  • Megvalósították a kezdeti támogatást az aszinkron programozási módszerekhez (async), amely a kasync modul formájában került megvalósításra. Például aszinkron módon működő kódot hozhatunk létre TCP-socketek manipulálására: async fn echo_server(stream: TcpStream) -> Result { let mut buf = [0u8; 1024]; loop { let n = stream.read(&mut buf).await?; if n == 0 { return Ok(()); } stream.write_all(&buf[..n]).await?; } }
  • Hozzáadták a net::filter modult, amely a hálózati csomagok szűrésével foglalkozik. Megjelent a rust_netfilter.rs példa, amely a Rust nyelvén írt szűrőt valósít meg.
  • Hozzáadva a smutex::Mutex egyszerű megvalósítása, amely nem igényel kötést (pinning).
  • Hozzáadva a NoWaitLock zár, amely soha nem okoz várakozást, és ha egy másik szál használja, hibaüzenetet ad vissza a zárolás megszerzésének megkísérlésekor ahelyett, hogy leállítaná a hívót.
  • Hozzáadva a RawSpinLock zár, amely a kernelben szereplő raw_spinlock_t-nek felel meg, és olyan szakaszokhoz alkalmazható, amelyek nem várakozhatnak.
  • Hozzáadva az ARef típus, amely a referenciák számolásának mechanizmusát alkalmazza (mindig számolt).
  • A rustc_codegen_gcc háttérrendszerében, amely lehetővé teszi a GCC projekt libgccjit könyvtárának használatát kódgenerátorként a rustc számára, az elérhető GCC architektúrák és optimalizálások támogatásának biztosítására, megvalósult a rustc fordító (bootstrapping) ciklusának lehetősége. A fordító ciklusa alatt azt értjük, hogy a rustc használhatja a GCC alapú kódgenerátort a rustc compiler saját összeszerelésére. Továbbá a legújabb GCC 12.1 kiadásában javítások kerültek bevezetésre a libgccjit-be, amelyek a rustc_codegen_gcc megfelelő működéséhez szükségesek. Előkészületek folynak a rustc_codegen_gcc rustup segédprogram segítségével történő telepítésének biztosítására.
  • Folyamatban van a GCC-felület gccrs fejlesztése, amely a Rust nyelv compilerének GCC alapú megvalósítása. Jelenleg a gccrs-en teljes munkaidőben dolgozó két fejlesztő van.

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.

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