Snowdrop OS, un sistema operativo homebrew desarrollado desde cero en ensamblador
(sebastianmihai.com)- Snowdrop OS es un sistema operativo de 16 bits en modo real para la arquitectura IBM PC, un OS homebrew implementado directamente en x86 ensamblador desde el arranque hasta la ejecución de aplicaciones
- La distribución se ofrece como imagen de disquete de 1.44 MB e imagen de CD-ROM, e incluye cargador de arranque, kernel, shell, utilidades, apps de prueba y el clon de Tetris aSMtris
- Un cargador de arranque de 512 bytes encuentra el kernel y lo carga en memoria; luego el kernel configura los vectores de interrupción para las apps y carga la aplicación inicial
- Incluye administrador de archivos, editor de texto, apps gráficas, intérprete de BASIC, ensamblador x86 y depurador, lo que permite desarrollar y experimentar dentro del propio OS
- El código fuente está publicado sin restricciones de uso ni modificación, por lo que sirve como material de referencia para programadores que quieran seguir de cerca el funcionamiento de bajo nivel de un sistema operativo
Estructura implementada directamente desde el arranque hasta las apps
- Snowdrop OS es un proyecto que nació de la curiosidad por entender qué ocurre cuando se enciende una PC y cómo funcionan internamente un disco booteable y un sistema operativo
- El objetivo es un OS de 16 bits en modo real para la arquitectura IBM PC, escrito desde cero únicamente en x86 ensamblador
- La imagen de distribución se ofrece en dos formatos
- Imagen de 1.44 MB para disquete
- Imagen de CD-ROM
- La imagen incluye componentes clave escritos por el autor
- Un cargador de arranque que carga el kernel en memoria
- Un kernel que configura los vectores de interrupción para las aplicaciones de usuario y luego carga la app inicial
- Apps de usuario como shell, utilidades, apps de prueba y el clon de Tetris aSMtris
- Si durante el arranque detecta un disco duro, pregunta si se desea instalarlo, y Snowdrop OS puede instalarse en el disco duro
- Las apps y herramientas incluidas abarcan administrador de archivos, editor de texto, aplicaciones gráficas, intérprete de BASIC, ensamblador x86 y depurador x86
- El código fuente de Snowdrop OS y sus apps está publicado sin restricciones de uso ni modificación
Áreas del código fuente que vale la pena revisar
- Boot loader: cabe en 512 bytes y encuentra y carga el kernel
- kernel: proporciona servicios básicos y abstracciones para las aplicaciones
- Graphics and GUI framework: base para crear aplicaciones gráficas y basadas en mouse
- x86 assembler: permite crear directamente aplicaciones de bajo nivel dentro de Snowdrop OS
- BASIC interpreter: herramienta para crear rápidamente aplicaciones de alto nivel
- x86 debugger: puede usarse junto con el ensamblador
- Dynamic data structure libraries: admite trabajo con estructuras de datos dinámicas como listas enlazadas, árboles y BST
- All applications: incluye juegos, editor de texto, administrador de archivos, herramientas y aplicaciones de prueba
Funciones que fueron creciendo por versión
- El historial de versiones muestra una evolución continua de funciones, empezando en v1 con tarea única, shell y aSMtris
- v2: controlador de mouse PS/2 y app de prueba de mouse
- v3: multitarea básica y soporte para pantallas virtuales
- v4: controlador FAT12 con escritura y borrado, administrador de archivos y editor de texto
- v6: juego Snake multijugador basado en puerto serial
- v16: framework GUI
- v18: intérprete de BASIC y linker
- v19: instalación en disco duro
- v22: ensamblador x86, soporte para múltiples discos y utilidad para ver archivos
- v23: depurador x86
- v25: memoria dinámica y estructuras de datos
- v28: GUI de alta resolución, app de dibujo y app de escritorio
- v31: biblioteca de runtime y RTL del intérprete de BASIC
1 comentarios
Opiniones en Hacker News
A mediados de los 90 hice algo parecido: un SO GUI hobbyista de 32 bits, y este libro era lectura absolutamente obligatoria
https://www.amazon.com/Developing-32-Bit-Operating-System-Cd...
https://web.archive.org/web/20140704223135/https://www.ipdat...
Sensory Publishing obtuvo los derechos, le cambió el título e imprimió 1,000 copias adicionales, pero ahora solo quedan unas 200 y ya no se vende. Según dicen, el libro ahora está en dominio público y los ejemplares restantes se conservarán para la Great Alexandria Library
Si te interesan este tipo de proyectos, también vale la pena ver MenuetOS y KolibriOS. KolibriOS es un fork de MenuetOS que se separó hace mucho tiempo
MenuetOS también tiene una versión x64 con soporte SMP, pero esa es de código cerrado
Fuera de un SO hobbyista, ¿quién lo usaría realmente en una máquina x64 multinúcleo?
Me da curiosidad cuáles son hoy las ideas más interesantes y de vanguardia en diseño de SO, tanto desde la perspectiva del usuario como desde la de los hackers de SO
https://github.com/oro-os/kernel
Es un diseño de microkernel sin usuarios ni capabilities, que impone el control de acceso mediante la jerarquía de entidades del kernel. El mecanismo principal de IPC son puertos de memoria compartida con varios niveles de seguridad, tipados a nivel del kernel
Actualmente estoy en una etapa avanzada de validación de la utilidad del kernel. Si logro demostrar el diseño, planeo escribir algo más formal. Lleva unos 8 años como proyecto en mi cabeza y unos 4 años dentro del editor
https://doc.cat-v.org/plan_9/3rd_edition/rio/rio_slides.pdf
https://rtic.rs/ es una idea bastante interesante en un terreno parecido al de los RTOS embebidos
Siendo sinceros, todavía hay funciones de Plan 9 que están muy por delante de Linux. Por ejemplo, https://9p.io/sys/doc/lexnames.html
[1] https://genode.org
https://redox-os.org/
En un sentido parecido, me pregunto qué avances hay en RTOS de alto rendimiento para robótica. Parece un área con relativamente poca atención
ROS/ROS2 no son sistemas operativos, y la mayoría tampoco es algo que uno llamaría software de alto rendimiento
En el mundo embebido hay muchos SO como FreeRTOS, Zephyr y ThreadX, además de varias soluciones propietarias como Nvidia DriveOS
Pero los SO embebidos son bastante limitados en comparación con un SO general como Linux. Tienen planificadores de tareas, pero muchas veces no tienen procesos, sistemas de archivos, carga dinámica de archivos, herramientas binarias, etc., o son opcionales
https://rtic.rs
Hay artículos relacionados como estos. ¿Habrá otros?
Homebrew an OS from Scratch? Snowdrop Shows How It's Done - https://news.ycombinator.com/item?id=39005640 - ene 2024 (1 comentario)
Snowdrop OS – a homebrew operating system from scratch, in assembly language - https://news.ycombinator.com/item?id=28090574 - ago 2021 (3 comentarios)
Para ser precisos, es ensamblador x86
Es impresionante el conjunto de herramientas y apps que creó. Aun así, parece que no cayó en la tentación del self-hosting
Para llevar el ensamblador al nivel de nasm, haría falta más trabajo, o habría que acercar todo el código fuente al ASM de Snowdrop
V32; estaría bueno que también hubiera un compilador BASIC
Parece que se podrían hacer solicitudes de funcionalidades
Me gustaría ver esto porteado a esp32, por ejemplo corriendo en una placa como la ttgo vga32
Sería bueno tener un SO básico con GUI y shell, con tarjeta SD, VGA, sonido, teclado/mouse, WiFi y Bluetooth. Algo con sensación de Commodore 64 moderno, con impresión por WiFi aunque sea solo texto, un navegador tipo lynx, email, IRC, gopher y cosas así
Los requisitos de compilación de Snowdrop OS son impresionantes
Funciona en: Windows XP 32bit, Windows 98, Windows 95