- Tilck es un kernel monolítico compatible a nivel binario con Linux, diseñado con fines educativos y para sistemas embebidos
- Tiene como objetivo el uso mínimo de recursos, por lo que resulta útil en dispositivos embebidos o entornos con limitaciones
- Puede ejecutar directamente aplicaciones de usuario Linux existentes como BusyBox, sin necesidad de escribir apps aparte
- Soporta las arquitecturas i686 y RISC-V64, y en el futuro planea portar también a ARM y CPU sin MMU
- Incluye varias funciones como sistema de archivos, gestión de procesos, consola y depuración, y también puede ejecutar Vim, Micropython y Lua
- Soporta arranque en QEMU y en hardware real, y además cuenta con un buen entorno de pruebas y depuración, así que incluso principiantes pueden probarlo con facilidad
Overview
-
¿Qué es Tilck?
- Tilck es un kernel educativo compatible con Linux con un diseño pequeño y simple
- En lugar de requerir apps propias como otros kernels, puede usar programas Linux compilados con un toolchain basado en musl
- Puede ejecutar varias apps como BusyBox, Vim y TinyCC
- Tiene una estructura monolítica, así que procesa todas las funciones en un solo espacio de kernel, como Linux
- También pone énfasis en la ejecución sobre hardware real
-
Future plans
- Es adecuado para entornos embebidos que requieren sistemas de latencia ultrabaja y completamente deterministas
- Busca ocupar un nicho intermedio entre Embedded Linux y FreeRTOS/Zephyr
- Tiene planes de soporte para ARM64, sin MMU, red (UDP/IP) y almacenamiento (FAT32, ext2)
- El objetivo a largo plazo es dar soporte de red y almacenamiento en SoC como Raspberry Pi 3/4
-
¿Qué NO es Tilck?
- Tilck no es un proyecto que busque reemplazar a Linux
- No apunta a ser un sistema operativo de escritorio (sin soporte para servidor X, etc.)
- Tilck minimiza funcionalidades en favor de la simplicidad y el tiempo real
-
Tilck vs Linux
- Linux es complejo por su gran cantidad de funciones, mientras que Tilck elige simplicidad, tamaño reducido y ultrabaja latencia
- Tilck también busca contar con una infraestructura de pruebas cercana al nivel empresarial
Features
-
Soporte para i686
- Soporta al mismo tiempo hardware antiguo (8259 PIC, 8254 PIT, etc.) y funciones modernas (SSE, AVX, ACPI, etc.)
- Mediante ACPI puede manejar eventos de energía y consultar información de la batería
- Ha sido probado en varios entornos x86 (BIOS, UEFI, CSM, etc.)
-
Soporte para riscv64
- Arquitectura enfocada en embebidos
- Soporta QEMU y la placa Sipeed licheerv-nano
- La información del dispositivo se pasa mediante device tree, y no hay código dependiente de la placa dentro del kernel
- Soporta ns16550 UART, controladores de interrupciones PLIC/INTC y más
-
Sistemas de archivos
- Soporta ramfs, devfs y sysfs
- FAT16 y FAT32 se soportan en modo de solo lectura y permiten mapeo de memoria
- Existe una VFS, pero no hay soporte para dispositivos de bloques (todo funciona en memoria)
-
Procesos y señales
- Soporta funciones básicas de procesos y señales como
fork, vfork, waitpid y rt_sigaction
- No hay multithreading en espacio de usuario, pero se implementa TLS (
set_thread_area) según los requisitos de libmusl
-
I/O
- Además de
read y write, soporta readv, writev, select y poll
- No soporta epoll
-
Consola
- Implementa más del 90% de las funciones de la consola de Linux
- Soporta tanto modo texto como modo framebuffer
- Está implementado al nivel de que Vim funciona perfectamente en Tilck
-
Aplicaciones de espacio de usuario
- Puede ejecutar apps de consola y framebuffer como BusyBox, Vim, Micropython, Lua y fbDOOM
Booting Tilck
-
Bootloader de Tilck
- Tilck incluye un bootloader con soporte para BIOS y UEFI
- Permite seleccionar modo de video, kernel y editar la línea de comandos
-
Bootloaders de terceros
- Tilck puede arrancar con bootloaders compatibles con Multiboot 1.0 (por ejemplo, GRUB)
- También se proporcionan ejemplos de configuración para GRUB
Un comentario sobre la experiencia de usuario
- Tilck está diseñado para que incluso desarrolladores principiantes puedan compilarlo y probarlo fácilmente
- Ofrece scripts propios para construir el toolchain, sin la carga de instalar dependencias complejas
- Es similar a
buildroot, pero mucho más simple
- También proporciona varios scripts para ejecutar en QEMU
1 comentarios
Comentarios de Hacker News
Da la impresión de ser un proyecto interesante que se ubica en un punto intermedio entre un Unix antiguo como xv6 (versión de 1975, ver el libro de Lion) y un kernel Linux completo; también fue grato verlo funcionando en una placa RISC-V de $9 llamada LicheeRV Nano (CPU de 64 bits a 1.0GHz (C906), MMU, FPU, unidad vectorial de 128 bits, 256MB de DDR3). Esta placa tiene un rendimiento similar al de un Pentium III de media etapa o un PowerPC G4, y parece que también sería muy fácil portarlo a la Milk-V Duo 256M, la Duo S, o incluso a modelos como la Duo (64MB de RAM, $5) que usan el mismo SoC. Por ahora no tiene soporte para red, dispositivos de bloque ni multinúcleo.
Un G4 con Altivec ofrece en multimedia un rendimiento casi al nivel de un PIV con SSE2.
Cada pocos meses aparece un nuevo kernel de sistema operativo que solo corre en una VM sin abstracción de hardware, pero Tilck no es de ese tipo. Tilck es un sistema operativo real. Corre en hardware real. Ese primer espacio ya está saturado, mientras que Tilck da la impresión de llenar muy bien un nicho que casi siempre estuvo vacío.
Impresiona que Tilck arranque tan rápido y que también ejecute doom sobre framebuffer; se puede ver en https://www.youtube.com/watch?v=Ce1pMlZO_mI. También fue agradable ver al desarrollador respondiendo directa y amablemente en YouTube a las preguntas de un aspirante a estudiante de ciencias de la computación.
Vi que Tilck está marcado como "educativo", pero me pregunto si, cambiando solo el bootloader, podría ser útil también en dispositivos embebidos pequeños.
El archivo README de Tilck es inesperadamente largo y entretenido, así que si eres desarrollador de sistemas operativos, vale mucho la pena leerlo.
Me pregunto qué tan útil sería Tilck para gente como yo, que creció usándolo con Minix con fines educativos.
Se compartieron enlaces a discusiones anteriores de HN sobre Tilck:
Tilck es interesante, pero es una pena que no tenga soporte multiusuario. Si al menos soportara cosas como
chmod/chgrpy cambios de propietario y grupo de archivos, parecería mucho más útil para algo como un servidor NFS, así que ojalá el desarrollador volviera a considerar el soporte multiusuario.La compatibilidad del sistema de archivos de Tilck es un problema aún mayor que eso. De hecho, para mi caso de uso sería mejor una plataforma con confiabilidad comprobada, y como Tilck está orientado a fines educativos, no es adecuado en términos de seguridad informática ni de robustez de datos.
También se podría pensar en un método donde los valores
user:groupsolo se registren en el sistema de archivos y en tiempo de ejecución se apliquen únicamente al atender clientes. Por ejemplo, si un servidor de archivos Linux corre como root, puede hacer las verificaciones de permisos y gestionar la propiedad sin cambiar de usuario internamente. Además, si hace un fork por cada sesión y cambia al usuario del cliente correspondiente, entonces el kernel impondrá los permisos y el manejo de permisos de archivos se resolverá automáticamente.Este proyecto es realmente impresionante. Me recuerda a la época en que corríamos Linux para un firewall NAT desde un disquete de 3.5 pulgadas.