Maestro, um kernel e um sistema operacional semelhante ao Unix escrito do zero em Rust

Maestro

Captura de tela do Mestre

A ferrugem ganhou popularidade suficiente a tal ponto que se tornou uma das escolhidas para ser integrada como linguagem secundária no Linux, bem como em outros sistemas operacionais, como é o caso do Android, que já possui parte do código em Rust, Windows que também deu a aprovação, entre outros.

Ferrugem provou ser uma linguagem robusta e gerou tanta confiança Alguns sistemas operacionais já foram criados com esta linguagem de programação e só para citar alguns temos: Redox, Também temos Kernels escritos do zero, como Kerla ou o Kernel usado no satélite que a China lançou recentemente.

A razão para mencionar isto é que recentemente me deparei com uma notícia que me chamou a atenção e é que Foi apresentado um projeto no qual é desenvolvido um Kernel escrito em Rust e que é parcialmente compatível com Linux.

O nome deste projeto é "Professor" e como mencionado, é um kernel semelhante ao Unix escrito em Rust que implementa um subconjunto de chamadas de sistema do kernel Linux suficiente para criar ambientes de trabalho padrão. Como tal, o projeto “Maestro” não é algo novo, já que o desenvolvedor menciona que o projeto nasceu em 2018, mas naquela época estava escrito em C e devido aos diferentes benefícios e características do Rust, o projeto foi reescrito de zero.

Na página do projeto Os motivos da mudança são descritos:

Nesse momento decidi mudar para Rust (meu primeiro projeto nesta linguagem), o que representou diversas vantagens:

  • Reinicie o projeto desde o início, usando as lições aprendidas com os erros anteriores.
  • Seja um pouco mais inovador do que apenas escrever um kernel semelhante ao Linux em C. Afinal, basta usar o Linux na hora.
  • Use a segurança da linguagem Rust para aproveitar algumas dificuldades de programação do kernel. Usar o sistema de escrita Rust permite transferir parte da responsabilidade pela segurança da memória do programador para o compilador.

No desenvolvimento do kernel, a depuração é muito difícil por vários motivos:

  • A documentação geralmente é difícil de encontrar e as implementações do BIOS podem apresentar erros (com mais frequência do que você pensa).
  • Na inicialização, o kernel tem acesso total à memória e pode escrever onde não deveria (seu próprio código, por exemplo).
  • Solucionar problemas de vazamento de memória não é fácil. Ferramentas como valgrind não podem ser usadas.
  • O gdb pode ser usado com QEMU e VMWare, mas o kernel pode se comportar de maneira diferente quando executado em um emulador ou máquina virtual diferente. Além disso, esses emuladores podem não suportar gdb (por exemplo, VirtualBox).
  • Alguns recursos estão faltando no suporte ao gdb no QEMU ou VMWare e o gdb pode até travar às vezes

Em relação a características do projeto, destaca-se que o Kernel é monolítico e atualmente só é compatível com sistemas x86 no modo de 32 bits. A base de código do kernel cobre cerca de 49 mil linhas, sendo executável tanto em hardware real quanto em ambientes virtualizados, como QEMU ou VirtualBox.

No desenvolvimento atual do «Maestro», 31% foram implementados (135 de 437) de chamadas de sistema Linux. Isto é o suficiente para carregar um ambiente de console baseado em Bash e na biblioteca C padrão Musl. Além disso, o ambiente baseado em Maestro pode executar alguns utilitários do conjunto GNU coreutils e pacotes básicos de qualquer sistema Unix. Atualmente, o trabalho está sendo feito na implementação de uma pilha de rede e também no desenvolvimento de um servidor X11, um gerenciador de pacotes, um carregador de inicialização, um instalador e outros utilitários essenciais para a construção de um sistema operacional.

Entre as Os recursos disponíveis do Maestro se destacam as seguintes::

  • Controladores para teclado e terminal PS/2 com modo texto e suporte parcial para sequências ANSI.
  • Sistema de alocação de memória com suporte para memória virtual.
  • Agendador de tarefas baseado no algoritmo round-robin com suporte para sinais POSIX.
  • Definição de dispositivos PCI.
  • Controlador IDE/PATA.
  • Sistema de arquivos Ext2.
  • Suporte para sistemas de arquivos virtuais /tmp e /proc.
  • Capacidade de montar partições de disco FS, MBR e GPT.
  • suporte ao initramfs.
  • Controlador RTC para temporizador e tempo preciso.
  • Suporte para carregar módulos do kernel.
  • Capacidade de executar arquivos executáveis ​​no formato ELF.

Para os interessado em conhecer um pouco mais sobre o projeto, você pode verificar os detalhes no link a seguir.  Já os interessados ​​no código do projeto devem saber que é distribuído sob a licença do MIT.