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
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
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.
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.
Impressive, super cool, and inspiring!
Example of “creating something impressive in X days” requires a lot of experience and talent that is built over years.
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.
From "Linux System Call Table – Chromiumos"
Code is here: Git Repository
Hare looks like an interesting language. Though this limitation will limit its adoption in this multicore age I think:
Very cool. Most of these Unix clones are usually written in C. This one is written in a new programming language.
Quite cool, by making use of Hare instead.
Waiting for an OS that treats GPU(s) as a first class citizen ...