11

[PITCH] Estou desenvolvendo meu próprio OS (de verdade)

Olá, devs.

Recentemente fiz uma publicação sobre o CoffeaOS, um sistema operacional de 32 bits desenvolvido em C e Assembly, porém não teve tanto alcance kkkk.

Por que?

Sempre fui apaixonado em tecnologia e curioso o suficiente para querer entender como as coisas funcionam por de baixo dos panos, e se é assim, por quê não desenvolver o meu próprio OS?

O projeto é totalmente educacional com cada linha de código comentada pois eu precisava consolidar meu conhecimento de alguma forma.

Como eu usei IA?

Sim, eu usei IA. Mas não para gerar código (credo) e sim para me auxiliar em entender lógicas complexas, além de artigos, livros e a própria OSDev Wiki foram cruciais durante o desenvolvimento. Estruturar uma IDT na memória e passar uma pilha de dados gigante para código C é uma dor de cabeça kkk.

O que pretender ser?

Nada... Na verdade o projeto é apenas, como eu disse, para estudo e minha própria diversão. Futuramente, pretendo trazer uma GUI simples, assim como um sistema de arquivos e um shell básico. Por enquanto, ainda não é possível interagir com o OS (porém a base já está pronta para um driver de teclado).

https://github.com/AfonsoDolmen/CoffeaOS

Espero que gostem da ideia! Sugestões e feedback são bem vindos.

Carregando publicação patrocinada...
4

Sempre gosto de incentivar que as pessoas aprendam como as coisas funcionam por debaixo dos panos, então parabéns pela iniciativa.

Vi que uma das referências que você mencionou no README é o livro de assembly que eu escrevi para a Mente Binária. Sou suspeito para falar, mas não é uma boa referência. Muito ruim (zoeira :v).

Sobre alegação de ser um sistema operacional "de verdade", acho importante falar algo. Pessoal iniciante nesse tema acaba chamando qualquer programa que roda em bare metal como "sistema operacional", mas não é bem assim.

Por exemplo: hoje em dia é muito comum os computadores terem uma tela de setup gráfica com até mesmo suporte a mouse, desenho de imagens, animações etc. Olha só: tem suporte a comunicação com mouse, teclado, gráficos, roda em protected mode e tudo mais.

A tela de setup da sua placa-mãe é bem mais complexa e tem bem mais recursos que o seu projeto, mas a tela de setup da sua placa-mãe não é um sistema operacional.

Só porque roda em bare metal não significa que é um sistema operacional. É importante entender isso. Hoje em dia nem tanto, mas antigamente era comum programar softwares e até mesmo jogos que rodavam em bare metal e você bootava diretamente neles via um disquete.

Talvez pela arte ter sido perdida no tempo, a galera se esqueceu que programas podem ser desenvolvidos assim e começaram a achar que tudo que roda fora de um sistema operacional é um sistema operacional... Não é bem assim que a banda toca.


Um sistema operacional de verdade serve como um ambiente para a execução de outros softwares por cima dele. Então, o sistema operacional vai abstrair o gerenciamento do hardware e fornecer uma ABI (Application Binary Interface) para que programas possam rodar por cima do sistema operacional.

Se o seu software não é um ambiente com uma ABI que permite que outros softwares rodem por cima dele, então o seu software não é um sistema operacional. Ser bootável, rodar em protected mode e configurar a GDT/IDT não o torna um SO.

Não estou dizendo que você fez como o garoto no outro post e você parece ter mesmo a intenção de desenvolver um SO de verdade. Mas acho importante esclarecer isso, porque é muito comum galera iniciante fazer um software bootável e chamar isso de "sistema operacional".

E última coisa: desenvolver um kernel de verdade é muito mais complexo que desenvolver um driver. Driver, em sua maioria, é só seguir manuais. Não querendo dizer que é fácil desenvolver um driver, mas um kernel é absurdamente mais complexo.

2

Caraa, que satisfação te encontrar aqui. Seu livro me deu uma base muito boa sobre a arquitetura x86!

Lembro também que na época eu tinha 15/16 anos e eu escrevi um bootloader em modo real. Utilizava funções da BIOS para teclado, desenhar na tela e etc... Época boa. Tenho até vídeo desse bootloader funcionando pois eu havia postado no Facebook.

Eu entrei em contato com você uma vez pra tirar dúvidas de como eu poderia comparar duas strings em ASM ksksks

