Linux 6.1 hace historia introduciendo a Rust como el segundo lenguaje de programación en el Kernel
Linus Torvalds dio a conocer mediante un anunció la disponibilidad de la nueva versión del kernel de Linux 6.1. La cual tal vez sea una de las versiones más importantes lanzada durante los últimos 30 años y es que lo que hace a este lanzamiento tan especial es que a partir de esta versión se introduce un segundo lenguaje para el desarrollo del kernel, que es el lenguaje Rust.
Como tal Rust solo está obteniendo una API oficial para permitir el desarrollo de módulos o pilotos separados para Linux. Esto quiere decir que la apertura del kernel de Linux a este lenguaje sigue su curso con la consecuencia de que el desguace del lenguaje C no está previsto para mañana. No obstante, es un cambio que tiene su origen en la disponibilidad y competencias de los terceros que intervienen en el desarrollo del núcleo.
Principales novedades de Linux 6.1
La mayor innovación de Linux 6.1 es la llegada de Rust, ya que durante varios años, se ha trabajado detrás de escena para hacer que el kernel se ajuste al lenguaje de programación emergente. En el futuro, debería ser posible no solo programar módulos en C, sino también en Rust.
En el estado actual solo permite compilar, cargar y descargar un módulo de ejemplo muy simple. Como primer paso, Linus Torvalds solo quería un simple «¡Hola, mundo!». Por lo tanto, otros módulos útiles y, sobre todo, no son posibles en Rust en el núcleo actual. Sin embargo, el nuevo kernel ofrece una primera idea de cómo se integra Rust y qué desafíos deben superarse.
Otra de las novedades que implementa esta nueva versión de Linux 6.1 es la compatibilidad con AMD Platform Management Framework, que garantiza mejoras de rendimiento con varias CPU de AMD (Central Processing Units).
AMD Platform Management Framework también íntegra soporte para AMT (transición de modo automático) y para CnQF (Cool and Quiet Framework). A partir de esta actualización, los usuarios de la distribución esencialmente tendrán acceso a una gestión más profunda y completa de la energía y la temperatura.
Ademas de ello, tambien podremos encontrar que se incluye el mecanismo MGLRU (LRU multigeneracional), que reemplazó la antigua implementación LRU (Usados menos recientemente) basada en dos colas con una estructura de varias etapas que determina mejor qué páginas de memoria se usan realmente y cuáles se pueden forzar a salir de la partición de intercambio.
Se agregó soporte para la estructura de datos de «maple tree» propuesta por los ingenieros de Oracle, que se posiciona como un reemplazo más eficiente para la estructura de «red-black tree». Maple tree es una variante del árbol B que admite la indexación de rangos y está diseñado para hacer un uso eficiente de la memoria caché de los procesadores modernos. Algunos subsistemas de gestión de memoria ya se han transferido al árbol de arce, lo que tiene un efecto positivo en su rendimiento. En el futuro, el árbol de arce puede usarse para implementar el bloqueo de rango.
Tambien se destaca en Linux 6.1 que se agregó una llamada especial para la asignación de memoria en los programas BPF (asignador de memoria), que proporciona una asignación de memoria más segura en el contexto BPF que el kmalloc() normal. La primera parte de los cambios se ha integrado, brindando la capacidad de crear controladores para dispositivos de entrada con la interfaz HID (Human Interface Device), implementados en forma de programas BPF. El código se eliminó por completo del kernel para admitir el formato de archivo ejecutable a.out, que quedó obsoleto en la versión 5.1 y, desde las versiones 5.18 y 5.19, se deshabilitó para las principales arquitecturas.
El formato a.out no se ha utilizado en los sistemas Linux durante mucho tiempo, y las herramientas modernas no admiten la generación de archivos a.out en las configuraciones predeterminadas de Linux. El cargador de archivos a.out se puede implementar completamente en el espacio del usuario.
Se reemplazó la implementación del mecanismo de protección CFI (Control Flow Integrity), agregando verificaciones antes de cada llamada de función indirecta para identificar algunas formas de comportamiento indefinido que potencialmente pueden conducir a una violación del orden de ejecución normal (control de flujo) como resultado de utilizando exploits que cambian los punteros de función almacenados en la memoria.
La implementación regular de CFI del proyecto LLVM ha sido reemplazada por una variante , también basada en el uso de Clang, pero especialmente adaptada para proteger subsistemas de bajo nivel y kernels de sistemas operativos. En LLVM se propondrá una nueva implementaciónen la versión Clang 16 y se habilitará con la opción «-fsanitize=kcfi».
La diferencia clave de la nueva implementación es que no está vinculada a optimizaciones de tiempo de enlace (LTO) y no da como resultado el reemplazo de punteros de función con enlaces en la tabla de salto.
De los demás cambios que se destacan
- Para los módulos LSM (Módulo de seguridad de Linux), se proporciona la capacidad de crear controladores que intercepten operaciones para crear espacios de nombres.
- Proporcionó herramientas para verificar firmas digitales PKCS#7 en programas BPF.
- /dev/random devolvió la capacidad de abrir en modo sin bloqueo (O_NONBLOCK), que se eliminó inadvertidamente en el kernel 5.6.
- Se agregó una advertencia en los sistemas x86 cuando los subsistemas del kernel asignan páginas de memoria que son tanto ejecutables como de escritura. En el futuro, se considera la posibilidad de prohibir por completo dicho mapeo de memoria.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.