Uno de los hechos más importantes de Linux 6 es la proliferación en su interior de código escrito en Rust, el lenguaje creado en su momento por Mozilla y que opera de manera independiente desde hace tiempo. Como suele ser habitual dentro del mundillo desde hace una década y media, la introducción de nuevas tecnologías tiende a sembrar debates, y este caso no es un excepción.
El veterano Steven Vaughan-Nichols ha hecho para ZDNet un repaso de la situación de Rust en el kernel Linux a partir de la conferencia dada por Miguel Ojeda en la Linux Plumbers Conference celebrada en la ciudad de Richmond, ubicada en el estado estadounidense de Virginia. Aquí se señalaron tanto las presuntas virtudes que debería aportar el lenguaje como algunas cosas no tan positivas que han surgido en torno a él, aunque la implementación sigue madurando y cuenta con un fuerte apoyo de compañías como Cisco, Samsung y Canonical.
Entre otras cosas recogidas están unas frases de Wedson Almeida Filho, ingeniero de software en Microsoft, quien dijo que siente “que Rust ahora está listo para unirse a C como lenguaje práctico para implementar el kernel. Puede ayudarnos a reducir la cantidad de posibles errores y vulnerabilidades de seguridad en el código privilegiado, al mismo tiempo que funciona bien con el núcleo central y preserva sus características de rendimiento”.
Llegados a este punto, nos encontramos con una de las principales promesas de Rust, y es la de mejorar la seguridad en torno a la memoria. Linus Torvalds mostró en su momento cierto escepticismo sobre esta capacidad, pero si ha dado su visto bueno a la inclusión del lenguaje, nos suponemos que se habrá convencido.
Continuando con los aspectos de la seguridad relacionados con la memoria que sobre el papel mejora Rust, los desarrolladores Alex Gaynor y Geoffrey Thomas explicaron en la Linux Security Summit de 2019 que casi dos tercios de los agujeros de seguridad que se encuentran en Linux provienen de problemas de seguridad en la memoria y que el origen está en debilidades inherentes a C y C++. Aquí es donde entraría Rust, que por su diseño debería evitar estos problemas mediante el uso de API más seguras.
Rust es un lenguaje de programación que ha despertado mucho interés, pero cuya popularidad al menos en producción sigue estando por detrás de otros que son mucho más veteranos. Su implementación dentro del kernel ha derivado en que los programadores están siguiendo la última versión del compilador de Rust, lo cual es bastante inusual en un proyecto de tendencia conservadora como Linux.
El intentar emplear la última versión del compilador de Rust ha despertado cierta preocupación entre algunos desarrolladores de Linux, en especial por el posible uso de características que todavía están consideradas como inestables y por cuestiones relacionadas con la retrocompatibilidad. El emplear cosas cuya presencia futura no está garantizada es algo que, por lógica, siembra dudas en un proyecto que necesita que sus cimientos sean lo más estables posible.
Otro asunto que ha surgido es la demanda de portar hacia atrás el soporte de Rust a versiones LTS de Linux. Una vez más, nos encontramos con la política conservadora empleada para el desarrollo del kernel, la cual tiende a no dejar la puerta abierta a portar cosas hacia atrás, aunque sea algo que se permite bajo ciertas condiciones.
Y siguiendo con más desafíos, está que los desarrolladores que programan en Rust están dispuestos a no cumplir, o al menos no cumplir del todo, la regla contra los controladores duplicados. Esto es debido a que algunos están abiertos a experimentar con el lenguaje para ver qué resultados obtienen. Aquí se suma el hecho de que la abstracción requerida para los drivers escritos en Rust no está ahí y que la fusión podría romper una regla relacionada con el desarrollo del kernel, así que Miguel Ojeda y su equipo han solicitado un excepción para los controladores hechos con el lenguaje originario de Mozilla.