E você tem toda razão, não é um SO e realmente, desenvolver drivers é muito mais fácil do que gerenciamento de memória, processos e etc. Mas ainda vou chegar lá.

Muito obrigado pelo seu feedback, possuo um grande respeito por você!!

3

Teve um outro caso de "criação de Sistema Operacional" popular nos últimos dias que recebeu várias críticas por não ser exatamente um SO. Recomendo ver a publicação de notícia e a de crítica. Tem comentários de algumas pessoas que parecem entender do assunto, então se vir algo interessante lá, pode pedir uma indicação, orientação, dica, feedback etc.

O pior que vai acontecer é a pessoa não querer dedicar tempo para te indicar algo ou ver mais fundo o seu projeto.

Estou sugerindo responder diretamente os comentários que te interessam porque assim a pessoa recebe uma notificação por e-mail (caso não tenha desativado isso), e tem mais chances dela ver seu projeto e te responder do que numa publicação (que não é notificada).

Já li histórias antigas de pessoas que tentaram contato por e-mail com pessoas "famosas" para conseguir alguma coisa assim. Para entender melhor um assunto, ou divulgar algum projeto que parece alinhado com o que a pessoa trabalha. Hoje em dia isso parece mais raro, mas se você realmente tem interesse e conseguir passar isso pra pessoa, pode ser que consiga algo, nem que seja um "leia isso aqui: <link>".

3

Sim, fiquei sabendo. Inclusive cheguei a ver o post original.

Não sou uma pessoa que comenta muito sobre esses casos, até porque conteúdo falso gerado por IA, está muito comum hoje, principalmente na comunidade OSDev. Concordo com o post da crítica, precisamos ter olhar crítico, mas não serei o cara que irá criticar, gosto de fazer isso em silêncio kkk.

É interessante o que você disse sobre contatar pessoas para compartilhar conhecimento, e recomendo isso a todos que tem curiosidade sobre. Eu gosto de interagir mais no subreddit /OSDev, lá tem uma comunidade (90% gringo) muito forte sobre a cultura de OS.

2

Talvez meu comentário tenha ficado confuso. Não quis dizer para você criticar, e sim responder algum comentário de "quem criticou".

Por exemplo, vamos supor que o fulano123 comentou algo como "Não é um SO porque não tem gerenciamento de bananas digitais", e você não entende como fazer isso, então você pode responder "Estou desenvolvendo um SO aqui (<link>), e queria entender mais sobre isso, você tem alguma indicação ou pode dar um feedback sobre isso no meu projeto?"

Obviamente é só um exemplo, espero que você não precise se preocupar com gerenciamento de bananas digitais :)

Pelo seu comentário, imagino que já consiga alguma ajuda no Reddit. De toda forma, boa sorte no seu projeto!

2

Meus 2 cents,

Provavelmente vou chover no molhado e falar coisas que voce ja sabe, mas vamos la:

  • Kernel: Existe todo um debate sobre microkernel (ex. HURD) e monolitico (ex. kernel Linux) - ja que voce esta indo nesta seara, da uma olhada sobre o assunto, incluindo as discussoes do Tanenbaum vs Torvalds sobre esta questao.

  • Apesar de kernel ser legal, eh no desenvolvimento de drivers que realmente o bicho pega: entender o funcionamento de um determinado hardware e suas especificacoes, e em muitos casos fazer a engenharia reversa tendo como base a comunicacao.

Em termos de resultado da "empregabilidade", entender e desenvolver drivers eh especialmente util - nao que kernel nao seja, mas conseguir criar/modificar/manter um driver de um dispositivo no Linux, p.ex., da uma visilibidade na comunidade (e em certo nivel, para as empresas do nicho) bem razoavel.

No mais, parabens pela iniciativa !

Eh sempre interessante acompanhar projetos como este, que fogem do arroz-com-feijao.

Repositorio devidamente starreado e forkeado - obrigado por compartilhar !

Saude e Sucesso !


Este post foi favoritado via extensão TABNEWS FAVORITOS

Tem curiosidade sobre IA ? Da uma olhada no meu LIVRO: IA PARA ENGENHEIROS

3

Concordo, desenvolver um driver é uma dor de cabeça e tanto. O tanto de Datasheet que eu li kkkk, ainda bem que o OSDev Wiki tem muito conteúdo sobre dispositivos.

