Kerla: un nuevo kernel escrito en Rust y compatible con la ABI de Linux
Hace poco se dio a conocer información sobre el proyecto Kerla, el cual se está desarrollando como un núcleo de sistema operativo escrito en el lenguaje Rust. El código se distribuye bajo las licencias Apache 2.0 y MIT. El proyecto está siendo desarrollado por el desarrollador japonés Seiya Nuta, conocido por crear el sistema operativo de microkernel Resea, escrito en lenguaje C.
El nuevo kernel tiene como objetivo inicialmente garantizar la compatibilidad con el kernel de Linux en el nivel ABI, lo que permitirá que los binarios no modificados creados para Linux se ejecuten en un entorno basado en Kerla.
Sobre Keral
Kerla es un kernel de sistema operativo monolítico creado desde cero en Rust. En la etapa actual de desarrollo, Kerla solo puede ejecutarse en sistemas con arquitectura x86_64 e implementa llamadas básicas al sistema como write, stat, mmap, pipe y poll, admite señales, pipes sin nombre e interruptores de contexto. Llamadas como fork, wait4 y execve proporcionan para controlar los procesos. Hay soporte para tty y pseudo-terminales (pty). Entre los sistemas de archivos initramfs (usado para montar el FS raíz), tmpfs y devfs todavía son compatibles.
También se proporciona una pila de red con soporte para sockets TCP y UDP, basada en la biblioteca smoltcp. El desarrollador ha preparado un entorno de arranque que funciona en QEMU o en Firecracker VM con el controlador.virtio-net, al que ya puede conectarse a través de SSH. Musl se usa como una biblioteca del sistema y BusyBox se usa como una utilidad de usuario. Basado en Docker, se ha preparado un sistema de compilación que le permite crear su propio arranque initramfs con el kernel de Kerla.
Hasta ahora, se ha proporcionado pocos detalles sobre su nuevo kernel, pero lo que llama más la atención sobre las características de Kerla es el hecho de que está escrito en Rust. Entonces, ¿escribirlo en Rust tiene alguna ventaja sobre otros lenguajes o sobre el código existente? Muchos respondieron afirmativamente a esta pregunta, enfatizando los beneficios de seguridad de la memoria que brinda el lenguaje.
También se proporciona al evaluar la precisión de los accesos a la memoria en tiempo de ejecución. Además, Mozilla cree que Rust ofrece protección contra desbordamientos de enteros, requiere la inicialización obligatoria de los valores de las variables antes de su uso, adopta el concepto de referencias y variables inmutables de forma predeterminada, ofrece un tipado estático fuerte para minimizar los errores lógicos y simplifica el procesamiento de entrada a través de la coincidencia de patrones.
Entre las ventajas, destacamos las herramientas integradas para evaluar la calidad del código y creación de pruebas unitarias que se puedan ejecutar no solo en hardware real, sino también en QEMU. Básicamente, Mozilla considera que Rust es más fácil de depurar, ya que el compilador rechazará los errores. No obstante, las calas señalaron algunos inconvenientes con Rust.
“Al igual que con C++, es casi imposible escribir Rust idiomático sin usar plantillas, por lo que tiene binarios inflados y tiempos de compilación lentos. Todas estas comprobaciones en tiempo de compilación también tienen un costo. Además, si reescribe algo, pierde el antiguo código base maduro, y no hay forma de que pueda producir un código base de calidad similar en un período de tiempo razonable; es mucho mejor extender, en lugar de reescribir, el programa en Rust. Es mejor extender el programa en lugar de reescribirlo en Rust ”, dice un ingeniero de software.
Según su creador, es por esta razón que los desarrolladores de Linux, en particular el propio Linus Torvalds, rechazaron la idea de reescribir todo el kernel en Rust.
“Trabaje un poco para crear enlaces seguros, luego escriba el código adicional en Rust y aún podrá disfrutar de ese código maduro. (Eso es lo que hace Linux, hay esfuerzos para agregar la capacidad de escribir un módulo de kernel en Rust) ”, agregó. Los desarrolladores de Linux han estado explorando las posibilidades de escribir ciertos módulos de kernel nuevos utilizando el lenguaje Rust durante aproximadamente tres años. Esto dio origen al proyecto » Rust para Linux «.
Finalmente si estás interesado en conocer más al respecto, puedes consultar los detalles en el siguiente enlace.