Skip to content

Latest commit

 

History

History
399 lines (253 loc) · 24.7 KB

Hexagonix.pt.md

File metadata and controls

399 lines (253 loc) · 24.7 KB

Componentes Bibliotecas Screenshots Contribuir Outras informações Código-fonte Download

O sistema operacional Hexagonix

O Hexagonix é um novo sistema operacional Unix-like desenvolvido do zero, escrito em linguagem Assembly para a arquitetura PC (x86). Ele é construído sobre o Hexagon, um núcleo (kernel) monolítico simples e leve, desenvolvido para ser rápido e compatível com hardware recente e mais antigo (Pentium III e mais recentes, com 32 MB de memória RAM ou mais).

O Hexagonix é composto pelo carregador de inicialização do Hexagon (Hexagon Boot ou HBoot), pelo Hexagon (kernel), shells compatíveis, utilitários e bibliotecas. Todos esses componentes foram liberados sob licença BSD-3-Clause.

Algumas características do Hexagonix:

  • Sistema operacional de 32 bits;
  • Completamente escrito em Assembly x86, sendo rápido e leve;
  • Inspirado no design do Version 7 UNIX1, mas totalmente escrito do zero;
  • Compatível com processadores Intel Pentium III (1999) ou mais recentes;
  • Compatível com dispositivos com 32 MB de memória RAM ou mais;
  • Kernel completo com menos de 30 kbytes;
  • Suporte a ambiente de usuário;
  • Chamada de sistema com funções acessadas pelo ambiente de usuário;
  • Requisitos mínimos baixos, compatível com uma ampla gama de dispositivos;
  • Formato binário executável próprio (HAPP);
  • Self-hosting (o montador usado para construir o Hexagonix pode ser executado sobre ele);
  • Abstração de dispositivos;
  • Suporte a gráficos VESA VBE em várias resoluções;
  • Suporte a modo texto;
  • Suporte a portas seriais e paralelas (comunicação serial, debug e impressão);
  • Sistema de arquivos virtual (VFS);
  • Suporte de leitura e escrita em sistemas de arquivos FAT16 (FAT16B);
  • Motor de renderização de fontes gráficas, que podem ser alteradas pelo usuário;
  • Suporte a relógio em tempo real;
  • Compatível com carregador de inicialização próprio (Hexagon Boot - HBoot);
  • Suporte a usuários e permissões.
  • Facilmente extensível;
  • Bem documentado em português e inglês;
  • Totalmente licenciado sob BSD-3-Clause2, disponível aqui.

O Hexagonix não tem como objetivo a construção de um sistema de produção, mas sim de um sistema simples, bem documentado e com interfaces fáceis de compreender, podendo ser utilizado para fins educacionais. O Hexagonix objetiva a pesquisa e implementação de um sistema operacional moderno desenvolvido puramente em Assembly x86 utilizando um montador atual. Para sistemas mais complexos, completos e profissionais desenvolvidos em Assembly x86, visite projetos como o MenuetOS ou KolibriOS.


Idiomas disponíveis

Neste momento, o sistema está disponível em inglês e a documentação está disponível tanto em português (Brasil) quanto em inglês.

Os comentários e código nos arquivos que compõem o código-fonte do sistema estão disponíveis apenas em inglês (a partir da versão System I. Em versões anteriores, o sistema e o código-fonte estavam disponíveis apenas em português do Brasil).

Para permitir colaboração e atrair desenvolvedores que não falam português, todo o sistema foi traduzido para o inglês e seu desenvolvimento será integralmente realizado neste idioma.

Sinta-se livre e incentivado a reportar erros de tradução, seja criando uma issue no repositório que contém o arquivo, enviando um email ou criando um Pull Request com a correção.


Componentes do sistema

O Hexagonix é dividido em uma série de componentes, que atuam em conjunto desde que o dispositivo é ligado. Abaixo você poderá conhecer brevemente cada um deles.

Saturno

O primeiro componente do Hexagonix é o Saturno. Ele é responsável por receber o controle do processo de inicialização realizado pelo BIOS/UEFI e procurar no volume o segundo estágio de inicialização. Para isso, ele implementa um driver para leitura de um sistema de arquivos FAT16. O segundo estágio de inicialização (ver adiante) pode implementar drivers para outros sistemas de arquivos e é responsável por encontrar o Hexagon, carregar módulos HBoot ou carregar um sistema do tipo DOS compatível (versão BETA).

Saturno


Hexagon Boot (HBoot)

