Fusion, um sistema operacional hobby implementado em Nim
(github.com/khaledh)- Fusion OS é um sistema operacional hobby para x86-64, implementado em Nim
- Os recursos atualmente implementados se dividem em bootloader UEFI, gerenciamento de memória, gerenciamento de tarefas, chamadas de sistema, IPC e suporte a hardware
- O gerenciamento de memória e de tarefas inclui demand paging, multitarefa preemptiva, escalonamento baseado em prioridade e carregador ELF
- O ambiente de execução atualmente é o QEMU, e a compilação exige Nim,
clang·llddo LLVM e Just - Os planos futuros incluem segurança baseada em capability, I/O de disco, sistema de arquivos, shell, GUI e rede
Visão geral do Fusion OS
- Fusion é um sistema operacional hobby para x86-64, implementado em Nim
- O processo de desenvolvimento está documentado em 0xc0ffee.netlify.app
- A seção de capturas de tela inclui o bootloader UEFI, a inicialização do kernel e a tela de execução
- As capturas de tela da GUI são da branch
graphics, que ainda está em desenvolvimento
Recursos atualmente implementados
-
Boot
- Bootloader UEFI implementado
-
Gerenciamento de memória
- Higher Half Kernel com estrutura Single Address Space
- Physical Memory Manager
- Virtual Memory Manager
- Demand Paging
-
Gerenciamento de tarefas
- Kernel Tasks
- User Mode Tasks
- Preemptive Multitasking
- Priority-based Scheduling
- Carregador ELF com suporte a Demand Paged e Relocation
-
Chamadas de sistema
- Interface de chamadas de sistema
- Biblioteca para modo usuário
-
IPC
- IPC baseado em canais
- Passagem de mensagens
-
Hardware
- Enumeração de dispositivos PCI
- Configuração ACPI
- Timer Local APIC
- Interrupções I/O APIC
- Driver de teclado PS/2
- Driver do Bochs Graphics Adapter
Recursos planejados
- Capability-based Security
- Máquinas de estado de tarefas baseadas em eventos
- I/O de disco
- Sistema de arquivos
- Shell
- GUI
- Rede
Compilação e execução
- Para compilar, são necessários Nim,
clang·llddo LLVM e Just - Os binários
clangellddevem estar noPATH- Se não estiverem no
PATH, é possível definir o caminho desses binários no arquivo.env
- Se não estiverem no
- O comando de compilação é o seguinte
just build
- Atualmente, o Fusion roda no QEMU
- O comando de execução é o seguinte
just run
Licença
- A licença é MIT
1 comentários
Opiniões no Hacker News
Sou o autor. Se tiverem perguntas, posso responder
Se não, você acha que isso se deve ao GC que não é stop-the-world, característico do Nim?
https://nim-lang.org/1.4.0/gc.html
Hoje os dois parecem bem parecidos, mas Swift parece ter sido mais testado em produção
O blog e a documentação são excelentes. O equilíbrio entre mostrar e explicar é muito bom; obrigado por compartilhar assim
Como preciso justificar tudo o que faço, isso ajuda a remover complexidade desnecessária e a focar nas partes mais importantes
Diário de desenvolvimento do autor do Fusion:
https://0xc0ffee.netlify.app/osdev/01-intro.html
É bom ver algo assim. Tenho participado de forma intermitente do ecossistema Nim há alguns anos, e é legal ver esse projetinho pequeno e divertido continuar avançando
Muito legal. Abri o módulo ELF e foi divertido ver como ele é fácil de ler
Algum dia eu gostaria de escrever um sistema operacional de tempo real em Nim. Gosto de escrever programas embarcados em Nim, então criar um RTOS também deve ser divertido
O que é Nim e quais são os objetivos gerais de design do Fusion?
Espero que não seja uma pergunta básica demais. Não tenho nenhum contexto, então seria bom se alguém explicasse
Sobre por que Nim, explicamos assim no site que criamos:
https://0xc0ffee.netlify.app/osdev/01-intro.html
Fico feliz em ver mais projetos em Nim. Uso principalmente Python e JavaScript, mas tenho interesse nas vantagens de conhecer mais uma linguagem moderna, rápida e de tipagem estática
Entre Go, Rust, Zig e Nim, Nim é a que mais me agrada. Ela parece a mais parecida com Python, no sentido de ter menos ruído sintático ao ler o código
Gosto muito de usar REPL ao prototipar código novo, e o INim faz isso bem
O maior problema atual do Nim é o tamanho da comunidade, que é pequeno. Por isso, o universo de bibliotecas utilizáveis e mantidas é menor do que em outras comunidades de linguagens. É um problema do ovo e da galinha, mas pode ser resolvido se mais desenvolvedores, eu incluído, decidirem “ser a mudança que querem ver no mundo”
A linguagem também está evoluindo com cuidado e, com Araq à frente, acho que tende a melhorar no longo prazo
O ecossistema não é tão grande quanto o de Python ou Rust, mas, surpreendentemente, a biblioteca padrão inclui a maior parte do que é necessário. Raramente preciso procurar um pacote de terceiros para fazer alguma coisa
Claro, reconheço que Nim está entre as linguagens menos conhecidas. Ainda assim, isso não tira o mérito de ser uma linguagem promissora que faz muito bem o que se propõe a fazer
Acho que a comunidade deveria se concentrar mais em suporte a IDEs. A extensão para VSCode é razoável, mas tem arestas. Eu prefiro IDEs da JetBrains, e o plugin oficial de Nim, para dizer o mínimo, deixa bastante a desejar
Também existe um projeto paralelo para criar um plugin JetBrains para Nim, mas ainda não consegui avançar muito nele
[0] https://forum.nim-lang.org
[1] https://github.com/khaledh/nimjet
Nim é uma excelente linguagem de programação de sistemas e deveria ser mais popular