Pegats del nucli de la tercera edició Linux amb suport per al llenguatge Rust

Miguel Ojeda, autor del projecte Rust-for-Linux, proposat per a la seva consideració pels desenvolupadors del nucli Linux La tercera versió dels components per al desenvolupament de controladors de dispositius en Rust. El suport per a Rust es considera experimental, però ja s'ha aprovat per a la seva inclusió a la branca linux-next. El desenvolupament està finançat per Google i ISRG (Internet Security Research Group), el fundador del projecte Let's Encrypt, que 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, hi ha interès en utilitzar el llenguatge Rust al nucli. Linux Red Hat va dir. Com a recordatori, Google dóna suport directe al projecte Rust per a Linux, està desenvolupant una nova implementació del mecanisme de comunicació entre processos de Binder a Rust i està considerant reescriure diversos controladors a Rust. Microsoft ha començat a implementar controladors per a Hyper-V a Rust. ARM està treballant per millorar la compatibilitat amb Rust per a sistemes basats en processadors ARM. IBM ha implementat la compatibilitat amb Rust al nucli per a sistemes PowerPC.

Font: opennet.ru

Compreu allotjament fiable per a llocs amb protecció DDoS, servidors VPS VDS 🔥 Compra allotjament web fiable amb protecció DDoS, servidors VPS VDS | ProHoster