O Hexagon Boot (HBoot) é um componente desenvolvido para permitir a inicialização do kernel Hexagon. Até então, a inicialização era realizada por apenas um estágio, que definia um ambiente bem básico, carregava o Hexagon na memória e imediatamente o executava, fornecendo um conjunto bem limitado de parâmetros. Isso se deve ao fato de que o código desse estágio fica restrito a 512 bytes, o que limita a realização de diversos testes e processamento de dados. Como o HBoot, foi possível expandir o número de tarefas realizadas antes da execução do Hexagon, além da possibilidade de fornecer mais informações a respeito do ambiente do dispositivo e de inicialização. Isso é particularmente importante para permitir a criação de uma árvore de dispositivos que pode ser utilizada pelo Hexagon para decidir como manipular cada dispositivo identificado. O HBoot é capaz de verificar quais unidades de disco estão disponíveis na máquina, emitir um tom de inicialização, obter a quantidade de memória RAM disponível instalada e permitir ou não o prosseguimento do processo de boot de acordo com essa informação. Caso nenhuma interação do usuário seja detectada (em um tempo de 3 segundos após a inicialização do HBoot e exibição de mensagens ao usuário), o HBoot irá realizar testes adicionais para verificar a capacidade do dispositivo em executar o sistema e irá carregar e executar o Hexagon (presente em um arquivo no volume nomeado de HEXAGON.SIS no Hexagonix H1 e HEXAGON no Hexagonix H2 e versões posteriores). Após o carregamento, o HBoot transfere o controle para o Hexagon, que é inicializado e armazena no ambiente do kernel os dados fornecidos pelo HBoot.

HBoot

Como interagir com o HBoot

A interação com o HBoot se dá pelo pressionamento da tecla F8 após a inicialização e exibição de mensagens na tela. O HBoot aguarda por 3 segundos alguma intereação e, caso nenhuma tenha ocorrido, continua a executar o protocolo de boot. A interação com o HBoot pode ser interessante para carregar módulos no formato HBoot, fornecer parâmetros de inicialização ao Hexagon, carregar algum sistema do tipo DOS cujos arquivos estejam presentes no mesmo volume ou ainda carregar imagens HAPP de outros núcleos (caso o desenvolvedor deseje utilizar a implementação HBoot em seu projeto). Abaixo, veja mais alguns detalhes de funções adicionais e de diagnóstico que podem ser realizadas via interação com o HBoot antes do carregamento do Hexagonix.

Reportar bugs

O HBoot ganhou muita complexidade desde o início de seu desenvolvimento, em 2020. Devido a esse aumento de código e a natureza de sua operação (16-bit), bugs podem ser encontrados. Os mesmos podem ser reportados no repositório ou por email, disponível no final deste arquivo.


Kernel Hexagon

O Hexagon é um núcleo (kernel) monolítico executado em modo protegido 32-bit, desenvolvido tendo como alvo a arquitetura PC (x86). É um kernel escrito do zero, visando a velocidade e a compatibilidade de harware moderno mas também sendo capaz de ser executado em hardware mais antigo (como um Pentium III). No momento, garante um ambiente monoutilizador, apesar do uso de terminais virtuais, e monotarefa, apesar da capacidade de carregar, manter em memória e controlar mais de um processo, em uma pilha de execução. Futuramente, o kernel poderá receber suporte a execução de múltiplos processos em multitarefa preemptiva. O Hexagon é um kernel Unix-like e tenta implementar uma compatibilidade POSIX, embora longe desta, e compõe a base do Sistema Operacional Hexagonix, embora independente deste. Ele executa imagens executáveis no formato HAPP, desenvolvido exclusivamente para o Hexagon. O Hexagon também implementa uma API bastante sofisticada acessível através de uma chamada de sistema.

Hexagon Kernel


Utilitários do ambiente Unix do Hexagonix

O Hexagonix implementa, junto ao Hexagon, uma série de utilitários Unix-like, com funcionalidade e sintaxe de uso semelhante à sistemas UNIX e Unix-like. Utilitários como init, login, sh, top, ps, cp, rm, cat, clear, man, dentre outros, estão inclusos na distribuição padrão do Hexagonix. Estes utilitários compõem o pacote de utilitários base do Hexagonix. As ferramentas de inicialização de ambiente de modo usuário e login estão neste pacote, bem como vários arquivos de configuração deste ambiente. Estes utilitários não apresentam, no geral, uma interface gráfica, apenas uma interface em linha de comando (CLI). Entretanto, podem ser solicitados por aplicativos que apresentem interface gráfica.

Unix-Apps

Alguns aplicativos e utilitários do ambiente Hexagonix

