A sesta versione di patches per u kernel Linux cù supportu per a lingua Rust

Miguel Ojeda, autore di u prughjettu Rust-for-Linux, hà prupostu a liberazione di cumpunenti v6 per u sviluppu di i drivers di u dispositivu in a lingua Rust per cunsiderazione da i sviluppatori di u kernel Linux. Questa hè a settima edizione di i patches, tenendu in contu a prima versione, publicata senza un numeru di versione. U supportu Rust hè cunsideratu sperimentale, ma hè digià inclusu in u ramu linux-next è hè abbastanza sviluppatu per inizià u travagliu nantu à a creazione di strati di astrazione nantu à i sottosistemi di kernel, è ancu di scrive drivers è moduli. U sviluppu hè finanzatu da Google è l'ISRG (Internet Security Research Group), chì hè u fundatore di u prughjettu Let's Encrypt è prumove HTTPS è u sviluppu di tecnulugia per migliurà a sicurità Internet.

In a nova versione:

  • U toolkit è una variante di a libreria alloc, liberata da a pussibilità di generazione di un statu di "panicu" quandu l'errore accade, sò stati aghjurnati à a liberazione di Rust 1.60, chì stabilizza u supportu per u modu "maybe_uninit_extra" utilizatu in patches di kernel.
  • Aggiunta l'abilità di eseguisce testi da a documentazione (testi chì sò ancu usati com'è esempi in a documentazione), attraversu a cunversione in tempu di compilazione di testi ligati à l'API di u kernel in testi KUnit eseguiti durante a carica di u kernel.
  • I requisiti sò stati aduttati chì e teste ùn devenu micca risultatu in un avvisu Clippy linter, cum'è u codice di u kernel Rust.
  • Hè pruposta una implementazione iniziale di u modulu "net" cù funzioni di rete. U codice Rust hà accessu à e strutture di rete di kernel, cum'è Namespace (basatu nantu à a struttura di nucleu struct net), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) è i so equivalenti IPv6. .
  • Ci hè un supportu iniziale per e tecniche di prugrammazione asincrona (async), implementate in a forma di u modulu kasync. Per esempiu, pudete scrive codice asincronu per manipulà i sockets TCP: async fn echo_server (stream: TcpStream) -> Result { let mut buf = [0u8; 1024]; loop {let n = stream.read(&mut buf).attendu?; if n == 0 { return Ok (()); } stream.write_all(&buf[..n]).wait?; } }
  • Added net::filter module per manipulà i filtri di pacchetti di rete. Added example rust_netfilter.rs cù una implementazione di filtru in a lingua Rust.
  • Aggiunta l'implementazione di un mutex smutex::Mutex simplice, chì ùn hà micca bisognu di pinning.
  • Added NoWaitLock, chì ùn aspetta mai una serratura, è s'ellu hè occupatu da un altru filu, pruvucarà un errore per esse signalatu quandu pruvate d'acquistà a serratura invece di piantà u chjamante.
  • Aggiuntu RawSpinLock, identificatu da raw_spinlock_t in u kernel, per applicà à e rùbbriche chì ùn ponu micca esse inattive.
  • U tipu ARef aghjuntu per i riferimenti à un oggettu à quale hè applicatu u mecanismu di cunti di riferimentu (sempre-refcounted).
  • U backend di rustc_codegen_gcc, chì permette di utilizà a libreria libgccjit da u prughjettu GCC cum'è generatore di codice in rustc per furnisce u rustc cù supportu per l'architetture è ottimisazioni dispunibili in GCC, hà implementatu a capacità di bootstrapping u compilatore rustc. A prumuzione di u compilatore significa a capacità di utilizà un generatore di codice basatu in GCC in rustc per custruisce u compilatore rustc stessu. Inoltre, a liberazione recente di GCC 12.1 include correzioni à libgccjit necessariu per rustc_codegen_gcc per travaglià bè. I preparativi sò in corso per furnisce l'abilità di installà rustc_codegen_gcc cù l'utilità rustup.
  • U prugressu in u sviluppu di u GCC frontend gccrs cù l'implementazione di u compilatore di lingua Rust basatu annantu à GCC hè nutatu. Ci sò attualmente dui sviluppatori full-time chì travaglianu in gccrs.

Ricurdativi chì i cambiamenti pruposti permettenu di utilizà Rust cum'è una seconda lingua per u sviluppu di drivers è moduli di kernel. U supportu di Rust hè presentatu cum'è una opzione chì ùn hè micca attivata per automaticamente è ùn hà micca risultatu in l'inclusione di Rust trà e dipendenze di custruzzione necessarie per u kernel. Utilizà Rust per sviluppà i drivers vi permetterà di creà drivers più sicuri è megliu cù u minimu sforzu, senza prublemi cum'è l'accessu à una zona di memoria dopu chì hè liberatu, dereferencing null pointers, è buffer overruns.

A gestione sicura di a memoria hè furnita in Rust à u tempu di compilazione attraversu a verificazione di riferimentu, tenendu traccia di a pruprietà di l'ughjettu è a vita di l'ughjettu (scopu), è ancu per a valutazione di a correttezza di l'accessu di memoria durante l'esekzione di codice. Rust furnisce ancu prutezzione contra i overflows integer, esige l'inizializazione obligatoria di i valori variabili prima di l'usu, gestisce l'errori megliu in a biblioteca standard, applica u cuncettu di referenze immutabili è variabili per difettu, offre una forte tipografia statica per minimizzà l'errori lògichi.

Source: opennet.ru

Add a comment