Por qué está ocurriendo todo esto con el lenguaje de programación Rust, cómo llegó al kernel de Linux y hacia dónde irá a partir de ahora.
No hace mucho tiempo, la idea de que otro lenguaje importante fuera soportado en el núcleo de Linux habría sido risible. Linux era el hijo predilecto de C. Claro, ha habido esfuerzos para introducir otros lenguajes en el núcleo, especialmente C++. Han fracasado. Y de forma estrepitosa. Como dijo una vez el creador de Linux, Linus Torvalds, "C++ es un lenguaje horrible".
También puede Leer | La adopción de Rust por parte de Linux impulsará la comunidad robótica
Historia
Rust comenzó como un proyecto de la Fundación Mozilla. El propósito de este entonces nuevo lenguaje construido desde cero era incorporar la sintaxis expresiva y la flexibilidad de un lenguaje de alto nivel con el control fino y el rendimiento de un lenguaje de bajo nivel. En particular, pretendía mejorar el rendimiento, la paralelización y la seguridad de la memoria.
La combinación de rendimiento y seguridad de la memoria es lo que llamaría la atención de los desarrolladores de Linux. Aunque no hay duda de que C permite a los programadores escribir código muy rápido, tampoco hay duda de que C también hace que sea demasiado fácil cometer errores de memoria.
También puede Leer | ¿Qué es Rust y cual es su futuro?
Décadas después de que C llegara a la escena, los errores de memoria con los programas C parecen ser el más común de todos los errores de seguridad de codificación. En 2019, Microsoft confesó que el 70% de sus problemas de seguridad Common Vulnerabilities and Exposures (CVE) habían sido causados por desarrolladores que cometían errores de corrupción de memoria en su código C y C++.
También puede Leer | Linus Torvalds, anuncia que Rust se incluya en el próximo núcleo de Linux
Pronto quedó claro para los desarrolladores del núcleo de Linux que estaban dispuestos a mirar más allá de K&R C que Rust podría ser la respuesta. Es cierto que se puede intentar escribir programas seguros para la memoria en C con variantes del lenguaje como SEI CERT C o utilizar directrices más seguras como las C++ Core Guidelines. Pero, a fin de cuentas, sigue habiendo un montón de errores de memoria en C en el código de producción.
Rust y Linux
El primer paso para unir Rust y Linux, que por desgracia llegó demasiado pronto, fue el módulo del kernel de Linux de Taesoo Kim en 2013. Las empresas observaban el desarrollo de Rust y llegaban a la conclusión de que en él estaba el futuro de la programación de sistemas.
También puede Leer | Linux 6.0 llega con mejoras de rendimiento y viene más Rust
Amazon, Google y Microsoft llegaron a esta conclusión a finales de la década de 2010 y principios de 2020. En 2018, Amazon Web Services (AWS) había utilizado Rust para Firecracker, la virtualización de código abierto detrás de AWS Lambda y sus otras ofertas sin servidor. En 2020, AWS había lanzado Bottlerocket, un sistema operativo de contenedores basado en Linux.
Al mismo tiempo, Google estaba trabajando en la introducción de Rust en la distro Linux móvil Android. Como dijeron los ingenieros de Google en 2021, mejorar el código de Android "es una prioridad absoluta para la seguridad, la estabilidad y la calidad de cada versión de Android." Aun así, "los fallos de seguridad de la memoria en C y C++ siguen siendo los más difíciles de solucionar."
También puede Leer | Linus Torvalds : podría fusionarse con Rust
A pesar de que Google invierte una "gran cantidad de esfuerzo y recursos en la detección, corrección y mitigación de esta clase de errores", ... los errores de seguridad de la memoria siguen siendo uno de los principales contribuyentes de los problemas de estabilidad, y representan sistemáticamente el ~70% de las vulnerabilidades de seguridad de alta gravedad de Android": Así pues, dado que "los lenguajes seguros en cuanto a la memoria son el medio más rentable para prevenir los fallos de memoria, "nos complace anunciar que el proyecto de código abierto de Android (AOSP) admite ahora el lenguaje de programación Rust para el desarrollo del propio sistema operativo".
Al mismo tiempo, los desarrolladores del kernel de Linux, que suelen ser empleados de Google, empezaron a explorar si Rust podía introducirse en el propio Linux. Miguel Ojeda, un desarrollador del núcleo de Linux, lideró estos esfuerzos. Creó el proyecto Rust for Linux para llevar módulos Rust fuera del árbol a Linux en 2019.
Rust para Linux
En primer lugar, en abril de 2021, Ojeda introdujo una solicitud de comentarios (RFC) sobre la introducción de Rust en Linux en la lista de correo del núcleo de Linux (LKML). Esto fue seguido en julio de 2020, por Nick Desaulniers, un ingeniero de software de Google que trabaja en la compilación del Kernel de Linux con Clang y LLVM, sugiriendo una sesión de "Rust en el árbol" para la Conferencia de Plomeros de Linux 2020 (LPC). Esto dio lugar a la charla "Barriers to in-tree Rust" de agosto de 2020. Esto, a su vez, hizo que la idea de Rust en Linux pasara a primer plano.
También puede Leer | Rust : ha actualizado como versión Rust de Coreutils para el kernel de Linux
También ayudó que Ojeda recibiera apoyo financiero del Grupo de Investigación sobre Seguridad en Internet (ISRG) y de Google. El ISRG invierte en esto porque su principal objetivo es promover la programación segura en memoria para los sistemas operativos y programas críticos de Internet, como Linux, Apache y OpenSSL.
Entonces, el 20 de septiembre de 2021, Ojeda envió el primer pull request del proyecto Rust para Linux. Esto añadió el soporte inicial de Rust, incluyendo la integración de Kbuild, el soporte inicial de los módulos incorporados, y el comienzo del kernel crate con las abstracciones de Safe Rust de Alex Gaynor y Geoffrey Thomas.
Sylvestre Ledru, un desarrollador de Debian Linux, portó una versión de Rust de Coreutils a Linux utilizando la infraestructura del compilador LLVM y su infraestructura de herramientas y front-end de lenguaje Clang C en septiembre de 2021. Coreutils son las utilidades básicas del shell de GNU. Con ellas, Ledru arrancó Linux y pudo ejecutar los paquetes más populares de Debian.
También puede Leer | Rust : veremos mucho más del lenguaje en Linux
En marzo de 2021, la idea había cobrado suficiente fuerza como para que, cuando hablé con Torvalds y con el encargado del mantenimiento del núcleo estable de Linux, Greg Kroah-Hartman, sobre Rust en Linux, Torvalds dijera que "no estaba presionando" por Rust, [pero] estoy abierto a ello teniendo en cuenta las ventajas prometidas y evitando algunas trampas de seguridad, pero también sé que a veces las promesas no se cumplen".
Kroah-Hartman también se mostró cautelosamente optimista: "Todo dependerá de lo bien que se pueda mapear la interacción entre las estructuras del núcleo del kernel y las reglas de vida que están escritas en C en las estructuras de Rust y las reglas de vida para que los controladores de Rust puedan utilizarlas adecuadamente. Eso va a requerir mucho trabajo cuidadoso por parte de los desarrolladores que quieran conectar todo esto, y les deseo la mejor de las suertes".
También puede Leer | Cómo instalar Rust y Cargo en Ubuntu y otras distribuciones de Linux
Otros fueron más optimistas. Wedson Almeida Filho, del equipo Android de Google, dijo que "Creemos que Rust está listo para unirse a C como lenguaje práctico para implementar el núcleo. Puede ayudarnos a reducir el número de posibles bugs y vulnerabilidades de seguridad en el código privilegiado, al tiempo que juega bien con el núcleo del kernel y preserva sus características de rendimiento."
El equipo de Rust en Linux sabía que sería mucho trabajo. Como dijo Ojeda en junio de 2022, "El núcleo es un proyecto enorme con muchas partes interesadas. Desde el principio, estaba claro que añadir un segundo lenguaje "principal" al kernel tendría retos tanto técnicos como de gestión."
Y demostraron estar a la altura del reto. En septiembre de 2022, Torvalds me dijo: "A menos que ocurra algo extraño, [Rust] llegará a la 6.1". El núcleo Linux 6.1, y Rust en él, aparecerá a principios de 2023 o, con suerte y buen trabajo, a finales de 2022.
Ahora, Rust, dijo Torvalds, "sólo tendrá la infraestructura central (es decir, todavía no hay ningún caso de uso serio)". No obstante, no hay que equivocarse. Se trata de un gran paso adelante.
El primer trabajo de Rust que se verá en los kernels de Linux Next será, dijo Ojeda, "abstracciones de Rust para subsistemas y escribir controladores y otros módulos" en el LKML.
Finalmente, Rust será un segundo lenguaje totalmente integrado en el núcleo de Linux. No pienses, ni por un momento, que eso significa que todas las más de 30 millones de líneas del kernel van a ser reescritas en Rust. Eso no ocurrirá antes de 2050. Sin embargo, después de eso, no apuestes en contra. Rust hace que cualquier programa escrito en él sea intrínsecamente más seguro que sus homólogos en C.