O Hexagonix inclui muitos dos utilitários Unix que você pode já estar familiarizado, como por exemplo:

  • cat
  • clear
  • cp
  • init
  • login
  • ls
  • man
  • mv
  • ps
  • rm
  • sh (shell padrão)
  • shutdown
  • su
  • top
  • uname
  • whoami, entre outros.

Alguns aplicativos e utilitários foram desenvolvidos exclusivamente para o Hexagonix, como:

  • fnt (utilitário de alteração de fonte gráfica do Hexagonix)
  • hash (shell alternativo)
  • lshapp (obtém e exibe informações de imagens HAPP)
  • lshmod (obtém e exibe informações de módulos HBoot e do próprio HBoot)

Vale lembrar que os utilitários do Hexagonix tentam implementar uma interface POSIX na medida do possível, se assemelhando em sintaxe aos utilitários Unix (FreeBSD e Linux utilizados como modelo).

Aplicativos de terceiros disponíveis para o Hexagonix

O Hexagonix recebeu um port do montador fasm, que foi adaptado para o Hexagonix, permitindo ao usuário desenvolver aplicativos diretamente no sistema. Este port é chamado de fasmX. As alterações adicionadas ao código, assim como licença do software, podem ser encontradas no repositório do fasm para o Hexagonix. Este repositório é um fork do repositório original. O código adicionado é baseado em modificações realizadas do código original e adições autorais. Esse código modificado/autoral pode ser encontrado no repositório, clicando aqui. O fasmX, port do fasm para Hexagonix, sempre é atualizado quando novidades são adicionadas no repositório do fasm. Para indicar que se trata de uma versão estável e testada, o número de versão do fasmX sempre herda a numeração do fasm, sucedido por um caractere x (como exemplo, a versão baseada no fasm 1.73.30, após teste, recebe a numeração 1.73.30x). Você pode reportar bugs ou problemas de geração ou otimização de código na versão para Hexagonix aqui. Para reportar erros gerais do fasm, utilize o repositório oficial.


Utilitários do ambiente gráfico do Hexagonix

O ambiente Andromeda do Hexagonix (Hexagonix-Andromeda) é construído sobre a base sólida fornecida pelo Hexagonix, incluindo aplicativos e utilitários que não implementam a filosofia Unix ou apresentam sintaxe e forma de uso bastante diferentes do que se esperaria de um ambiente Unix. Aqui estão o aplicativo de configurações do sistema, calculadora, gerenciador de fontes, editores de texto e a IDE desenvolvida para o Hexagonix. Estes utilitários podem ou não apresentar uma interface gráfica. Juntamente a eles, compõem o ambiente Hexagonix-Andromeda bibliotecas desenvolvidas para permitir o desenvolvimento de aplicativos, como a biblioteca Estelar.

Andromeda-Apps

Alguns aplicativos e utilitários do ambiente Hexagonix-Andromeda

  • Configurações do sistema (config)
  • Editor de texto Quartzo
  • IDE Lyoko para desenvolvimento de aplicativos
  • Piano eletrônico return Piano;
  • Utilitário de comunicação serial
  • Andromeda Shell (ASH) - Um novo shell para o Hexagonix
  • Calculadora do Hexagonix
  • Utilitário de alteração de fonte
  • Utilitário de desligamento do Hexagonix

Aplicativos de terceiros disponíveis para o Hexagonix-Andromeda

Ainda não existem aplicativos de terceiros disponíveis para o ambiente Hexagonix-Andromeda. Caso esteja interessado, você pode construir o primeiro!


Fontes gráficas do Hexagonix

A instalação padrão do Hexagonix também fornece uma série de fontes que podem ser carregadas pelo aplicativo de configurações ou utilitário de fontes (gerenciador de fontes). Esses arquivos são utilizados para alterar a fonte de exibição em modo gráfico do Hexagonix.

As fontes de modo gráfico para Hexagon são desenvolvidas como um bitmap em Assembly que, compiladas, geram uma imagem binária da fonte com representações de cada caractere. Os códigos das fontes padrão do Hexagonix já foram liberados como código livre e estão disponíveis no repositório de fontes do Hexagonix.

Hexagonix-xfnt


Bibliotecas de desenvolvimento do sistema

