Nuevo proyecto de programación: Bunnix
Contexto del proyecto
- Recientemente, para alejarme un poco del "trabajo de verdad", empecé un nuevo proyecto de programación de bajo riesgo y puramente para el tiempo libre.
- A partir del 21 de abril, decidí ver cuánto podía construir de un sistema operativo tipo Unix para el objetivo x86_64 en aproximadamente un mes.
- El resultado es un sistema operativo llamado Bunnix.
- En total, invertí tiempo en este proyecto durante 27 días.
Demo de Bunnix
Componentes de Bunnix
- El kernel de Bunnix está escrito principalmente en Hare e incluye algunos componentes en C (
lwext4, libvterm).
- Controladores compatibles:
- PCI (legacy)
- dispositivos de bloque AHCI
- tablas de partición GPT y MBR
- teclado PS/2
- puerto serial de plataforma
- reloj CMOS
- framebuffer (configurado por el bootloader)
- sistemas de archivos ext4 y memfs
- Funciones del kernel compatibles:
- sistema de archivos virtual
- varios dispositivos en /dev
- emulador de terminal y soporte para termios
- unas 40 llamadas al sistema (por ejemplo,
clock_gettime, poll, openat, fork, exec, etc.)
- Bunnix es un sistema de un solo usuario y actualmente no aplica modos de archivo ni propiedad al estilo Unix.
Bootloader
- Incluye dos bootloaders:
- Arranque legacy: escrito en Hare.
- Arranque EFI: escrito en C.
- Carga el kernel como archivo ELF y, si hace falta, también carga initramfs.
Software en espacio de usuario
- Está compuesto principalmente por software de terceros:
- Colossal Cave Adventure (advent)
- dash (/bin/sh)
- Doom
- gzip
- less (paginador)
- lok (/bin/awk)
- lolcat
- mandoc (man pages)
- sbase (core utils)
- tcc (compilador de C)
- Vim 5.7
- La libc se deriva de musl libc y fue modificada para ajustarse a las necesidades de Bunnix.
Proceso de desarrollo de Bunnix
- Documenté el proceso de desarrollo en Mastodon.
- Parte del código de Bunnix proviene de Helios, un proyecto anterior.
- Las partes más difíciles fueron el soporte de ext4 y la integración de terminales virtuales.
- Implementar el scheduler y el manejo de señales también fue un reto.
- Portar software de terceros fue relativamente fácil gracias a la base de musl libc.
Lo que aprendí
- Aprendí mucho sobre sistemas de archivos.
- Mi enfoque para los controladores se volvió más simple.
- Llegué a entender la complejidad del manejo de señales.
- Confirmé que un asignador basado en bitmap es efectivo en la gestión de memoria.
- Me di cuenta de que un kernel monolítico es mucho más sencillo de implementar que un microkernel.
Planes a futuro
- Bunnix fue un proyecto para el tiempo libre y por ahora no planeo dedicarle más tiempo.
- Más adelante volveré al proyecto Helios y aplicaré muchas de las lecciones aprendidas.
- Prioridades de mejora para Bunnix:
- caché del sistema de archivos
- corrección de bugs en ext4
- procfs y top
- archivos
mmap
- más señales (por ejemplo,
SIGSEGV)
- soporte multiusuario
- dispositivos de bloque NVMe
- dispositivos de bloque IDE
- soporte para ATAPI e ISO 9660
- soporte para Intel HD Audio
- stack de red
- toolchain de Hare en el sistema base
- self-hosting
Opinión de GN⁺
- Valor de Bunnix: Bunnix es un buen ejemplo de kernel hacking con el lenguaje Hare, y puede resultar interesante para desarrolladores que quieran aprender nuevas tecnologías y lenguajes.
- Diseño de sistemas de archivos: el diseño de sistemas de archivos es una parte importante del desarrollo de sistemas operativos, y Bunnix permite aprender mucho sobre ello.
- Monolítico vs. microkernel: es un buen caso para comparar las ventajas y desventajas de los kernels monolíticos y los microkernels, y ofrece una comprensión más profunda del diseño de sistemas operativos.
- Participación de la comunidad: Bunnix es un proyecto de código abierto y tiene potencial para seguir mejorando mediante la participación y las contribuciones de la comunidad.
- Mejoras futuras: las mejoras planeadas para Bunnix ofrecen buenas oportunidades de aprendizaje para quienes estén interesados en el desarrollo de sistemas operativos.
1 comentarios
Opiniones en Hacker News
Resumen de comentarios de Hacker News
This is really cool. Reminds me of the original Unix was invented in a couple weeks while Ritchie's family went on vacation to CA to visit his in-laws.
I also finally learned how signals work from top to bottom, and boy is it ugly. I’ve always felt that this was one of the weakest points in the design of Unix and this project did nothing to disabuse me of that notion.
Impressive, super cool, and inspiring!
Example of “creating something impressive in X days” requires a lot of experience and talent that is built over years.
It was really cool watching the ~daily updates on this on Mastodon - seeing how someone so skilled gradually pieces together a complex piece of software.
From "Linux System Call Table – Chromiumos"
Code is here: Git Repository
Hare looks like an interesting language. Though this limitation will limit its adoption in this multicore age I think:
Very cool. Most of these Unix clones are usually written in C. This one is written in a new programming language.
Quite cool, by making use of Hare instead.
Waiting for an OS that treats GPU(s) as a first class citizen ...