Miguel Ojeda, autor del proyecto Rust-for-Linux, ha propuesto a los desarrolladores del núcleo de Linux la publicación de la versión v5 de los componentes para el desarrollo de controladores de dispositivos en el lenguaje Rust. Esta es la sexta edición de los parches, teniendo en cuenta la primera versión, que fue publicada sin número de versión. El soporte para Rust se considera experimental, pero ya está incluido en la rama linux-next y está lo suficientemente desarrollado como para comenzar a trabajar en la creación de capas de abstracción sobre los subsistemas del núcleo, así como para escribir controladores y módulos. 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 promueve HTTPS y el desarrollo de tecnologías para mejorar la seguridad de internet.
Recordemos que los cambios propuestos permiten usar Rust como segundo lenguaje para el desarrollo de controladores y módulos del núcleo. El soporte para Rust se presenta como una opción, no activada por defecto y no provoca la inclusión de Rust entre las dependencias de construcción obligatorias del núcleo. Usar Rust para el desarrollo de controladores permitirá crear controladores seguros y de mayor calidad con un esfuerzo mínimo, libre de problemas como el acceso a áreas de memoria después de su liberación, la desreferencia de punteros nulos y la salida de los límites del búfer.
El manejo seguro de la memoria se garantiza en Rust durante la compilación a través de la verificación de referencias, el seguimiento de la propiedad de los objetos y la consideración del tiempo de vida de los objetos (áreas de visibilidad), así como mediante la evaluación de la corrección del acceso a la memoria durante la ejecución del código. Rust también proporciona medios para proteger contra desbordamientos enteros, requiere la inicialización obligatoria de los valores de las variables antes de su uso, maneja mejor los errores en la biblioteca estándar, aplica el concepto de inmutabilidad (immutable) de referencias y variables por defecto, y ofrece una fuerte tipificación estática para minimizar errores lógicos.
En la nueva versión de los parches, se continúa abordando las observaciones realizadas durante la discusión de las primeras, segunda, tercera, cuarta y quinta ediciones de los parches. En la nueva versión:
- El kit de herramientas se ha actualizado a la versión Rust 1.59.0. La nueva versión de Rust también ha sincronizado la versión de la biblioteca alloc, eliminando las posibles generaciones de estados de "panic" al producirse errores, como la falta de memoria. Se ha estabilizado la posibilidad de utilizar inserciones en ensamblador ("feature(global_asm)").
- Se ha añadido soporte para crear programas anfitriones en el lenguaje Rust, que se utilizan en el proceso de compilación del núcleo.
- En lugar de proporcionar archivos precreados con la especificación de plataformas objetivo, se ha asegurado su generación dinámica basada en la configuración del núcleo.
- Se ha añadido el parámetro del núcleo HAVE_RUST, que se activa para arquitecturas que son compatibles con Rust.
- Se han propuesto abstracciones para su uso en el código en el lenguaje Rust del generador de números pseudoaleatorios.
- Se permite el uso de códigos de error sin el prefijo "Error::" (por ejemplo, "return Err(EINVAL)") para acercarse al manejo de códigos de error en C.
- Se ha añadido el tipo "CString" para cadenas de C personalizadas. Se han combinado los tipos Formatter y Buffer.
- Se han añadido los rasgos Bool y LockInfo.
- Se ha simplificado la implementación de spin-locks.
Fuente: opennet.ru