Pretendo ler um livro que me recomendaram, chama-se "Linux Device Drivers". Futuramente pretendo focar nesse assunto, pois eu quero muito um dia contribuir com o Kernel Linux.

Cara, sobre a estrutura do Kernel, o livro "Sistemas Operacionais Mordernos" do Tenenbaum fala muito sobre. Principalmente sobre o Kernel híbrido (Windows) e Monolítico (Linux), é uma ótima leitura para quem tem interesse.

Obrigado pelo seu comentário e pelo apoio!

2

Meus 2 cents extendidos,

Li "LDD" faz um tempao - apesar de ainda ser util pacas, a verdade eh que para o que existe de mais recente ele esta um bocado defasado.

Faz bastante tempo que nao leio mais nada do tema, mas algumas sugestoes mais atualizadas sao:

  • Linux Kernel Programming (2ª Edição, 2024), Kaiwan N. Billimoria

  • Linux Device Driver Development (2ª Edição, 2022), John Madieu

  • Mastering Linux Device Driver Development (2021), John Madieu

Faceis de achar em pdf (p.ex. https://github.com/Frak8/Linux_Device_Driver_Books)

Novamente - sucesso na sua jornada, e nao esqueca de continuar compartilhando.

Saude e Sucesso !


Este post foi favoritado via extensão TABNEWS FAVORITOS

Tem curiosidade sobre IA ? Da uma olhada no meu LIVRO: IA PARA ENGENHEIROS

2

Você não tem 12 anos, tem ? hahahahaha
Depois do último carinha que postou sobre estar desenvolvendo um SO, vão aparecer milhares fazendo o mesmo tal qual ocorreu com o projeto Loveyuu que faturou 40+ mil em 1 mês...
Dito isso, parabéns por seu projeto e não apague o post se críticas vierem.

2

Não, não tenho 12 anos kkk. Tenho 21.

Obrigado! E fique tranquilo, o meu código é tão sujo que devs experientes xingaram a IA para desenvolver por mim kkk</ironia obs="meu código não está limpo, mas não tão sujo kk">.

2

blz? Eu já fiz a minha graça também desenvolvendo um SO para iniciação científica. Na época tinha imaginação, livros e só. Se chamava SOGRA (sistema operacional gráfico). Criei um bootloader onde usava a INT10 para inicializar a parte gráfica, criei minha própria biblioteca de INT para controle de gáficos como texto, janelas, drag-drop e outras coisas que não lembro mais. E lembro que também criei uma FAT baseada em HASH do nome dos arquivos. Foi uma execlente experiência. O que eu mais usei foi a pré compilação de funções em C que gerava códigos em ASM para facilitar as coisas. Boa sorte.

1

Deve ter sido um projeto gratificante! Um filesytem FAT baseado em Hash deve ter sido um desafio e tanto...

Pode me explicar melhor como foi a implementação? Por que tomaram a decisão desse filesystem específico? Gostaria muito de saber.

Obrigado pelo feedback!!

2

Não entendi nada do código rsrsrs

Vc está escrevendo código baremetal para rodar em processadores Intel ?

Um tempo atrás estava tentando criar um SO para a beagle bone Black por achar que a arquitetura ARM era mais fácil que a x86, mas acho que é mais complicada.

Estava tentando fazer em assembly puro.
Não queria nenhum software estranho rodando por baixo do meu kkkkkk.

Mas a documentação da arquitetura para programar em assembly é muito ruim na minha opinião.

No caso da Intel, como vc carrega código assembly no pc para que esse código seja a primeira coisa a ser executada ?

1

Opa amigo, o primeiro código Assembly a ser executado no CoffeaOS é justamente o arquivo arch/x86/loader.s.

Quem executa ele, é o GRUB. O arquivo simplesmente escreve alguns cabeçalhos do GRUB na memória para que o mesmo identifique como um arquivo compatível com o multiboot.

Assim que ele identifica, o controle é passado para meu loader. E lá é onde eu inicializo a pilha do Kernel (importante para passar argumentos para C via cdecl) e logo após, passo o controle para minha função kmain em C.

1

Massa o projeto! Se você estiver buscando uma forma simples e super leve de monitorar os acessos e conversões do seu SaaS em tempo real, dá uma olhada no Mytrics (mytrics.com.br). Criei ele exatamente para devs que querem métricas diretas sem complicação de script pesado.