- Sistema operacional estilo DOS de 64 bits desenvolvido em Rust, com um pouco de assembly x86 também usado no carregamento do kernel
- Implementa modo texto VGA (80x25), sistema de arquivos FAT12 e pilha de rede IPv4 via SLIP (ICMP/UDP/TCP/HTTP)
- Execução e desenvolvimento em máquina virtual baseada em QEMU, com suporte também a parte de mídia floppy física
- Inclui utilitários básicos como editor de texto simples, autocompletar de arquivos/diretórios com TAB, jogo Snake etc.
Arquitetura e bootloader
- A CPU-alvo é x86_64, com suporte futuro planejado para a arquitetura ARM (aarch)
- As versões iniciais carregavam e executavam o kernel com um bootloader escrito manualmente
- No kernel de 64 bits, usa o bootloader GRUB2 para tratar a entrada em Long Mode e a transição para Protected Mode
- O bootloader stage2 executa tarefas como configuração de GDT, IDT e paginação, além da atribuição do ponteiro Multiboot2
- O kernel é composto por um processador de comandos de shell e vários componentes customizados
Emulação e imagens no QEMU
- O desenvolvimento e os testes são feitos em ambiente de máquina virtual por meio do QEMU
- Criação de imagem ISO: uso de grub2-mkrescue e xorriso
- Suporte à criação e montagem de imagem de floppy FAT12, podendo ser usada em dispositivo real ou com a flag do QEMU (
-fda fat.img)
Procedimento de inicialização
- Ao entrar no kernel, verifica Long Mode, tags Multiboot2, sistema de arquivos FAT12, estado do VGA etc.
- Após exibir um logo em ASCII art, transfere o controle para o loop do shell
Sistema de arquivos
- Suporte ao sistema de arquivos FAT12: leitura/gravação/busca/exclusão de arquivos, criação/exclusão de diretórios etc.
- Suporta criação e sobrescrita de arquivos de texto, além de subdiretórios
- Inclui um utilitário fsck para verificação da consistência do sistema de arquivos
- Há também planos para suporte a FAT32 no futuro
Pilha de rede
- Envio e recebimento de pacotes IPv4 com base no protocolo SLIP
- Suporte ao processamento de quadros Ethernet (testes ainda incompletos)
- Suporta ICMP Echo (Request/Reply), UDP e TCP (máquina de estados SYN/SYNACK)
- Servidor HTTP simples: fornece páginas HTML estáticas
Jogo Snake
- Jogo Snake embutido, com versão futura de multiplayer (P2P TCP) também planejada
- Os dados do jogo (níveis, pontuação) podem ser salvos e carregados em arquivos de texto
- ESC encerra o jogo, e o High Score é salvo de acordo com a pontuação
Valor do projeto e pontos de uso
- Como exemplo de sistema operacional escrito em Rust, permite perceber os ganhos de segurança e produtividade no desenvolvimento de software de baixo nível
- Com testes de SLIP/ICMP, implantação simples e suporte a hardware real, é adequado para experimentar sistemas operacionais e aprender implementações customizadas
- É possível vivenciar diretamente a estrutura de um sistema semelhante ao DOS que combina Rust e assembly x86
1 comentários
Comentários do Hacker News
slattach(1)na pilha de rede; quando fiz uma pilha TCP/IP simples por conta própria, também já conectei via SLIP usandoptyno Linux para integrar com o kernel; antigamente o macOS também tinhaslattach(1), mas parece que foi removido, então fico curioso se alguém já usou SLIP no macOS para criar uma API de rede multiplataforma; como alternativas existemtun/tapno Linux eutunno macOS, mas SLIP é muito mais simples