La tercera edició de pedaços per al nucli de Linux amb suport per al llenguatge Rust

Miguel Ojeda, autor del projecte Rust-for-Linux, ha proposat una tercera opció de component per desenvolupar controladors de dispositiu en el llenguatge Rust perquè els desenvolupadors del nucli Linux tinguin en compte. El suport de Rust es considera experimental, però ja s'ha acordat la inclusió a la branca linux-next. 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.

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.

La nova versió dels pedaços continua eliminant els comentaris fets durant la discussió de la primera i segona versió dels pedaços. Els canvis més notables:

  • S'ha fet una transició a l'ús de la versió estable de Rust 1.57 com a compilador de referència i s'ha proporcionat un enllaç a l'edició estabilitzada del llenguatge Rust 2021. Anteriorment, els pedaços estaven lligats a la branca beta de Rust i utilitzaven algunes característiques del llenguatge que van ser classificats com a inestables. La transició a l'especificació Rust 2021 ens va permetre iniciar treballs per evitar l'ús de funcions tan inestables en pedaços com const_fn_transmute, const_panic, const_unavailable_unchecked i core_panic i try_reserve.
  • El desenvolupament de la versió alloc de la biblioteca Rust inclosa als pedaços ha continuat, modificada per eliminar les funcions d'assignació de memòria de la possible generació de l'estat de "pànic" quan es produeixen errors, com ara sense memòria. La nova versió implementa les opcions "no_rc" i "no_sync" per desactivar la funcionalitat no utilitzada al codi Rust del nucli, fent que la biblioteca sigui més modular. Es continua treballant amb els principals desenvolupadors d'alloc, amb l'objectiu de transferir els canvis necessaris per al nucli a la biblioteca principal. L'opció "no_fp_fmt_parse", necessària perquè la biblioteca funcioni al nivell del nucli, s'ha mogut a la biblioteca base de Rust (núcle).
  • El codi s'ha netejat per desfer-se de possibles advertències del compilador quan es construeix el nucli en mode CONFIG_WERROR. Quan es construeix codi a Rust, s'activen els modes de diagnòstic del compilador addicionals i els avisos de Clippy linter.
  • Es proposen abstraccions per utilitzar-les en codi Rust per a seqlocks (bloquejos de seqüències), trucades de retorn de trucada per a la gestió de l'energia, memòria d'E/S (readX/writeX), controladors d'interrupcions i fils, GPIO, accés a dispositius, controladors i credencials.
  • Les eines per al desenvolupament de controladors s'han ampliat per incloure mutex reubicables, iteradors de bits, enllaços de punters simplificats, diagnòstics d'errors millorats i infraestructura independent del bus de dades.
  • S'ha millorat el treball amb enllaços mitjançant un tipus de ref simplificat, basat en el backend refcount_t, que utilitza l'API del nucli del mateix nom per comptar les referències. S'ha eliminat el suport per als tipus Arc i Rc proporcionats a la biblioteca alloc estàndard i no està disponible en codi executat al nivell del nucli (s'han preparat opcions per a la pròpia biblioteca que desactiven aquests tipus).
  • Els pedaços inclouen una versió del controlador PL061 GPIO, reescrit en Rust. Una característica especial del controlador és que la seva implementació gairebé línia per línia repeteix el controlador GPIO existent en llenguatge C. Per als desenvolupadors que vulguin familiaritzar-se amb la creació de controladors a Rust, s'ha preparat una comparació línia per línia que els permet entendre en quines construccions a Rust es converteix el codi C.
  • La base de codi Rust principal ha adoptat rustc_codegen_gcc, un backend de Rustc per a GCC que implementa la compilació anticipada (AOT) mitjançant la biblioteca libgccjit. Amb un desenvolupament adequat del backend, us permetrà recopilar el codi Rust implicat en el nucli mitjançant GCC.
  • A més d'ARM, Google i Microsoft, Red Hat ha expressat interès en utilitzar el llenguatge Rust al nucli Linux. Recordem que Google dóna suport directament al projecte Rust per a Linux, està desenvolupant una nova implementació del mecanisme de comunicació entre processos de Binder a Rust i està considerant la possibilitat de reelaborar diversos controladors a Rust. Microsoft ha començat a implementar controladors per a Hyper-V a Rust. ARM treballa per millorar el suport de Rust per als sistemes basats en ARM. IBM ha implementat el suport Rust al nucli per als sistemes PowerPC.

Font: opennet.ru

Afegeix comentari