La vuitena versió dels 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 v8 per desenvolupar controladors de dispositius en el llenguatge Rust per a la consideració dels desenvolupadors del nucli de Linux. Aquesta és la versió revisada dels pedaços, tenint en compte la primera versió, publicada sense un número de versió. El suport de Rust es considera experimental, però ja s'inclou a la branca linux-next, afirma estar integrat a la versió de tardor de 5.20/6.0 i és prou madur 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, lliure de la possible generació d'un estat de "pànic" quan es produeixen errors, s'han actualitzat per al llançament de Rust 1.62. En comparació amb la versió utilitzada anteriorment, el conjunt d'eines Rust ha estabilitzat el suport per a la funcionalitat const_fn_trait_bound utilitzada als pedaços del nucli.
  • El codi d'enllaç es divideix en un paquet de caixa separat "bindings", que simplifica la reconstrucció si només es fan canvis al paquet principal "kernel".
  • Implementació de la macro “concat_idents!” reescrita en forma de macro procedimental que no està lligada a la funcionalitat concat_idents i permet l'ús de referències a variables locals.
  • La macro "static_assert!" s'ha reescrit, permetent l'ús de "core::assert!()" en qualsevol context en lloc de constants.
  • Macro "build_error!" adaptat per funcionar quan el mode "RUST_BUILD_ASSERT_{WARN,ALLOW}" està configurat per als mòduls.
  • S'ha afegit un fitxer separat amb la configuració "kernel/configs/rust.config".
  • Els fitxers "*.i" processats en substitucions de macros s'han canviat de nom a "*.rsi".
  • S'ha deixat de suportar la creació de components Rust amb nivells d'optimització diferents dels utilitzats per al codi C.
  • S'ha afegit el mòdul fs, que proporciona enllaços per treballar amb sistemes de fitxers. Es proporciona un exemple d'un sistema de fitxers senzill escrit en Rust.
  • S'ha afegit un mòdul de workqueue per treballar amb cues del sistema (proporciona enllaços sobre les estructures del nucli work_struct i workqueue_struct).
  • El desenvolupament del mòdul kasync va continuar amb la implementació de mètodes de programació asíncrona (async). S'ha afegit un exemple de servidor TCP de nivell bàsic escrit en Rust.
  • S'ha afegit la capacitat de gestionar interrupcions en el llenguatge Rust mitjançant els tipus [Threaded]Handler i [Threaded]Registration`.
  • S'ha afegit la macro de procediment "#[vtable]" per facilitar el treball amb taules de punters de funció, com ara l'estructura file_operations.
  • S'ha afegit la implementació de llistes enllaçades bidireccionals "unsafe_list::List".
  • S'ha afegit suport inicial per a RCU (Read-copy-update) i el tipus Guard per comprovar si un bloqueig de lectura està lligat al fil actual.
  • S'ha afegit la funció Task::spawn() per crear i iniciar automàticament fils del nucli. També s'ha afegit el mètode Task::wake_up().
  • S'ha afegit un mòdul de retard que us permet utilitzar retards (un embolcall sobre msleep()).

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