Tilck Project, un kernel simplificado compatible con Linux
Se dio a conocer la noticia de un nuevo desarrollo que tiene como nombre «Proyecto Tilck», en el cual un empleado de VMware está desarrollando un núcleo monolítico que es fundamentalmente diferente de Linux, pero diseñado para ser compatible binariamente con Linux y capaz de ejecutar aplicaciones creadas para Linux.
El desarrollo tiene como objetivo la implementación de las características mínimas requeridas, evitar la sobrecarga de funcionalidad, arquitectura simple y comprensible, máxima simplificación de código, tamaño pequeño de archivos binarios, comportamiento predecible (determinista), asegurando retrasos mínimos, logrando alta confiabilidad y simplificando el desarrollo y procesos de prueba.
Tilck es fundamentalmente diferente de Linux, ya que no apunta a servidores multiusuario ni máquinas de escritorio, en absoluto porque eso no tendría sentido: Linux no es grande y complejo debido a una implementación deficiente , sino a la increíble cantidad de características que tiene. ofrece y la complejidad intrínseca que requieren. En otras palabras, Linux es genial dado el problema que resuelve. Tilck ofrecerá menos funciones a cambio de:
código más simple (por mucho)
tamaño binario más pequeño
comportamiento extremadamente determinista
latencia ultrabaja
desarrollo y pruebas más fáciles
robustez adicional
El proyecto no pretende ser utilizado en entornos de servidor multiusuario o sistemas de escritorio. De los sistemas de archivos, FAT16 y FAT32 son compatibles en modo de lectura, así como ramfs, devfs y sysfs. Los dispositivos de bloque aún no se han implementado; todo está en la memoria.
Se proporciona VFS para abstraer las operaciones de FS. Los subprocesos múltiples en la etapa actual de desarrollo solo están disponibles a nivel de kernel (aún no se proporcionan en el espacio del usuario).
El kernel admite la multitarea preventiva e implementa unas 100 llamadas básicas al sistema Linux, como fork(), waitpid(), read(), write(), select() y poll(), que son suficientes para ejecutar aplicaciones de consola como BusyBox, Vim, TinyCC, Micropython y Lua, así como aplicaciones gráficas basadas en framebuffer como el juego fbDOOM. Para crear programas para Tilck, se ofrece un conjunto de herramientas basado en la biblioteca Musl.
Se menciona que el conjunto de controladores propuesto permite ejecutar Tilck tanto en el entorno QEMU como en sistemas convencionales arrancando desde una unidad USB. Ademas de ello, tambien se destaca que hay soporte para conjuntos de instrucciones extendidas SSE, AVX y AVX2. Ofrece su propio cargador de arranque interactivo que admite sistemas con BIOS y UEFI, pero también es posible utilizar cargadores de arranque de terceros como GRUB2. Cuando se carga en QEMU, el kernel puede ejecutarse en un entorno con 3 MB de RAM.
Actualmente, el proyecto se posiciona como un proyecto educativo, pero a largo plazo es posible que Tilck crezca a un nivel adecuado para su uso como kernel para sistemas integrados que requieren un comportamiento predecible y baja latencia.
Si bien Tilck usa internamente el concepto de subproceso, los subprocesos múltiples no están actualmente expuestos al espacio de usuario (los subprocesos del núcleo existen, por supuesto). Ambos fork()y vfork()están implementados correctamente y la copia en escritura se usa para procesos bifurcados. La waitpid() llamada al sistema está completamente implementada (lo que implica grupos de procesos, etc.).
Una característica interesante en esta área merece una mención especial: a pesar de la falta de subprocesos múltiples en el espacio de usuario, Tilck tiene soporte completo para TLS
Se espera que Tilck llene el vacío entre las soluciones basadas en el kernel de Linux y los sistemas operativos dedicados en tiempo real, como FreeRTOS y Zephyr. Los planes incluyen la migración de Tilck a ARM y procesadores que no sean unidades de administración de memoria (MMU), la adición de un subsistema de red, soporte para dispositivos de bloque y sistemas de archivos adicionales como ext2.
El código está escrito en C y se distribuye bajo la licencia BSD. En la etapa actual de desarrollo, el kernel solo admite la arquitectura x86, pero el código está diseñado teniendo en cuenta la universalidad y la implementación del soporte futuro para otras arquitecturas.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.