Rust en el Kernel
Víctor Manuel Jáquez LealOjalá todos aquí sepamos que es Rust, y si no es así, nunca es tarde para saberlo.
Rust es un lenguaje de programación, patrocinado inicialmente por Mozilla, con el propósito de desarrollar su navegador web de siguiente generación, llamado Servo. No obstante, Mozilla ha sorteado vaivenes económicos y tuvo que cortar Servo. Sin embargo, el lenguaje de programación, que siempre conservó su independencia organizativa, sigue tan sano y vibrante como el primer día. Hoy por hoy, Google, Microsoft y muchas otras empresas potentes están utilizando el lenguaje para su consumo interno y en prototipos de futuros productos.
¿Por qué tanto éxito? Veamos sus características:
-
Rust no necesita de un entorno de ejecución. Se compila y el binario opera directamente sobre el hardware y sistema operativo, tal como un programa escrito en C/C++. Su compilación tiene niveles de optimización elevados, además de generar binarios para varias plataformas, al utilizar LLVM (un framework para hacer compiladores, como
clang
). -
Rust no necesita de un recolector de basura. Sin embargo, garantiza seguridad de memoria, evitando desbordamientos de búfer (buffer overflow) o fugas de memoria (memory leaks). Esto lo logra a través de un sistema de posesión (ownership) de las variables (esto es lo más interesante y con más implicaciones a la hora de programar). No permite punteros nulos y favorece la asignación de memoria de la pila (stack) sobre la del montículo (heap).
-
Rust tiene un modelo de programación orientado a la concurrencia, gracias a su tipado (tipos de datos), su sistema de posesión de variables, evitando las condiciones de carrera (race conditions) verificado en tiempo de compilación,
-
Rust adopta características de varios modelos de programación: imperativa (como C/C++), funcional (como Lisp o Haskell), orientada a objetos (como Java).
-
Rust se distribuye con una serie de utilerías que permiten desarrollar, perfilar y optimizar aplicaciones complejas con solo descargar su toolchain, facilitando la “productividad” del desarrollador.
-
Rust tiene ya un enorme catálogo de librerías (llamadas
crates
) listas para descargar y utilizar: https://crates.io/
Tuve la oportunidad de colaborar en Servo en su momento, desarrollando el
soporte para los tags <video>
y <audio>
, con los excelentes bindings de
GStreamer para Rust.
En fin, hay más cosas que decir, pero harían este post más largo de lo que es.
El propósito del post es para comentar que la gente del kernel de Linux ha estado debatiendo los últimos años de usar Rust dentro del Kernel, sobre todo para desarrollar drivers, que suelen ser los que contienen el código más mediocre y menos revisado.
Miguel Ojeda ha sido el promotor de este adopción creando bindings para las API internas del kernel y cuenta con el apoyo de varios mantenedores. Hasta al propio Linus Torvalds le parece prometedor.
Esta es una charla que dio en el pasado Linaro Connect: