FrancisBFTC / KiddieOS_Development

O KiddieOS é um sistema operacional open-source básico em desenvolvimento pelo curso gratuito D.S.O.S [Desenvolvendo Sistemas Operacionais Simples]. A intenção deste sistema será: Criar, editar ou excluir arquivos, codificar em uma linguagem própria do sistema, criar objetos visuais e automatizados (desenhos) através desta linguagem, utilizar uma interface simples e intuitiva, criar novas interfaces gráficas, como: Janelas, botões, campos, etc... e estimular crianças, jovens e adultos a programar numa linguagem simples dentro do sistema operacional KiddieOS. A intenção do curso D.S.O.S é dá início ao desenvolvimento de sistemas operacionais utilizando a linguagem Assembly e entender a fundo sobre diversos conceitos internos deste tipo de sistema. Aqui neste repositório serão armazenados arquivos de APIs do KiddieOS, a imagem de disco para teste e futuramente - todo o sistema operacional completo. Visite o link abaixo para nos acompanhar no curso do Youtube, se inscreva neste canal para se manter atualizado e siga-me no GitHub. Vejo vocês lá:
MIT License
46 stars 5 forks source link

Conhecendo o sistema (projeto interessante) #18

Closed ghost closed 4 months ago

FrancisBFTC commented 4 months ago

Valeu! 😅 Se tiver alguma dúvida ou encontrar bugs no projeto, pode perguntar por aqui. 🙂

FrancisBFTC commented 4 months ago

Okay, muito bom saber o seu interesse! Primeiro eu gostaria de saber sobre o quanto você conhece de Assembly x86 Intel sintaxe NASM e FASM. E de que forma você gostaria de colaborar ou ajudar.

FrancisBFTC commented 4 months ago

Bom dia! Pois é, vou explicar algumas coisas. O Assembly x86 arquitetura CISC facilmente você encontra PDFs e materiais no Google, mas eu também já disponibilizo alguns desses materiais nos links dos meus vídeos. Então a primeira coisa que indico é: Assistir e praticar o máximo das minhas vídeos-aulas do curso D.S.O.S. Este sistema operacional nasceu desse curso, no curso eu trato em mínimos detalhes de desenvolvimento desde o início deste sistema, não digo até o estado atual porque o canal deu uma paradinha temporária devido a umas questões pessoais que eu tive, porém até um estado bacana do sistema você encontra como vídeo-aulas no canal, que já pode ser suficiente pra você ter uma experiência mais prática no Assembly.

O Assembly não é difícil, ele é só prática e você saber minerar o que é essencial para seus programas e sistemas. Se você sabe o essencial e tem domínio nisso, você vai longe! Não precisa conhecer todas as instruções da Intel e de todas as tecnologias de processadores, mas é bom sim ter uma base teórica, conhecer o básico de hardware, como as coisas acontecem lá dentro até pra você não ter tanta dificuldade assim em entender o próprio Assembly pois ele é quase que "inteiramente" baseado em Hardware, o Assembly ta um pouquinho acima da camada ISA (Instruction Set Architecture ou Arquitetura do Conjunto de Instruções) que ta bem próximo da microarquitetura de circuitos lógicos, então é bem próximo do hardware, é a linguagem de programação (ou melhor, montagem) mais próxima do hardware que existe (Exceto aquelas relacionadas a VHDL que já é específica pra Hardware). O Assembly é sua ponte de compreensão do software e do hardware juntos.

Assista as aulas, coloque mão na massa e isso já vai te ajudar a conhecer o KiddieOS por dentro e já elaborar ideias pra integrar seus próprios códigos e correções de bugs, mas no próximo comentário vou especificar melhor sobre os tipos de colaboração que você já pode fazer sem precisar de muitos conhecimentos.

FrancisBFTC commented 4 months ago

Sobre a similaridade do meu sistema com outros, o meu sistema é DOS-Like, ao invés de UNIX-Like, isso significa que é baseado em DOS, pois contém uma partição comum MBR, com sistema de arquivos padrão FAT16, divisão de bootloaders em MBR, VBR e finalmente Kernel. Linha de comandos similar ao MS-DOS da época, que hoje conhecemos como "Prompt de Comando", interrupções 21h que é dos próprios serviços DOS pra diversas operações e um kernel & shell de 16-bit, assim como o MS-DOS na época. Mas tem um porém... Ele não é "somente" baseado no DOS e tão pouco foi escrito "reutilizando" código pronto do DOS ou algo parecido, não é bem isso, a inspiração do KiddieOS só foi se "basear" mesmo, ou seja, eu sabia que certos conceitos existia, eu simplesmente reescrevi esses conceitos do zero no meu próprio sistema usando o que eu já conhecia de Assembly x86, foi exatamente isso. Mesclando com estudos de sistemas operacionais no Wiki.osdev.org (Outra fonte perfeita pra você). E quando eu disse que não é "somente" baseado no DOS, eu quis dizer que ele também tem características UNIX-Like, e lá vai uma delas: Interrupções de Software via IDT em 32-bit.

Pode-se perceber que a maioria dos sistemas similares ao UNIX feito por hobbystas mundo a fora, utilizam como chamada de sistemas interrupções de software gerenciados por uma estrutura chamado IDT (Interrupt Descriptor Table) em Kernel modo protegido 32 bits e é uma forma mais "dinâmica" de se chamar rotinas encapsuladas do Kernel por aplicações de software no sistema operacional e o Linux faz isso (um dos motivos por ser Unix-like), que no caso o Linux usa a interrupção 80h pra diversas operações de software. Okay, O KiddieOS segue esse conceito também. Outro exemplo é o formato de alguns comandos do Shell que eu não seguir "literalmente" vindo do DOS ou Windows, mas algo mais próximo do Linux, como o comando CHMOD (Comando pra permissões de arquivos) e comando LF (LF significa List Files que se assemelha ao comando LS do Linux), dentre outros. E outros comandos mais similar ao Windows e outros próprios do KiddieOS, ou seja, eu não tenho um "padrão único" amarrado no KiddieOS, o sistema KiddieOS foi feito pra ser único porém compartilhar características comuns entre o MS-DOS, Windows e Linux (Exceto MacOS). Quais os sistemas que inspirou o KiddieOS nascer e que também auxiliou alguns "layouts" digamos assim na parte de programação e na parte visual? Pois bem, MikeOS é um deles, pela sua simplicidade, por ser feito em Assembly e por ser em 16-bit. MenuetOS é outro, que é um sistema bem avançado, com interface gráfica e tudo mais, 32-bit, inteiramente feito em Assembly. GramadoOS, foi a partir do Gramado que introduzi o FAT16, depois eu só otimizei ele adicionando minhas próprias rotinas e o deixando mais completo e personalizável, também em Assembly. Esses são os sistemas que tirei de base pra me auxiliar em alguns partes, mas 95% do KiddieOS foi tudo idealizado por mim.

FrancisBFTC commented 4 months ago

Tamo junto amigo, já já vou te enviar sobre as metas de colaboração e sobre a sua ideia de colaboração que também faz parte das metas... aguarde um pouco.

FrancisBFTC commented 4 months ago

outra forma de colaboração, penso eu na divulgação enquanto estudo esse código fonte.

Essa forma de colaboração é muito boa, na verdade é perfeita e faz parte das metas, até pra conseguirmos atrair um público-alvo maior. Vou falar mais sobre ela. O que vou te explicar aqui é um arcabouço de colaborações que expliquei também para um outro amigo que também quer colaborar, mas tudo isso ainda vai se transformar em uma documentação acessível para todos, quando a comunidade tiver maior.

O KiddieOS eu dividi ele em duas fases de desenvolvimento: Fase de Construção e Fase de Otimização. A fase de construção é o que estou agora, em desenvolver a base e deixar pronta, um sistema utilizável, no qual já estou há um pouco mais de 3 anos nesta fase. A fase de otimização já é coordenada pelos usuários e colaboradores do sistema, que é responsável por otimizar, escalar, personalizar, acrescentar e corrigir o sistema. Ou seja, melhorar o sistema como um todo, desde a parte do usuário como a parte do Kernel. Porém, pra esta fase de otimização existir, toda a base na fase de construção deve estar pronta, no qual eu quero estar inteiramente responsável por ela. Até porque o sistema KiddieOS ainda está "instável" para uso ou até para otimizações ou compreensão por parte dos colaboradores, portanto, quando a fase de construção acabar, ele vai entrar nessa nova fase, que vai me exigir criar Documentações mais completas e rígidas de todo o código, de cada funcionalidade, rotina, conceito, formas de uso, ou seja, um tutorial completo e homogêneo de como usar e programar o KiddieOS, do núcleo até a parte mais alta (aplicações).

A documentação será separada em algumas partes:

A partir do momento que toda essa documentação de toda a fase de construção já tiver pronta, é aí que se inicia a fase de otimização, onde vou disponibilizar essa documentação para todos em redes sociais, youtube, github, páginas, grupos e demais canais de comunicação. Junto a documentação, terá uma lista de regras para colaboradores e os seus tipos de colaboração. Não vou introduzir a estas regras agora, mas vou especificar os tipos de colaboração possíveis neste momento atual e nos momentos futuros:

Colaboração pro momento atual

Colaboração pro momento futuro

Então, isso é só uma pré-introdução do que seria uma pequena parte da documentação pra colaboradores e usuários. Eu indicaria você começar pelas colaborações pro momento atual, uma das que eu mencionei (ou todas se quiser, você que escolhe) porque ela é a que está disponível por enquanto na fase de construção.

FrancisBFTC commented 4 months ago

OBSERVAÇÕES: A fase de otimização não é uma substituta da fase de construção, na verdade ela vai complementar em cima. Ou seja, todos aqueles tipos de colaboração que eu mencionei vai coexistir junto. Por enquanto, eu que faço isso tudo sozinho, mas no futuro quero uma comunidade inteira, com várias pessoas fazendo cada parte dessa.

Qualquer dúvida que você tiver, será bem-vinda! :)

FrancisBFTC commented 4 months ago

Obrigado! Sua ajuda é extremamente valiosa e significante pra mim.

FrancisBFTC commented 4 months ago

É uma ideia boa, mas nunca criei por ainda não entender exatamente o intuito dessas organizações aqui no Github, ainda tem coisa aqui que quero explorar mais.

Até fiz um teste uma vez criando uma organização pro Curso D.S.O.S, onde o meu intuito era ter uma sala de aula no Github pra quem acompanhasse o curso, podendo criar seus repositórios de prática, e também exercícios e desafios seriam postados ao decorrer das aulas: https://github.com/CursoDSOS

Mas o pessoal não se juntou lá e eu também não busquei saber mais sobre estas organizações, aí ficou lá parado, deixei apenas o repositório. Mas quem sabe eu possa retornar com essa ideia.

FrancisBFTC commented 4 months ago

Este sistema especificamente não pretendo deixar em algum nicho de mercado, não este, mas outro que vem a nascer a partir dele. Eu tenho outra ideia de projeto que já existe há um tempo, mas pra ele existir é preciso do KiddieOS pronto, portanto, o KiddieOS será a base e o núcleo do próximo sistema, que este sim, terá um nicho de mercado.

O KiddieOS é um sistema open-source e livre pra distribuir e modificar, sem fins lucrativos, similar ao Linux. É um sistema didático mais focado no público estudante, em especial dos que estudam sistemas operacionais, Assembly e C. Atualmente ele ainda não tem a linguagem C como desenvolvimento, mas terá no âmbito de aplicações e outros tipos de drivers alternativos no formato ELF que os programadores/colaboradores venha a criar, após eu dar o suporte ao formato ELF.

O KiddieOS será um sistema comum de utilização como qualquer outro, não tendo tantos recursos inicialmente como Linux ou Windows, nem suporte a nuvem ou mobile, mas um sistema minimalista com recursos essenciais pra tarefas tradicionais e especializado em ensinar sobre a parte interna dos sistemas. Então ele terá uma base otimizável e escalável, onde os usuários poderá configurar o sistema a ter outros comportamentos e cada usuário poderá ter seu próprio KiddieOS personalizado. Toda essa personalização poderá ser conhecida e estudada através do código-fonte disponível pelo GitHub e por arquivos de configuração também.

O próximo sistema que vai nascer dele é por âmbito comercial focado em novas plataformas diferentes do Desktop e do Mobile, mas por enquanto não posso revelar ainda porque é apenas uma ideia escrita. O KiddieOS será o núcleo base desse sistema. Este próximo sistema, depois de um protótipo pronto, usarei como trabalho de pesquisa inicialmente para mestrado em computação, mas após isto, ele será comercializado com a aplicação do protótipo. Já o próprio KiddieOS ele será distribuível e livre pra comunidade aprender e aplicar seus conhecimentos de sistemas operacionais. Farei apenas a base e os usuários farão o resto pra fazer ele crescer sozinho.

KiddieOS_Memory_Architecture

Acima contém uma imagem do modelo de arquitetura de memória do KiddieOS. Alguns destes tópicos estão feitos, outros ainda estão em andamento e outros ainda faltam desenvolver, mas pelo menos a parte inicial ali do Shell em 16-bit, seus comandos, o kernel, já ta desenvolvido e estava recentemente em período de otimização e manutenção. Alguns desses drivers também já foram construídos, o gerenciador de janelas também mas ainda falta corrigir erros do gerenciador e outras falhas que deixei em aberto aqui numa outra Issue. Toda essa arquitetura é a versão base do KiddieOS que eu mencionei pra você, a fase de construção. Após esta arquitetura pronta, é que eu vou abrir a colaboração completa (Fase de otimização).

Conhece sobre os sistemas open-sources existentes? TempleOS, MenuetOS, BareMetalOS, etc... pode ser visto neste link centenas destes projetos https://wiki.osdev.org/Projects. Meu foco no KiddieOS é seguir nessa linha primeiro, como alguns destes projetos que você pode estar vendo neste link. São sistemas hobbystas, feitos por entusiastas, alguns deles acredito que já morreram (Como o Terris Davis), outros ainda estão com os sistemas ativos recebendo suporte, e outros abandonados, mas contém centenas deles. Então, O KiddieOS é nesta linha, pra depois o próximo sistema usufruir disso pra incorpora-lo e criar outro sistema, para aí sim ser comercializado.