El proyecto Kerla desarrolla un kernel compatible con Linux en Rust

El proyecto Kerla está desarrollando un kernel de sistema operativo escrito en lenguaje Rust. El nuevo kernel se centra inicialmente en proporcionar compatibilidad con el kernel de Linux a nivel ABI, lo que permitirá que los archivos ejecutables no modificados compilados para Linux se ejecuten en un entorno basado en Kerla. 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 microkernel Resea, escrito en lenguaje C.

En su etapa actual de desarrollo, Kerla solo puede ejecutarse en sistemas x86_64 e implementa llamadas básicas al sistema como write, stat, mmap, pipe y poll, admite señales, canalizaciones sin nombre y cambios de contexto. Se proporcionan llamadas como fork, wait4 y execve para controlar procesos. Hay soporte para tty y pseudoterminales (pty). Los sistemas de archivos soportados actualmente son initramfs (utilizado para montar el sistema de archivos raíz), tmpfs y devfs. Se proporciona una pila de red con soporte para sockets TCP y UDP, implementada en base a la biblioteca smoltcp.

El desarrollador ha preparado un entorno de arranque que se ejecuta en QEMU o en la máquina virtual Firecracker con el controlador virtio-net, al que ya puedes conectarte vía SSH. musl se utiliza como biblioteca del sistema y BusyBox se utiliza como utilidades de usuario.

El proyecto Kerla desarrolla un kernel compatible con Linux en Rust

Se ha preparado un sistema de compilación basado en Docker que le permite crear sus propios initramfs de arranque con el kernel Kerla. Por separado, se están desarrollando el shell de software nsh similar a fish y la pila de GUI Kazari basada en el protocolo Wayland.

El proyecto Kerla desarrolla un kernel compatible con Linux en Rust

El uso del lenguaje Rust en un proyecto le permite reducir la cantidad de errores en el código mediante el uso de técnicas de programación seguras y aumentando la eficiencia en la identificación de problemas al trabajar con la memoria. Rust refuerza la seguridad de la memoria en tiempo de compilación mediante la verificación de referencias, la propiedad de los objetos y el seguimiento de la vida útil de los objetos (alcances), y mediante la evaluación de la exactitud de los accesos a la memoria en tiempo de ejecución. Además, Rust brinda protección contra desbordamientos de enteros, requiere que los valores de las variables se inicialicen antes de su uso, impone el concepto de referencias y variables inmutables de forma predeterminada, ofrece escritura estática sólida para minimizar los errores lógicos y simplifica el manejo de los valores de entrada. gracias a la combinación de patrones. .

Para el desarrollo de componentes de bajo nivel, como el kernel del sistema operativo, Rust proporciona soporte para punteros sin formato, empaquetado de estructuras, inserciones en línea de ensamblador e incrustación de archivos de ensamblador. Para trabajar sin estar atado a la biblioteca estándar, existen paquetes de cajas separados para realizar operaciones con cadenas, vectores y banderas de bits. Otra ventaja son las herramientas integradas para evaluar la calidad del código (linter, Rust-Analizer) y crear pruebas unitarias que se pueden ejecutar no solo en hardware real, sino también en QEMU.

Fuente: opennet.ru

Añadir un comentario