Executando verificação de segurança...
2

Criar uma distribuição Linux é extraordinariamente mais fácil que desenvolver um SO. Você falou como se estivesse no mesmo patamar, mas é tipo a diferença entre desenhar um boneco stick e pintar a Monalisa.

Para criar uma distro, você só precisa de:

  • Compilar o kernel;
  • Montar um initrd filesystem (ex.: usando BusyBox);
  • Montar um root filesystem (você pode usar debootstrap se quiser fazer uma distro Debian-based).

Sim, o cerne é só isso. O resto é detalhe, como escolher o bootloader (você vai escolher GRUB2), buildar ISO de instalação etc.

Para fazer um protótipo de distro, é papo de 1 dia. Um protótipo de SO vai levar semanas ou meses (dependendo do seu nível de conhecimento atual).

Você pode consultar o Linux From Scratch que ele ensina a fazer esse tipo de coisa. Eu não li, mas é um material bastante recomendado nas comunidades: https://www.linuxfromscratch.org/


Agora se você quiser aprender a desenvolver um SO mesmo (e não uma distro Linux), aí é outros 500 porque você vai ter que desenvolver o kernel.

Minha sugestão é começar estudando a parte teórica em livros como "Operating Systems: Three Easy Pieces" (é gratuito): https://pages.cs.wisc.edu/~remzi/OSTEP/

Você vai ter que aprender assembly também. Eu escrevi um livro gratuito sobre isso: https://mentebinaria.gitbook.io/assembly

Se não souber, aprenda C também. Curso gratuito: https://www.mentebinaria.com.br/cursos/programa%C3%A7%C3%A3o-moderna-em-c/

Tendo a base teórica sobre SO e tendo aprendido assembly e C, você já está preparado para começar seu projeto.

Para aprender a desenvolver um bootloader, leia a spec do UEFI: https://uefi.org/specifications

Para aprender a implementar as partes low level do kernel que dependem da arquitetura, você pode ler o manual da arquitetura. Por exemplo, os manuais da Intel: https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html

Inclusive o manual da Intel tem um volume exclusivamente para falar de implementação de sistema operacional (volume 3: System Programming Guide).

Se quiser que seu SO suporte mais arquiteturas, você vai ter que ler o manual para cada uma delas. Normalmente a galera começa desenvolvendo para uma arquitetura só, porque é mais fácil.

Outra questão são os drivers. Cada hardware que você quiser implementar um driver, você vai ter que ler o manual do hardware para saber como ele se comunica.

E uma dica de material bem conhecido: https://wiki.osdev.org/Expanded_Main_Page

Ah, e se quiser que seu kernel seja UNIX-Like, você tem que seguir o padrão POSIX.


Acho que a dica mais importante que eu posso lhe dar, é aprender com quem já fez antes. Existem vários kernels open source, vários drivers open source, vários bootloaders open source etc. Um monte de gente já fez o que você quer fazer. Leia o código deles e aprenda com eles.

Minha recomendação é ler o código fonte do FreeBSD e não do Linux. Sério, evita o código fonte do Linux... Você vai me agradecer depois. e.e

Carregando publicação patrocinada...
1

Opa, ótima resposta! Os caminhos apresentados são quase os mesmos que usei, eu comecei meu projeto através do livro "The Little OS Book", mas chega em uma certa parte que as informações tem de ser procuradas nos materiais que você apresentou.

Caso o autor queira um código fonte fácil de ler para ser estudado, tem o meu hobby OS:
https://github.com/AfonsoDolmen/CoffeaOS

Dá uma olhada lá!