Antes de mais nada é
necessário que se tenha um bom conhecimento de programação. Um SO
não é tarefa para iniciantes de programação, mesmo para quem já
tem algum conhecimento é uma tarefa árdua, pois não existem
ferramentas que facilite a construção do código, como pode ser
feito para aplicativos por IDEs-RAD (Rapid
Application Development - Desenvolvimento Rápido de Aplicação) como o Delphi, VisualBasic e outros.
Além
disso depurar um SO é extremamente difícil porque não tem como
executar ele sob o domínio de um depurador (Debugger), então quando
aparece algum erro, tem que encontrá-lo por eliminação. Vai-se
modificando o código, de forma que algumas partes não são
executadas e observando o resultado. Isto quando, o código está
perfeito mas a falha ocorre por causa de alguma característica do
hardware, não conhecida pelo programador, aí somente a pesquisa de
informações e uma boa dose de sorte para conseguir encontrar o
defeito.
Também é necessário um bom
conhecimento de sistemas operacionais, ter lido livros como “Sistemas
Operacionais: Projeto e Implementação (Andrew
S. Tanenbaum)”, e/ou ter usado e compilado um sistema operacional
Open Source (Linux por exemplo). Pois com isso tem-se uma boa noção
de como um sistema operacional realmente funciona, nisso o Linux é
excelente, mesmo sendo grande demais para ser estudado por um
iniciante, utilizá-lo e saber realmente como configurar, modificar
ou compilar programas manualmente ajuda bastante.
Alias
o Windows é uma péssima ideia para quem está querendo desenvolver
seu próprio sistema operacional, ele pode ser muito mais prático e
fácil para ser utilizado por usuários normais, mas justamente a sua
facilidade oculta todo o conhecimento de como o sistema funciona e
assim, impede que o usuário aprenda mais sobre ele.
Para
desenvolver seu próprio sistema operacional eu recomendo que se
conheça bem o Linux, que se torne um usuário avançado no mundo
Linux, pois este permite que o usuário adquira mais conhecimento com
sua utilização, alem de fornecer todas as ferramentas necessárias,
sem necessitar de qualquer adaptação ou que ela seja mínima.
Eu,
por exemplo, adquiri muito mais conhecimento depois que passei a
utilizar o Linux do que quando não o utilizava. Hoje uso o Ubuntu
12.04 LTS de 64 bits e tenho muitas ferramentas que não estão
disponíveis para o Windows, e se tem similares não são tão
eficientes.
Falando
em ferramentas, antigamente se me fosse perguntado que linguagem
deveria ser usada para escrever um sistema operacional, eu diria sem
falsear: C e Assembly. Mas agora com o conhecimento adquirido digo
que nem é tanto a linguagem que faz a diferença (obviamente certas
coisas só são possíveis de serem feitas em Assembly) mas sim o
compilador, ou seja, a ferramenta em si.
Muitos
usam, ou tentam usar, compiladores pensados para aplicações, não
para sistemas operacionais, e acabam por terem mais problemas do que
resultados, um exemplo disso é tentar usar o Turbo Pascal ou o
Delphi. Embora seja possível, e eu mesmo já tenha feito testes com
eles, eles foram pensados exclusivamente para se criar programas
aplicativos para um único sistema operacional. O que torna o seu uso
muito trabalhoso, que gera a ideia de que Pascal é impróprio para
se criar um sistema operacional, que sei que não é verdade.
Eu
inclusive já fiz diversos testes básicos de um sistema operacional
em Turbo Pascal e Delphi (na época que ainda usava Windows) mas
cheguei a conclusão de que as modificações necessárias nos
compiladores são demasiadamente trabalhosas para os resultados
obtidos. Porem não desisti da ideia de utilizar Pascal como
linguagem, já no universo Linux, comecei a utilizar e fazer diversos
testes com o FreePascal (FPC) e concluí que nele é possível de se conseguir o resultado esperado com o mínimo de esforço, o que é
uma grande vantagem considerando o esforço que já é despendido
para a criação do sistema operacional em si.
O
FPC sendo cross-compiler (compilador ”cruzado”, multi-plataforma)
é pensado de forma a não ter nenhuma restrição de hardware ou de
sistema operacional, e com ele, com alguns ajustes, se consegue um
arquivo executável com nenhum, ou o mínimo overload (sobrecarga,
rotinas e procedimentos que são obrigatórios para um determinado
sistema operacional, mas que se tornam inútil para outro, ou inútil
dentro de um executável de um sistema novo). Alguns outros detalhes
sobre isso ficará um próximo post.
Já
para testar o sistema é conveniente ter uma maquina virtual
instalada, o que permite a codificação e a depuração sem a
necessidade de reiniciar a máquina, ou ainda outro computador em que
possa ser feito os testes, mas a utilização de uma máquina virtual
é muito mais prático, embora não seja garantido que um sistema que
funcione perfeitamente em uma máquina virtual tenha o mesmo
resultado sobre o hardware puro, mas é fundamental que pelo menos o
sistema rode perfeitamente em uma máquina virtual primeiro, alem de
que a máquina virtual protege o hardware e pode evitar danos
inesperados...
Uma
máquina virtual que utilizo é o VirtualBox que realmente virtualiza
o hardware e não somente emula um sistema operacional como acontece com o
DosBox. No VirtualBox é possível instalar e executar basicamente
qualquer sistema operacional.
Como
este post já está ficando grande e começando a parecer complicado,
encurtarei a história e deixarei para os próximos. Mas resumindo
isso é o essencial que se deve saber antes de começar a
desenvolver um sistema operacional.
Eu
uso, recomendo, e considerarei que quem estiver acompanhando está
utilizando alguma distribuição Linux (Ubuntu é uma boa), irá
escrever em Assembly e Pascal, utilizando o FreePascal e o Nasm
(Assembler) e o VirtualBox. Alem de inicialmente mais alguns
“apetrechos”, mas isso vou comentando conforme for sendo
necessário.
<< Anterior - Introdução
Próximo - Boot, fase 1 - Prólogo >>
<< Anterior - Introdução
Voltar a Faça seu próprio sistema operacional.
Gostaria de agradecer por sua iniciativa e por disponibilizar seu tempo para disseminar seu conhecimento de forma livre e gratuita. Muito obrigado!
ResponderExcluirOpa! Só o tempo que atualmente está meio difícil... Mas mesmo que devarinho vamos que vamos :D
ExcluirOi, já procurei muito, mas não achei um bom livro ou tutorial de assembly, poderia me indicar algum? (e se não for pedir demais, um livro ou tutorial médio-avançado de c), obg.
ResponderExcluirTutorial de Assembly? Já olhou o da NumaBoa:
Excluirhttp://www.numaboa.com.br/informatica/tutos/aoa
ou mesmo o em inglês, Art of Assembly?
Em C não faço ideia, mas deve ter um monte aí...
Excluir