1 puntos por GN⁺ 2024-07-15 | 1 comentarios | Compartir por WhatsApp
  • 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·lld de 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·lld de LLVM y Just
  • Los binarios de clang y lld deben estar en el PATH
    • Si no están en el PATH, se puede especificar la ruta de esos binarios en el archivo .env
  • 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

 
GN⁺ 2024-07-15
Comentarios de Hacker News
  • Soy el autor. Responderé cualquier pregunta que tengan

    • ¿El recolector de basura de Nim alguna vez les causó dificultades?
      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
    • ¿Cuál fue la parte más complicada del proyecto? ¿Y tienen algún consejo para alguien que quiera escribir un sistema operativo desde cero?
    • ¿Dónde están las capturas de pantalla?
    • No uso Nim, pero me parece un lenguaje interesante. He visto quejas de que cada vez que recompilaban proyectos viejos tenían que hacer ajustes, así que me da curiosidad con qué frecuencia y qué tan graves son los cambios que rompen compatibilidad
    • ¿Por qué eligieron Nim en lugar de Swift?
      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

    • El proceso de escribir me ayudó varias veces a mejorar el diseño y la implementación. Escribir me hace cuestionar las suposiciones que tengo y preguntarme si un lector podrá entender por qué tomé ciertas decisiones
      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

    • Si alguna vez decides hacer un RTOS, sin duda me gustaría seguirlo
    • ELF es un formato de archivo muy simple. Si hubiera sido difícil de leer, más bien me habría sorprendido
  • ¿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

    • Como ya dijeron otros, Nim es un lenguaje de programación con tipado estático que compila a C, C++ y JavaScript. Tiene buena interoperabilidad con C, lo que facilita la programación de sistemas
      Sobre por qué Nim, en el sitio que hicimos junto con el proyecto lo explicamos así:

      ¿Por qué Nim? Nim es uno de los pocos lenguajes que permite programación de sistemas de bajo nivel con administración de memoria determinista, destructores y semántica de movimiento. El recolector de basura es opcional. Al ser de tipado estático, también ofrece mayor seguridad de tipos. Además, soporta ensamblador en línea, algo esencial para desarrollar sistemas operativos. Otras opciones son C, C++, Rust y Zig. Todos son lenguajes excelentes, pero elegimos Nim por su simplicidad, elegancia y rendimiento.
      Los objetivos generales de diseño de Fusion son bastante ambiciosos, y los dejé enumerados en esa misma página. No quiero hacer otro sistema operativo tipo Unix; quiero experimentar con problemas fundamentales del diseño de sistemas operativos, como el espacio de direcciones único y la seguridad basada en capacidades para protección
      Otra cosa que quiero explorar es cómo modelar procesos y tareas. Creo que deberían modelarse como máquinas de estado que se comunican entre sí mediante canales con tipos estáticos. No es una idea nueva; ya se intentó antes en Singularity OS
      El kernel ya tiene canales y soporte básico para usarlos desde espacio de usuario, pero todavía está en una etapa temprana
      [0] https://0xc0ffee.netlify.app/osdev/01-intro.html
      [1] https://en.wikipedia.org/wiki/Singularity_(operating_system)

    • Nim es un lenguaje genial con inspiración en Ada y Python
    • Está en la documentación del proyecto:
      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”

    • Sinceramente, nunca he sentido que el tamaño de la comunidad sea un problema. El foro de Nim es activo, y cuando vas a pedir ayuda normalmente recibes respuestas rápidas y acertadas
      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

    • Tal vez sea por la edad, pero cuando se fuerza el uso de dos espacios para la indentación, me cuesta leer código en Nim. Los bloques de código casi no resaltan visualmente, y no me gustaría depender de un IDE para que el lenguaje sea legible.