La sisena versió de pedaços per al nucli de Linux amb suport per al llenguatge Rust

Miguel Ojeda, autor del projecte Rust-for-Linux, va proposar el llançament de components v6 per desenvolupar controladors de dispositius en el llenguatge Rust per a la consideració dels desenvolupadors del nucli de Linux. Aquesta és la setena edició dels pegats, tenint en compte la primera versió, publicada sense número de versió. El suport de Rust es considera experimental, però ja està inclòs a la branca linux-next i està prou desenvolupat per començar a treballar en la creació de capes d'abstracció sobre subsistemes del nucli, així com per escriure controladors i mòduls. El desenvolupament està finançat per Google i l'ISRG (Internet Security Research Group), que és el fundador del projecte Let's Encrypt i promou HTTPS i el desenvolupament de tecnologies per millorar la seguretat a Internet.

En la nova versió:

  • El conjunt d'eines i una variant de la biblioteca alloc, alliberada de la possible generació d'un estat de "pànic" quan es produeixen errors, s'han actualitzat al llançament de Rust 1.60, que estabilitza el suport per al mode "maybe_uninit_extra" utilitzat en els pedaços del nucli.
  • S'ha afegit la possibilitat d'executar proves des de la documentació (proves que també s'utilitzen com a exemples a la documentació), mitjançant la conversió en temps de compilació de proves vinculades a l'API del nucli en proves KUnit executades durant la càrrega del nucli.
  • S'han adoptat els requisits que les proves no haurien de donar lloc a un avís de Clippy linter, igual que el codi del nucli de Rust.
  • Es proposa una implementació inicial del mòdul “net” amb funcions de xarxa. El codi Rust té accés a estructures de xarxa del nucli com ara Namespace (basat en l'estructura del nucli struct net), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) i els seus equivalents IPv6 .
  • Hi ha suport inicial per a tècniques de programació asíncrona (async), implementades en forma de mòdul kasync. Per exemple, podeu escriure codi asíncron per manipular els sòcols TCP: async fn echo_server(stream: TcpStream) -> Result { let mut buf = [0u8; 1024]; bucle { let n = stream.read(&mut buf).esperar?; if n == 0 { retornar Ok(()); } stream.write_all(&buf[..n]).wait?; } }
  • S'ha afegit el mòdul net::filter per manipular els filtres de paquets de xarxa. S'ha afegit un exemple rust_netfilter.rs amb una implementació de filtre en el llenguatge Rust.
  • S'ha afegit la implementació d'un simple mutex smutex::Mutex, que no requereix fixació.
  • S'ha afegit NoWaitLock, que mai espera un bloqueig i, si està ocupat per un altre fil, fa que s'informa d'un error quan s'intenta adquirir el bloqueig en lloc d'aturar la persona que truca.
  • S'ha afegit RawSpinLock, identificat per raw_spinlock_t al nucli, per aplicar-lo a les seccions que no poden estar inactives.
  • S'ha afegit el tipus ARef per a referències a un objecte al qual s'aplica el mecanisme de recompte de referències (sempre-recompte).
  • El backend rustc_codegen_gcc, que us permet utilitzar la biblioteca libgccjit del projecte GCC com a generador de codi a rustc per proporcionar a rustc suport per a arquitectures i optimitzacions disponibles a GCC, ha implementat la capacitat d'arrencar el compilador rustc. La promoció del compilador significa la possibilitat d'utilitzar un generador de codi basat en GCC a rustc per crear el compilador rustc. A més, el llançament recent de GCC 12.1 inclou correccions a libgccjit necessàries perquè rustc_codegen_gcc funcioni correctament. S'estan preparant per oferir la possibilitat d'instal·lar rustc_codegen_gcc mitjançant la utilitat rustup.
  • S'observa el progrés en el desenvolupament dels gccrs frontend GCC amb la implementació del compilador de llenguatge Rust basat en GCC. Actualment hi ha dos desenvolupadors a temps complet treballant en gccrs.

Recordem que els canvis proposats permeten utilitzar Rust com a segon llenguatge per desenvolupar controladors i mòduls del nucli. El suport de Rust es presenta com una opció que no està activada per defecte i que no comporta la inclusió de Rust entre les dependències de construcció necessàries per al nucli. L'ús de Rust per desenvolupar controladors us permetrà crear controladors més segurs i millors amb el mínim esforç, lliures de problemes com ara accedir a una àrea de memòria després d'alliberar-la, desreferenciar els punters nuls i desbordar la memòria intermèdia.

La seguretat de la memòria es proporciona a Rust en temps de compilació mitjançant la comprovació de referències, el seguiment de la propietat i la vida útil de l'objecte (abast), així com mitjançant l'avaluació de la correcció de l'accés a la memòria durant l'execució del codi. Rust també proporciona protecció contra desbordaments d'enters, requereix la inicialització obligatòria dels valors de les variables abans de l'ús, gestiona millor els errors a la biblioteca estàndard, aplica el concepte de referències i variables immutables per defecte, ofereix una escriptura estàtica forta per minimitzar els errors lògics.

Font: opennet.ru

Afegeix comentari