- Fusion OS es un sistema operativo hobby para x86-64 que usa Nim como lenguaje de implementación
- Las funciones implementadas actualmente se dividen en bootloader UEFI, gestión de memoria, gestión de tareas, llamadas al sistema, IPC y soporte de hardware
- La gestión de memoria y tareas incluye demand paging, multitarea con desalojo, planificación basada en prioridades y cargador ELF
- El entorno de ejecución actual es QEMU y para compilar se requieren Nim,
clang·lldde LLVM y Just - Los planes futuros incluyen seguridad basada en capabilities, E/S de disco, sistema de archivos, shell, GUI y redes
Resumen de Fusion OS
- Fusion es un sistema operativo hobby para x86-64 implementado en Nim
- El proceso de desarrollo está documentado en 0xc0ffee.netlify.app
- La sección de capturas de pantalla incluye el bootloader UEFI, el arranque del kernel y pantallas de ejecución
- Las capturas de pantalla de la GUI corresponden a la rama
graphics, que todavía está en desarrollo
Funciones implementadas actualmente
-
Arranque
- Bootloader UEFI implementado
-
Gestión de memoria
- Higher Half Kernel con estructura de Single Address Space
- Physical Memory Manager
- Virtual Memory Manager
- Demand Paging
-
Gestión de tareas
- Kernel Tasks
- User Mode Tasks
- Multitarea con desalojo
- Planificación basada en prioridades
- Cargador ELF compatible con Demand Paging y relocación
-
Llamadas al sistema
- Interfaz de llamadas al sistema
- Biblioteca de modo usuario
-
IPC
- IPC basado en canales
- Paso de mensajes
-
Hardware
- Enumeración de dispositivos PCI
- Configuración ACPI
- Temporizador Local APIC
- Interrupciones I/O APIC
- Controlador de teclado PS/2
- Controlador Bochs Graphics Adapter
Funciones planeadas
- Capability-based Security
- Máquinas de estado de tareas basadas en eventos
- E/S de disco
- Sistema de archivos
- Shell
- GUI
- Redes
Compilación y ejecución
- Para compilar se requieren Nim,
clang·lldde LLVM y Just - Los binarios de
clangyllddeben estar en elPATH- Si no están en el
PATH, se puede especificar la ruta de esos binarios en el archivo.env
- Si no están en el
- El comando de compilación es el siguiente
just build
- Actualmente Fusion se ejecuta en QEMU
- El comando de ejecución es el siguiente
just run
Licencia
- La licencia es MIT
1 comentarios
Comentarios de Hacker News
Soy el autor. Responderé cualquier pregunta que tengan
Si no, ¿creen que fue gracias al GC de Nim que no es stop-the-world?
https://nim-lang.org/1.4.0/gc.html
Ahora los dos se ven bastante parecidos, pero Swift parece estar más probado en la práctica
El blog y la documentación son excelentes. El equilibrio entre mostrar y explicar es muy bueno, y gracias por compartirlo
Como tengo que justificar todo lo que hago, eso me ayuda a eliminar complejidad innecesaria y a enfocarme en las partes más importantes
Diario de desarrollo del autor de Fusion:
https://0xc0ffee.netlify.app/osdev/01-intro.html
Me encanta ver cosas así. He estado involucrado de forma intermitente en el ecosistema de Nim durante años, y da gusto ver que este proyecto pequeño y divertido sigue avanzando
Está genial. Abrí el módulo ELF y fue entretenido porque era fácil de leer
Algún día me gustaría escribir un sistema operativo en tiempo real con Nim. Me gusta programar sistemas embebidos con Nim, así que crear un RTOS también suena divertido
¿Qué es Nim y cuáles son los objetivos generales de diseño de Fusion?
Espero que no sea una pregunta demasiado básica. No tengo nada de contexto y me encantaría que alguien lo explicara
Sobre por qué Nim, en el sitio que hicimos junto con el proyecto lo explicamos así:
https://0xc0ffee.netlify.app/osdev/01-intro.html
Me alegra ver más proyectos en Nim. Uso principalmente Python y JavaScript, pero me interesa la ventaja de conocer otro lenguaje moderno, rápido y con tipado estático
Entre Go, Rust, Zig y Nim, Nim es el que más me gusta. Al leer código, se siente como el más parecido a Python en el sentido de que tiene menos ruido sintáctico
Me encanta usar un REPL cuando estoy prototipando código nuevo, e INim hace bien ese trabajo
En este momento, el mayor problema de Nim es el tamaño de su comunidad. Por eso, el universo de bibliotecas disponibles y mantenidas es más pequeño que en otras comunidades de lenguajes. Es el típico problema del huevo y la gallina, pero más desarrolladores, incluyéndome, podemos ayudar a resolverlo “siendo el cambio que queremos ver en el mundo”
El lenguaje también está evolucionando con cuidado y, mientras Araq siga al frente, creo que a largo plazo solo va a mejorar
El ecosistema no es tan grande como el de Python o Rust, pero sorprendentemente la biblioteca estándar ya incluye la mayoría de lo necesario. Rara vez necesito buscar paquetes de terceros para hacer algo
Claro, reconozco que Nim sigue siendo un lenguaje relativamente poco conocido. Aun así, eso no le quita que sea un lenguaje prometedor que hace muy bien el trabajo
Donde creo que la comunidad debería enfocarse más es en el soporte de IDE. La extensión de VSCode está bien, pero tiene asperezas. Yo prefiero los IDE de JetBrains, y el plugin oficial de Nim deja mucho que desear, por decirlo suavemente
También existe un proyecto paralelo para crear un plugin de JetBrains para Nim, aunque todavía no ha avanzado mucho
[0] https://forum.nim-lang.org
[1] https://github.com/khaledh/nimjet
Nim es un excelente lenguaje de programación de sistemas y debería ser más popular