A terceira edición de parches para o núcleo de Linux con soporte para a linguaxe Rust

Miguel Ojeda, autor do proxecto Rust-for-Linux, propuxo unha opción de terceiro compoñente para desenvolver controladores de dispositivos na linguaxe Rust para que os desenvolvedores do núcleo de Linux a consideren. O soporte de Rust considérase experimental, pero xa se acordou para a súa inclusión na rama linux-next. O desenvolvemento está financiado por Google e o ISRG (Internet Security Research Group), que é o fundador do proxecto Let's Encrypt e promove o HTTPS e o desenvolvemento de tecnoloxías para mellorar a seguridade en Internet.

Lembre que os cambios propostos permiten utilizar Rust como segunda linguaxe para desenvolver controladores e módulos do núcleo. O soporte de Rust preséntase como unha opción que non está activada por defecto e non fai que Rust se inclúa como unha dependencia de compilación necesaria para o núcleo. Usar Rust para o desenvolvemento de controladores permitirache crear controladores máis seguros e mellores cun mínimo esforzo, libre de problemas como o acceso á memoria despois da liberación, desreferencias de punteiro nulo e desbordamentos do búfer.

O manexo seguro para a memoria ofrécese en Rust no momento da compilación mediante a comprobación de referencias, o seguimento da propiedade do obxecto e a súa vida útil (alcance), así como a través da avaliación da corrección do acceso á memoria durante a execución do código. Rust tamén ofrece protección contra desbordamentos de enteiros, require a inicialización obrigatoria dos valores variables antes do seu uso, manexa mellor os erros na biblioteca estándar, aplica o concepto de referencias e variables inmutables por defecto, ofrece unha forte escritura estática para minimizar os erros lóxicos.

A nova versión dos parches segue eliminando os comentarios feitos durante a discusión da primeira e segunda versións dos parches. Os cambios máis notables:

  • Fíxose unha transición ao uso da versión estable de Rust 1.57 como compilador de referencia e proporcionouse unha ligazón á edición estabilizada da linguaxe Rust 2021. Anteriormente, os parches estaban vinculados á rama beta de Rust e utilizaban algunhas funcións da linguaxe que foron clasificados como inestables. A transición á especificación Rust 2021 permitiunos comezar a traballar para evitar o uso de funcións tan inestables en parches como const_fn_transmute, const_panic, const_unavailable_unchecked e core_panic e try_reserve.
  • Continuou o desenvolvemento da versión alloc da biblioteca Rust incluída nos parches, modificada para eliminar as funcións de asignación de memoria da posible xeración do estado "pánico" cando se producen erros, como falta de memoria. A nova versión implementa as opcións "no_rc" e "no_sync" para desactivar a funcionalidade non utilizada no código Rust do núcleo, facendo a biblioteca máis modular. Continúa o traballo cos principais desenvolvedores de alloc, co obxectivo de transferir os cambios necesarios para o núcleo á biblioteca principal. A opción "no_fp_fmt_parse", necesaria para que a biblioteca funcione a nivel do núcleo, moveuse á biblioteca base de Rust (núcleo).
  • O código foi limpo para desfacerse dos posibles avisos do compilador ao construír o núcleo en modo CONFIG_WERROR. Ao crear código en Rust, habilitáronse os modos de diagnóstico do compilador adicionais e as advertencias de Clippy linter.
  • As abstraccións propóñense para o seu uso en código Rust para seqlocks (bloqueos de secuencia), chamadas de devolución de chamada para xestión de enerxía, memoria de E/S (readX/writeX), controladores de interrupcións e fíos, GPIO, acceso a dispositivos, controladores e credenciais.
  • As ferramentas para o desenvolvemento de controladores ampliáronse para incluír mutex reubicables, iteradores de bits, enlaces de punteiros simplificados, diagnósticos de fallos mellorados e infraestrutura independente do bus de datos.
  • Mellorouse o traballo coas ligazóns mediante un tipo de Ref simplificado, baseado no backend refcount_t, que utiliza a API do núcleo do mesmo nome para contar referencias. Eliminouse o soporte para os tipos Arc e Rc proporcionados na biblioteca alloc estándar e non está dispoñible no código executado a nivel do núcleo (preparáronse opcións para a propia biblioteca que desactivan estes tipos).
  • Os parches inclúen unha versión do controlador PL061 GPIO, reescrita en Rust. Unha característica especial do controlador é que a súa implementación case liña por liña repite o controlador GPIO existente na linguaxe C. Para os desenvolvedores que queiran familiarizarse coa creación de controladores en Rust, preparouse unha comparación liña por liña que lles permite comprender en que construcións se converte o código C en Rust.
  • A base de código principal de Rust adoptou rustc_codegen_gcc, un backend de Rustc para GCC que implementa a compilación anticipada (AOT) usando a biblioteca libgccjit. Cun desenvolvemento axeitado do backend, permitirache recoller o código Rust implicado no núcleo usando GCC.
  • Ademais de ARM, Google e Microsoft, Red Hat expresou interese en usar a linguaxe Rust no núcleo de Linux. Lembremos que Google ofrece soporte directamente para o proxecto Rust para Linux, está a desenvolver unha nova implementación do mecanismo de comunicación entre procesos de Binder en Rust e está considerando a posibilidade de reelaborar varios controladores en Rust. Microsoft comezou a implementar controladores para Hyper-V en Rust. ARM traballa para mellorar a compatibilidade de Rust para os sistemas baseados en ARM. IBM implementou soporte do núcleo para Rust para sistemas PowerPC.

Fonte: opennet.ru

Engadir un comentario