1 – Conhecer a História dos Sistemas Operacionais
Pesquisar a fundo a história dos sistemas seria o primeiro passo para você criar um novo sistema operacional, você pesquisar a história dos sistemas operacionais existentes e a história dos computadores em geral.
Você pode começar estudando a história da criação do Linux. Eu tenho um vídeo falando sobre isso.
E eu recomendo que você conheça também a história da criação do Unix que eu também tenho um vídeo falando sobre isso e recomendo também que você conheça os sistemas anteriores e a história dos sistemas operacionais em geral, assim você vai entender de onde veio cada sistema e como nós chegamos onde nós estamos agora no mercado de sistemas operacionais atual.
Recomendo também a história da criação dos sistemas operacionais da Microsoft, tanto o Windows quanto o MS-DOS, existem livros com histórias da criação da Microsoft e biografias do Bill Gates que contam essa história da criação dos sistemas da Microsoft, eu recomendo também o filme piratas do vale do silício que conta a história da Microsoft e da Apple.
É interessante conhecer também a história de outros sistemas como a história dos sistemas operacionais da Apple. Em qualquer biografia do Steve Jobs fala sobre a história do sistema, como que ele criou a Apple e o Mac OS X.
Então você entender e se situar e esse seria o primeiro passo, depois disso eu recomendo que você estude arquitetura de sistemas operacionais.
2 – Estudar Arquitetura de Sistemas Operacionais
Você pode procurar livros de arquitetura de sistemas operacionais. Existem muitos livros ótimos, em qualquer biblioteca de faculdade de análise de sistemas ou de ciência da computação existem vários livros para você conhecer, tem muitas opções mas o que eu recomendo é o livro do Andrew Tanenbaum: sistemas operacionais modernos.
Ele é dividido em duas partes, na parte teórica você vai entender o funcionamento de um sistema operacional, você vai entender como funciona internamente a arquitetura de um sistema.
O Tanenbaum é o cara que criou o sistema operacional Minix que foi uma das inspirações para o Linus Torvalds criar o Linux, então por isso eu recomendo que você leia o livro dele mas existem também outros livros ótimos para a parte teórica mas o dele é o que se aprofunda mais na parte prática porque ele é acompanha o código fonte do sistema operacional Minix.
Analisando as parte do código você vai entendendo na prática em um sistema operacional como funciona o que ele ensina na parte teórica, e assim você você vai estar mais preparado para passar para os próximos passos.
No primeiro passo você vai entender a história dos sistemas operacionais, do mercado de softwares, e de como o mundo da informática chegou até o ponto que nós estamos hoje.
No segundo passo é você estudar arquitetura de sistemas operacionais.
E depois vem o terceiro passo, seria complicado você ir direto para o código-fonte porque você não vai entender nada se você não souber programação a fundo. Ao ler a parte teórica do livro do Tanenbaum ou de outro livro de sistemas operacionais você vai entender a fundo como funciona um sistema operacional internamente.
3 – Aprender a programar em C
Se você baixar esse código do Minix não precisa necessariamente do livro. Na internet tem muito conteúdo disponível sobre arquitetura de sistemas operacionais.
Eu estou falando do Minix por que é um sistema operacional muito mais simples do que o Linux mas você poderia pegar o código do Linux que é disponibilizado e começar a estudar a partir dele.
Mas, o Minix é um sistema operacional muito mais simples para se entender por não ser tão grande e tão complexo quanto o Windows e o Linux.
E para entender o código de qualquer sistema operacional você precisa aprender a programar em C.
4 – Estudar o código-fonte e a estrutura de algum sistema operacional
Você pode se basear no código fonte do Minix ou de outro sistema operacional Open Source como o Linux ou algum sistema BSD.
Para poder estudar o código do sistema operacional Minix, você pode ir analisando cada parte do código junto com o livro de sistemas operacionais do Tanenbaum.
Temos aqui um paradoxo, você só vai ser capaz de estudar e entender o código após você aprender a programar em C em nível avançado. Só o conteúdo que é ensinado na maioria dos cursos de programação em C e também nas faculdades não será o suficiente para isso.
Por outro lado, estudar um código-fonte tão avançado e complexo quanto o código fonte de um sistema operacional é um das melhores formas de aumentar o seu nível de conhecimento em programação, mesmo que você não pretenda criar um sistema operacional comercial.
Outra coisa que você pode fazer e que pode ajudar bastante é você pegar algum sistema operacional qualquer, pode ser o Linux, o Windows ou qualquer outro e você começar a entender a estrutura dele, você entra lá na estrutura de diretórios começa a ver como funciona e como tudo se encaixa, você pode entrar em cada pasta e vai vendo quais arquivos estão lá e ver o nome de cada um, qual a função de cada um, o que acontece se você fizer alguma alteração em algum arquivo de configuração.
No Windows Você tem o registro do Windows que você pode entender o funcionamento mas a fundo do sistema. Eu lembro que quando eu comecei a estudar sobre isso, eu usava o Windows 98 antes de ir para o Linux e eu ficava abrindo as pastas Windows, System, System32 e ficava vendo arquivo por arquivo, eu abria cada um dos arquivos para ver para que serve e de vez em quando eu abria o registro(regedit) e ficava analisando as configurações, como tudo funciona o que acontecia se alterar alguma coisa, e ia entendendo a fundo o funcionamento do Windows mesmo sem ter acesso ao código fonte e depois eu fui fazer a mesma coisa com Linux.
E você pensou que já tinha terminado…?
Não, na verdade ainda nem começou, e vamos para o próximo passo.
5 – Aprender a programar em Assembly
Mais tarde você vai precisar aprender a programar também na linguagem assembly, mas antes disso você pode começar pela maior parte do código que é feito em C e também porque a linguagem C é mais fácil de entender do que Assembly.
Para aprender Assembly, você pode procurar algum livro, tutoriais na internet sobre o essa linguagem de programação ou então procurar algum curso.
6 – Começar o Desenvolvimento do seu Sistema Operacional
Então aprender C é o 3º passo, ler e analisar o código do minix é o 4º e a partir daí o 5º passo é aprender assembly e o 6º passo é você começar a executar na prática, você pegar os códigos do Minix, testar, estudar, fazer alterações no código fonte ver o que acontece, fazer testes, compilar o sistema e fazer a instalação no seu computador para analisar o funcionamento.
Então esse é o 6º passo, colocar a mão na massa… e isso é só você que pode fazer.
E se você quiser simplificar esse processo, eu recomendo que antes de você criar um novo sistema operacional do zero, você começar tentando criar por exemplo uma nova distribuição Linux.
Não precisa ser comercial mas para você aprender a estrutura do sistema e para isso você pode tentar remasterizar uma distribuição Linux que já existe ou então você realmente criar uma nova distribuição do zero, eu recomendo que você pesquise sobre o Linux from Scratch, vai te ajudar nesse processo.
Fonte: http://ninjadolinux.com.br/como-criar-um-sistema-operacional-em-6-passos/
Só pra complementar, seguem links do conteúdo citado:
Cara, muito obrigado! O passo a passo parece até um sol que iluminou o caminho!
Se não quiser usar C, você pode usar Rust tambem, vai te dar muito mais segurança pra construir o kernel sem ter bugs de memoria, e com o sistema de unsafe, da pra fazer literalmente tudo, até colocar assembly dentro do rust, e o rust tambem compila pra várias arquiteturas, claro, vc vai ter várias versoes do mesmo codigo pra arquiteturas diferentes porque não é tudo igual. Rust é uma boa alternativa ao C pra fazer kernels e bootloaders.
Pra configurar um projeto Rust pra baremetal não é muito complicado, recomendo o site https://os.phil-opp.com/ para mais detalhes sobre isso. Atenção, NÃO USE ESSE SITE COMO RECEITA DE BOLO, use como uma fonte de informação, um guia de como começar um kernel em rust, introduzindo alguns conceitos de coisas que existe por baixo dos panos que os kernels interagem e implementam pra fazer as coisas funcionar, mas nao ensina como criar um sistema inteiro.