1 pontos por GN⁺ 2024-07-15 | 1 comentários | Compartilhar no WhatsApp
  • 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·lld do 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·lld do LLVM e Just
  • Os binários clang e lld devem estar no PATH
    • Se não estiverem no PATH, é possível definir o caminho desses binários no arquivo .env
  • 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

 
GN⁺ 2024-07-15
Opiniões no Hacker News
  • Sou o autor. Se tiverem perguntas, posso responder

    • O coletor de lixo do Nim já criou alguma dificuldade?
      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
    • Qual foi a parte mais trabalhosa do projeto? E você teria algum conselho para quem quer escrever um sistema operacional do zero?
    • Onde estão as capturas de tela?
    • Não uso Nim, mas acho uma linguagem interessante. Já vi reclamações de que era preciso fazer ajustes sempre que recompilavam projetos antigos, então tenho curiosidade sobre com que frequência e com que gravidade acontecem mudanças que quebram compatibilidade
    • Por que escolher Nim em vez de Swift?
      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

    • O processo de escrever me ajudou várias vezes a melhorar o design e a implementação. Escrever faz com que eu questione minhas próprias premissas e me pergunte se o leitor conseguirá entender por que tomei certas decisões
      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

    • Se você decidir criar um RTOS, com certeza eu gostaria de acompanhar
    • ELF é um formato de arquivo muito simples. Eu teria ficado surpreso se fosse difícil de ler
  • 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

    • Como outros disseram, Nim é uma linguagem de programação de tipagem estática que compila para C, C++ e JavaScript. Ela tem boa interoperabilidade com C, o que facilita programação de sistemas
      Sobre por que Nim, explicamos assim no site que criamos:

      Por que Nim? Nim é uma das poucas linguagens que viabilizam programação de sistemas de baixo nível com gerenciamento determinístico de memória, destrutores e semântica de movimentação. O coletor de lixo é opcional. Por ser estaticamente tipada, também oferece mais segurança de tipos. Ela também dá suporte a assembly inline, essencial para desenvolvimento de sistemas operacionais. Outras opções seriam C, C++, Rust e Zig. Todas são ótimas linguagens, mas escolhemos Nim por sua simplicidade, elegância e desempenho.
      Os objetivos gerais de design do Fusion são bastante ambiciosos e estão listados na mesma página. Não quero criar mais um sistema operacional do tipo Unix; quero experimentar problemas fundamentais de design de sistemas operacionais, como espaço de endereçamento único e segurança baseada em capacidades para proteção
      Outra área que pretendo explorar é como modelar processos e tarefas. Acredito que eles devam ser modelados como máquinas de estados que se comunicam entre si por canais com tipagem estática. Não é uma ideia nova; já foi tentada no Singularity OS
      O kernel tem suporte básico a canais e ao uso de canais no espaço de usuário, mas ainda está em fase inicial
      [0] https://0xc0ffee.netlify.app/osdev/01-intro.html
      [1] https://en.wikipedia.org/wiki/Singularity_(operating_system)

    • Nim é uma linguagem legal que parece inspirada em Ada e Python
    • Está na documentação do projeto:
      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”

    • Sinceramente, nunca senti que o tamanho da comunidade fosse um problema. O fórum do Nim é ativo e, quando você vai lá pedir ajuda, normalmente recebe respostas rápidas e precisas
      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

    • Talvez seja coisa da idade, mas forçar indentação com dois espaços torna o código Nim difícil de ler para mim. Os blocos de código quase não saltam aos olhos, e eu não quero depender de uma IDE para tornar uma linguagem legível