O Hexagonix também fornece funções que devem ser utilizadas para interagir com o próprio ambiente do sistema. As bibliotecas são utilizadas para acessar funções implementadas pelo Hexagon ou pelas próprias bibliotecas, permitindo o desenvolvimento facilitado de aplicativos e utilitários tanto para o ambiente Hexagonix quanto para o Hexagonix-Andromeda. As bibliotecas implementam funções para exibição de texto, cálculos matemáticos, envio de mensagens, abertura de arquivos e dispositivos e muito mais. A biblioteca básica (hexagon.s) fornece funções acessíveis para ambos os ambientes possíveis de distribuição, enquanto outras bibliotecas podem ser exclusivas do ambiente Hexagonix-Andromeda. Essas bibliotecas incluem funções gráficas para montar interfaces em modo gráfico (Hexagonix-Andromeda), bem como funções para verificar a versão do sistema atualmente em execução. Os utilitários base Hexagonix realizam a checagem da versão do Hexagon para verificar se podem ser executados, utilizando o utilitário Unix uname ou diretamente por uma chamada de sistema do Hexagon.

Para saber mais e verificar cada função disponível nas bibliotecas de desenvolvimento do sistema, veja o repositório da libasm.

lib

🌙 Capturas de tela

Contribuir e reportar erros

Abaixo você poderá saber mais sobre como contribuir e reportar erros encontrados no Hexagonix.

Contribua no desenvolvimento do Hexagonix

Se você tem conhecimento em criar código em Assembly x86 e gostaria de ajudar no desenvolvimento do sistema, sinta-se a vontade em enviar um email!

Reportar erros

Você pode reportar erros e ajudar a desenvolver o sistema. Para isso, abra uma notificação de erro aqui, informando o erro da forma mais detalhada possível (como marca do dispositivo, processador, quantidade de memória RAM, placa de vídeo e periféricos conectados, bem como o dispositivo utilizado para instalar o sistema, como unidade de disco interna ou mídia removível USB). Lembre-se de informar em qual aplicativo ocorreu o erro, caso o erro ocorra já com o sistema em operação. Caso o problema se dê no processo de inicialização, informe o que foi exibido/o comportamento observado da máquina.

Outras informações


🖼 Inspirações

Diversos outros projetos foram importantes para permitir o desenvolvimento do Hexagonix. Esses projetos contribuiram com ideias e conceitos de design e com código bem documentado que permite o entendimento de diversas estruturas de um sistema operacional, inspirando diversas funções e características hoje disponíveis no Hexagonix.

  • MenuetOS, sistema operacional de código livre escrito em Assembly x86 (32 e 64-bit);
  • KolibriOS, sistema operacional de código livre escrito em Assembly x86 (32-bit);
  • MikeOS, sistema operacional de código livre escrito em Assembly x86 (16-bit);
  • Snowdrop OS, sistema operacional em domínio público escrito em Assembly x86 (16-bit);
  • Alotware, sistema operacional em domínio público escrito em Assembly x86 (32-bit);
  • MS-DOS, sistema operacional histórico, agora parcialmente em código livre, escrito em Assembly x86 (16-bit);
  • Public Domain Operating System (PDOS), sistema operacional em domínio público escrito em C (16 e 32-bit);
  • Version 7 UNIX, sistema operacional histórico escrito em C;
  • FreeBSD, sistema operacional escrito em C;
  • Linux 0.1.1, kernel escrito em C;
  • XNU/Darwin, kernel escrito em C;
  • LittleKernel, sistema operacional escrito em C e C++;
  • Google Fuchsia, sistema operacional escrito em C, C++ e outras linguagens;

A todos esses projetos e desenvolvedores, um enorme agradecimento ❤️.


👥️️ Contribuidores e contatos

Veja os arquivos AUTHORS e CREDITS disponíveis em cada repositório para mais informações sobre autoria, contribuições e contato.


📝 Notas de direitos autorais

Leia a licença para mais informações sobre direitos autorais, propriedade de código e redistribuição que se aplicam apenas aos arquivos disponíveis neste repositório (não se aplicam ao conjunto de arquivos de dados e de código-fonte que compõem o Hexagonix). Sempre fique atento ao arquivo LICENSE disponível em cada repositório para estar ciente dos direitos e obrigações legais.

Footnotes

  1. A arquitetura do Hexagonix (estrutura e utilitários) foi inspirada na elegância e simplicidade do Version 7 UNIX, embora não vise qualquer compatibilidade ou compartilhe qualquer estrutura de código com este. O Hexagonix não utiliza qualquer código derivado do Version 7 UNIX ou de outros projetos. Os utilitários do Hexagonix foram escritos para se assemelharem à função e aparência dos correspondentes no Version 7 UNIX.

  2. Você pode obter mais informações sobre a licença neste artigo do projeto FreeBSD, no artigo da Open Source Initiative ou na página sobre a licença BSD na Wikipedia.