Ya fue publicada la tercera version de los parches para el soporte de controladores Rust en Linux

Seis meses después de la publicación de la segunda versión, Miguel Ojeda, autor del proyecto Rust-for-Linux, dio a conocer la propuesta de la tercera opción para el desarrollo de controladores de dispositivos en lenguaje Rust en el Kernel de Linux.

El soporte de Rust se considera experimental, pero ya se ha acordado su inclusión en la rama linux-next. El desarrollo está financiado por Google y la organización ISRG (Internet Security Research Group), que es la fundadora del proyecto Let’s Encrypt y contribuye a la promoción de HTTPS y al desarrollo de tecnologías para mejorar la seguridad de Internet.

Cabe recordara que los cambios propuestos permiten utilizar Rust como segundo lenguaje para desarrollar controladores y módulos del kernel.

Controladores Rust en Linux
Artículo relacionado:
Ya fue enviada la segunda versión de los parches para el soporte de controladores Rust en Linux

El soporte de Rust se anuncia como una opción que no está activa de forma predeterminada y no da como resultado que Rust se incluya en las dependencias de compilación básicas requeridas. El uso de Rust para el desarrollo de controladores le permitirá crear controladores mejores y más seguros con un esfuerzo mínimo, sin problemas como acceder a un área de memoria una vez liberada, desreferenciar punteros nulos y exceder los límites del búfer.

La nueva versión de los parches continúa eliminando los comentarios hechos durante la discusión de la primera y segunda versión de los parches y de los cambios más notables podremos encontrar:

Se ha llevado a cabo la transición al uso de la versión estable de Rust 1.57 como compilador de referencia y se ha asegurado la vinculación a la edición estabilizada del lenguaje Rust 2021.  La transición a la especificación Rust 2021 permitió comenzar a trabajar para evitar el uso de características tan inestables en parches como const_fn_transmute, const_panic, const_unreachable_unchecked y core_panic y try_reserve.

Ademas se destaca que se ha continuado con el desarrollo de la versión del alloc de la biblioteca Rust, en la nueva versión, las opciones «no_rc» y «no_sync» se implementan para deshabilitar la funcionalidad que no se usa en el código de Rust para el kernel, haciendo que la biblioteca sea más modular. Continuamos trabajando con los principales desarrolladores de alloc para traer los cambios necesarios para el kernel a la biblioteca principal. La opción «no_fp_fmt_parse», que es necesaria para que la biblioteca funcione en el nivel del kernel, se ha movido a la biblioteca básica de Rust (núcleo).

Se limpió el código para eliminar posibles advertencias del compilador al compilar el kernel en modo CONFIG_WERROR. Cuando se crea código en Rust, se incluyen modos de compilador de diagnóstico adicionales y advertencias de linter Clippy.

Se proponen abstracciones para usar seqlocks (bloqueos de secuencia), llamadas de devolución de llamada para administración de energía, memoria de E/S (readX/writeX), manejadores de interrupciones y subprocesos, GPIO, acceso a dispositivos, controladores y credenciales en código Rust.

Se han ampliado las herramientas para el desarrollo de controladores con el uso de mutex reubicables, iteradores de bits, enlaces simplificados sobre punteros, diagnósticos mejorados de fallas e infraestructura independiente del bus de datos.

Se mejoró el trabajo con enlaces usando el tipo Ref simplificado, basado en el backend refcount_t, que usa la API central del mismo nombre para contar referencias. El soporte para los tipos Arc y Rc proporcionados en la biblioteca de asignación estándar se ha eliminado y no está disponible en el código ejecutado a nivel del kernel (para la biblioteca en sí, se han preparado opciones para deshabilitar estos tipos).

Se ha agregado a los parches una versión del controlador PL061 GPIO, reescrito en Rust. Una característica del controlador es que su implementación casi línea por línea repite el controlador C GPIO existente. Para los desarrolladores que quieran familiarizarse con la creación de controladores en Rust, se ha preparado una comparación línea por línea, que permite comprender en qué construcciones en Rust se ha convertido el código C.

El código base principal de Rust adopta rustc_codegen_gcc , un backend rustc para GCC que implementa la compilación AOT usando la biblioteca libgccjit. Con el desarrollo adecuado del backend, le permitirá recopilar el código Rust involucrado en el núcleo usando GCC.
Además de ARM, Google y Microsoft, Red Hat ha expresado interés en utilizar Rust en el kernel de Linux.

Finalmente si estas interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: AB Internet Networks 2008 SL
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.