3 pontos por GN⁺ 2024-05-25 | 1 comentários | Compartilhar no WhatsApp

Novo projeto de programação: Bunnix

Contexto do projeto

  • Recentemente, para me afastar um pouco do "trabalho de verdade", comecei um novo projeto de programação de baixo risco e puramente voltado ao lazer.
  • A partir de 21 de abril, decidi ver quanto de um sistema operacional semelhante ao Unix eu conseguiria criar em cerca de um mês para o alvo x86_64.
  • O resultado é um sistema operacional chamado Bunnix.
  • No total, investi 27 dias neste projeto.

Demonstração do Bunnix

  • Um arquivo ISO do Bunnix 0.0.0 está disponível.
  • É possível inicializá-lo usando QEMU:
    qemu-system-x86_64 -cdrom bunnix.iso -display sdl -serial stdio
    
  • Também é possível gravar a ISO em um pendrive e inicializar em hardware real.
  • É bem provável que funcione na maioria dos dispositivos AMD64.
  • Limitação: como não há suporte a USB, é necessário um teclado PS/2.

Componentes do Bunnix

  • O kernel do Bunnix foi escrito principalmente em Hare e inclui alguns componentes em C (lwext4, libvterm).
  • Drivers suportados:
    • PCI (legacy)
    • dispositivos de bloco AHCI
    • tabelas de partição GPT e MBR
    • teclado PS/2
    • porta serial da plataforma
    • relógio CMOS
    • framebuffer (configurado pelo bootloader)
    • sistemas de arquivos ext4 e memfs
  • Recursos do kernel suportados:
    • sistema de arquivos virtual
    • vários dispositivos em /dev
    • emulador de terminal e suporte a termios
    • cerca de 40 chamadas de sistema (por exemplo: clock_gettime, poll, openat, fork, exec etc.)
  • O Bunnix é um sistema de usuário único e, no momento, não aplica modos de arquivo e propriedade no estilo Unix.

Bootloader

  • Inclui dois bootloaders:
    • Boot legacy: escrito em Hare.
    • Boot EFI: escrito em C.
  • Carrega o kernel como um arquivo ELF e, quando necessário, também carrega o initramfs.

Software de espaço de usuário

  • É composto principalmente por software de terceiros:
    • Colossal Cave Adventure (advent)
    • dash (/bin/sh)
    • Doom
    • gzip
    • less (pager)
    • lok (/bin/awk)
    • lolcat
    • mandoc (man pages)
    • sbase (core utils)
    • tcc (compilador C)
    • Vim 5.7
  • A libc é derivada da musl libc e foi modificada para atender às necessidades do Bunnix.

Processo de desenvolvimento do Bunnix

  • O processo de desenvolvimento foi documentado no Mastodon.
  • Parte do código do Bunnix foi trazida de um projeto anterior, o Helios.
  • O suporte a ext4 e a integração com terminais virtuais foram as partes mais difíceis.
  • A implementação do escalonador e do tratamento de sinais também foi desafiadora.
  • O porte de software de terceiros foi relativamente fácil graças à base em musl libc.

Lições aprendidas

  • Aprendi muito sobre sistemas de arquivos.
  • A abordagem para drivers ficou mais simples.
  • Passei a entender a complexidade do tratamento de sinais.
  • Confirmei que um alocador por bitmap é eficaz no gerenciamento de memória.
  • Percebi que um kernel monolítico é muito mais simples de implementar do que um microkernel.

Planos futuros

  • O Bunnix era um projeto de lazer e, por enquanto, não há planos de continuar investindo tempo nele.
  • No futuro, pretendo voltar ao projeto Helios e aplicar muitas das lições aprendidas.
  • Prioridades de melhoria para o Bunnix:
    • cache de sistema de arquivos
    • correções de bugs no ext4
    • procfs e top
    • arquivos mmap
    • mais sinais (por exemplo: SIGSEGV)
    • suporte a múltiplos usuários
    • dispositivos de bloco NVMe
    • dispositivos de bloco IDE
    • suporte a ATAPI e ISO 9660
    • suporte a Intel HD Audio
    • pilha de rede
    • toolchain Hare no sistema base
    • self-hosting

Opinião do GN⁺

  • Valor do Bunnix: o Bunnix é um bom exemplo de kernel hacking com a linguagem Hare, e pode ser interessante para desenvolvedores que querem aprender novas linguagens e tecnologias.
  • Projeto de sistema de arquivos: o projeto de sistemas de arquivos é uma parte importante do desenvolvimento de sistemas operacionais, e o Bunnix oferece muito aprendizado nesse aspecto.
  • Monolítico vs microkernel: é um bom caso para comparar as vantagens e desvantagens de kernels monolíticos e microkernels, oferecendo uma compreensão mais profunda sobre o projeto de sistemas operacionais.
  • Participação da comunidade: o Bunnix é um projeto open source e pode evoluir ainda mais com participação e contribuições da comunidade.
  • Melhorias futuras: os aprimoramentos futuros do Bunnix oferecem boas oportunidades de aprendizado para quem se interessa por desenvolvimento de sistemas operacionais.

1 comentários

 
GN⁺ 2024-05-25
Comentários no Hacker News

Resumo da coletânea de comentários do Hacker News

  • This is really cool. Reminds me of the original Unix was invented in a couple weeks while Ritchie's family went on vacation to CA to visit his in-laws.

    • É um projeto muito legal que lembra como o Unix original foi inventado em poucas semanas.
  • I also finally learned how signals work from top to bottom, and boy is it ugly. I’ve always felt that this was one of the weakest points in the design of Unix and this project did nothing to disabuse me of that notion.

    • Acabei finalmente aprendendo como os sinais funcionam de ponta a ponta, e a coisa é bem feia. Sempre achei que esse era um dos pontos mais fracos do design do Unix, e este projeto não fez nada para me tirar essa impressão.
  • Impressive, super cool, and inspiring!

    • Impressionante, muito legal e inspirador!
  • Example of “creating something impressive in X days” requires a lot of experience and talent that is built over years.

    • Um exemplo de que “criar algo impressionante em X dias” exige muita experiência e talento acumulados ao longo de anos.
  • It was really cool watching the ~daily updates on this on Mastodon - seeing how someone so skilled gradually pieces together a complex piece of software.

    • Foi muito legal acompanhar as atualizações quase diárias sobre isso no Mastodon — ver alguém tão habilidoso montando gradualmente uma peça complexa de software.
  • From "Linux System Call Table – Chromiumos"

    • Compartilhou uma referência sobre a tabela de chamadas de sistema do Linux.
  • Code is here: Git Repository

  • Hare looks like an interesting language. Though this limitation will limit its adoption in this multicore age I think:

    • Hare parece uma linguagem interessante. Mas acho que essa limitação vai restringir sua adoção nesta era multicore.
  • Very cool. Most of these Unix clones are usually written in C. This one is written in a new programming language.

    • Muito legal. A maioria desses clones de Unix costuma ser escrita em C. Este aqui foi escrito em uma nova linguagem de programação.
  • Quite cool, by making use of Hare instead.

    • Bem legal usar Hare no lugar disso.
  • Waiting for an OS that treats GPU(s) as a first class citizen ...

    • Estou esperando um sistema operacional que trate GPU(s) como cidadãs de primeira classe...