Rust en Linux dónde estamos y hacia dónde nos dirigimos a continuación

Rust en Linux ¿Dónde estamos y hacia dónde nos dirigimos ahora?

Logo del lenguaje de programación Rust

En la Conferencia de Plomeros de Linux en Richmond, Virginia, el desarrollador de Linux y Rust, Miguel Ojeda, dio a los desarrolladores del kernel de Linux una actualización sobre el estado de Rust en el kernel de Linux. En resumen, Rust Linux sigue madurando y está recibiendo un fuerte apoyo de desarrolladores y proveedores, como Cisco, Samsung y Canonical.

Por supuesto, Rust ha estado en Linux desde que Linus Torvalds dio su bendición a este lenguaje seguro para la versión 6.1 de Linux. Ahora, sin embargo, Rust está tomando los pasos necesarios para convertirse en, junto con C, un miembro completamente desarrollado del conjunto de herramientas de lenguaje de Linux.

También: Cómo instalar Linux en una computadora portátil antigua para darle una nueva vida

Esa elevada posición se debe a que, según el ingeniero de software de Microsoft, Wedson Almeida Filho, “Sentimos que Rust ahora está listo para unirse a C como un lenguaje práctico para implementar el kernel. Nos puede ayudar a reducir el número de posibles errores y vulnerabilidades de seguridad en el código privilegiado, al mismo tiempo que se integra perfectamente con el kernel principal y conserva sus características de rendimiento”.

Específicamente, como explicaron Alex Gaynor y Geoffrey Thomas en la Cumbre de Seguridad de Linux de 2019, casi dos tercios de los agujeros de seguridad del kernel de Linux provienen de problemas de seguridad de memoria. ¿Y de dónde provienen esos errores? De debilidades inherentes en C y C++. En cambio, Rust evita estos problemas utilizando interfaces de programación de aplicaciones (API) mucho más seguras.

También: 8 cosas que puedes hacer con Linux y no con MacOS o Windows

Eso no quiere decir que estemos listos para reemplazar C por Rust. De hecho, ese día es poco probable que llegue. Pero Rust definitivamente está en camino de convertirse en un lenguaje importante para el desarrollo de Linux.

Antes de llegar a ese destino, hay algunos desafíos que superar. Como dijo Ojeda en el evento, aunque “el equipo principal ha crecido con nuevos miembros”, todavía queda mucho trabajo por hacer.

Ese esfuerzo comienza con las herramientas de programación para Rust en Linux. Algunas distribuciones ya están adoptando Rust con los brazos abiertos. Por ejemplo, Ubuntu ahora proporciona “todo el conjunto de herramientas necesario y los requisitos del kernel para compilar y probar módulos del kernel fuera del árbol”.

Hoy en día, hay tres cadenas de herramientas principales de Rust en Linux que se están uniendo. La primera de ellas es GCC codegen para rustc. Esta cadena de herramientas compila y puede arrancar Rust y Linux sin cambios en el código fuente.

Luego, está GCC Front-End para Rust, que puede ser cargado por el front-end existente de rustc, pero se beneficia de las optimizaciones de GCC. Desafortunadamente, este proyecto todavía está en una fase muy temprana de desarrollo. Finalmente, está Coccinelle para Rust. Coccinelle es una herramienta para crear código fuente en C del kernel de Linux a gran escala, y Coccinelle para Rust busca llevar esta capacidad a los proyectos de código en Rust.

También: Las mejores distribuciones de Linux para principiantes

En cuanto al trabajo diario que se requiere para que Rust esté totalmente integrado con Linux, el sitio web “oficial” de la iniciativa es ahora el autoexplicativo Rust for Linux. Este sitio es tu fuente única para todo lo relacionado con Rust en Linux. 

La rama original del código de rust, donde se realizó el desarrollo durante dos años, ha sido retirada. El código todavía está allí, pero ha sido congelado y archivado. De ahora en adelante, rust-next será la rama que contiene las nuevas características de Rust que se enviarán durante la próxima ventana de fusión del kernel de Linux. Esta rama, como su nombre sugiere, forma parte de Linux Next

Rust-fixes, por otro lado, es la rama que contiene las correcciones de Rust para el ciclo actual del kernel de Linux. Además, Rust-dev es una rama experimental para propósitos de integración. Es una cola de parches que “parecen lo suficientemente buenos” para compartir y experimentar con ellos. 

No obstante, el avance no ha sido sencillo. Los desarrolladores de Rust en Linux han descubierto algunos problemas en el camino. Por ejemplo, si bien los deadlocks, cuando dos o más hilos están esperando que el otro termine, son seguros en Rust, porque no resultan en un comportamiento indefinido, no son seguros en el kernel de Linux. Los programadores están trabajando en solucionar este problema. 

También: Cómo crear una unidad USB de arranque de Linux

Los desarrolladores también se preocupan por cómo lidiar con las versiones de Rust. Hoy en día, los desarrolladores no pueden garantizar que las versiones más recientes de Rust funcionarán en Linux porque la última versión de Rust Linux es compatible con algunas características inestables. ¿Estarán estas características en la próxima versión de Rust? ¿Serán compatibles hacia atrás? Manténganse atentos. 

Por ahora, los programadores de Rust en Linux están siguiendo la última versión del compilador de Rust. Eso es bastante inusual para el kernel, donde generalmente se utiliza código antiguo y probado. 

Otro problema relacionado es que hay un creciente interés en llevar el soporte de Rust a las versiones de soporte a largo plazo (LTS) de Linux, específicamente 5.15 y 6.1. Algunas personas están especialmente interesadas en el núcleo Linux super LTS 6.1. Sin embargo, Linux generalmente no permite la retroportación en los Linuxes LTS. Entonces, si realmente deseas un soporte completo para Rust en un kernel LTS más antiguo, tendrás que pagarlo de alguna manera u otra. 

Otra regla general que los desarrolladores de Rust han decidido intentar “romper” es la regla contra controladores duplicados. Por lo general, nadie quiere que nadie pierda tiempo reinventando la rueda, pero algunos encargados están abiertos a la idea de experimentar con Rust, comenzando de forma sencilla con un controlador con el que ya están familiarizados. 

También: Si quieres probar BSD, GhostBSD podría ser tu mejor opción

Sin embargo, otros han expresado interés en escribir controladores en Rust, pero las abstracciones requeridas no están disponibles y la fusión rompería la regla de “ningún código sin un usuario esperado en el árbol”. Por lo tanto, Ojeda y su alegre equipo de desarrolladores de Rust han solicitado una excepción para los controladores en Rust. 

Estos movimientos son pequeños pasos adelante, pero son críticos para hacer que Rust sea igual a C como lenguaje de programación en Linux. Basándome en el gran interés que vi en Plumbers, espero completamente que Rust llegue allí eventualmente.