Essence: um sistema operacional desktop criado do zero para controle e simplicidade
(nakst.gitlab.io)- Projeto de sistema operacional desktop full-stack que desenvolve kernel, drivers, aplicativos e componentes de desktop em conjunto, cobrindo um escopo mais amplo do que um simples experimento de kernel
- Os testes podem começar usando o build nightly
Essence.tar.xz, oEssence.ovapara VirtualBox e o comando de execução no QEMU - Os builds públicos são fornecidos apenas para emuladores para facilitar os testes; builds para hardware real ainda estão previstos
- O kernel inclui componentes essenciais como gerenciador de cache independente do sistema de arquivos, gerenciador de memória, pilha de rede TCP/IP, sistema de arquivos virtual e gerenciador de janelas
- O desktop conta com biblioteca de UI personalizada, renderizador vetorial por software, janelas com abas e renderização de texto multilíngue baseada em FreeType e Harfbuzz
Execução e formas de participação
- O Essence é um projeto de sistema operacional e, em outubro de 2021, havia uma demonstração em vídeo rodando em hardware real
- Os canais de discussão são divididos entre um servidor Discord e um fórum
- Discord: https://discord.gg/skeP9ZGDK8
- Fórum: https://essence.handmade.network/forums
- O desenvolvimento pode ser apoiado pelo Patreon, e o Essence é um projeto contemplado pelo 2021 Icculus Microgrant
- Patreon: https://www.patreon.com/nakst
- Icculus Microgrant: https://icculus.org/microgrant/
Testes e build
- O build nightly mais recente está disponível em build-essence releases
- Baixe
Essence.tar.xze descompacte-o - No VirtualBox, importe
Essence.ova - No QEMU, execute o comando abaixo
qemu-kvm -drive file=drive,format=raw -m 2048 -smp 2 || qemu-system-x86_64 -enable-kvm -drive file=drive,format=raw -m 2048 -smp 2
- Baixe
- O build atualmente fornecido é uma configuração somente para emuladores, voltada à conveniência dos testes
- As instruções de build e teste estão em
help/Building.md
Componentes do OS
-
Kernel
- Gerenciador de cache independente do sistema de arquivos
- Gerenciador de memória com suporte a memória compartilhada, arquivos mapeados em memória, zeramento de paginação multithread e balanceamento do working set
- Pilha de rede TCP/IP
- Scheduler que lida com múltiplos níveis de prioridade e inversão de prioridade
- Carregamento de módulos sob demanda
- Sistema de arquivos virtual
- Gerenciador de janelas
- Mixer de áudio
- Está em processo de reescrita
- Subsistema POSIX opcional
- Consegue executar GCC e algumas ferramentas Busybox
-
Aplicativos
- File Manager
- Text Editor
- IRC Client
- System Monitor
-
Componentes portados
- Bochs
- GCC e Binutils
- FFmpeg
- Mesa para OpenGL renderizado por software
- Musl
-
Drivers
- Gerenciamento de energia: ACPI baseado em ACPICA
- Armazenamento secundário: IDE, AHCI, NVMe
- Gráficos: BGA, SVGA
- Sistema de arquivos de leitura/gravação: EssenceFS
- Sistemas de arquivos somente leitura: Ext2, FAT, NTFS, ISO9660
- Áudio: HD Audio
- NIC: 8254x
- USB: XHCI, dispositivos de armazenamento em massa, dispositivos de interface humana
-
Desktop
- Biblioteca de interface de usuário personalizada
- Renderizador vetorial por software com suporte a animações complexas
- Janelas com abas
- Renderização e layout de texto multilíngue baseados em FreeType e Harfbuzz
1 comentários
Opiniões no Hacker News
No começo achei que fosse só mais uma distribuição Linux com um gerenciador de janelas customizado por cima, mas na verdade era um sistema operacional próprio.
Tem até um kernel customizado e foi realmente feito desde a base. Projetos que criam um sistema operacional ou um navegador do zero têm muito valor, mesmo que não sejam amplamente adotados pelo público, e quero aplaudir os desenvolvedores.
Outras distribuições também se esforçam muito, mas gosto especialmente de ver os apps do KDE se encaixando bem como apps padrão de um sistema operacional. Em contraste, o Windows quase não tem essa unidade; métodos antigos ficam misturados, os apps principais perdem consistência e ele parece cada vez mais um sistema operacional Linux remendado. Se a Microsoft não deixasse a equipe de marketing ditar os rumos do Windows e se concentrasse em lapidar o sistema operacional, acho que teria se tornado um produto incrivelmente excelente.
O Essence foi feito do zero, e é bem impressionante por ter uma UI limpa e, ao mesmo tempo, “não Linux”. Diferente dos casos em que se coloca uma aparência mais bonita e amigável por cima de uma distribuição existente, isso parece seguir um caminho muito mais raro, e talvez até possa ir atrás do ChromeOS.
A landing page é realmente excelente. Ela mostra quase tudo que eu queria saber logo de cara.
Tem screenshots bonitas, suporte a hardware de baixo consumo, inicialização com menos de 30 MB de armazenamento e ainda menos RAM, ausência de tarefas em segundo plano, ótimo desempenho, código aberto sob licença MIT e até vídeo de demonstração. Vários usos em áreas que os sistemas operacionais desktop mainstream não atendem logo vêm à mente, e em que ele poderia ganhar popularidade. Fiquei mais curioso sobre a cadeia de ferramentas de desenvolvimento e como começar, mas isso parece ser coberto em parte pelos links do Discord/Patreon. Se destacassem recursos como interface touch como suporte de primeira classe, ele poderia se diferenciar melhor dos sistemas operacionais desktop existentes, e também dá para imaginar dispositivos IoT que precisam de UI.
Se a API de gerenciamento de janelas for decente, acho que daria para usar tranquilamente como um sistema de controle embarcado. Compilando para WASM, também deve ser possível criar uma UI web bem razoável aproveitando um sistema de janelas falso.
Parece que a maior parte do trabalho parou desde abril de 2022: https://gitlab.com/nakst/essence/-/graphs/master?ref_type=he...
É parecido com eu dizer que vou construir um jumbo. Talvez eu consiga montar algo como um biplano precário, mas não consigo fazer o motor nem uma fuselagem em tamanho real; também não tenho mecânicos nem fábrica, então no fim ninguém vai usar esse jato.
Gostei da estrutura no final do código do bloco de boot em assembler.
A forma como ele segue com
times (0x1B4 - ($-$$)) nop,disk_identifier: times 10 db 0, quatropartition_entry_*: times 16 db 0edw 0xAA55é elegante. Mostra como o identificador do disco e as clássicas 4 partições MBR coexistem com o código de boot dentro dos primeiros 512 bytes. A estrutura parte do pressuposto de que, depois de copiar o bloco de boot para o disco, um programa externo, por exemplo uma ferramenta comofdisk, define os valores das partições. Já vi muito código de bloco de boot, mas foi a primeira vez que vi uma organização assim.Gostaria que um sistema operacional assim encontrasse seu espaço entre pessoas que não precisam de toda a compatibilidade retroativa e dos recursos de servidor do Linux, e que também querem evitar Microsoft e Apple.
Quero algo parecido com o ChromeOS, mas não tão fechado.
Esse é o maior problema que as pessoas enfrentam hoje, mas, até onde sei, parece haver pouco interesse real em tentar uma nova abordagem no nível do sistema operacional.
Se houvesse um modelo de negócios viável só com o sistema operacional, diferente do modelo da Apple baseado em venda de hardware ou do modelo do Android baseado em anúncios — e do Windows, que caminha cada vez mais nessa direção —, talvez fosse diferente. Quem sabe um dia, se eu ficar financeiramente independente, seja possível.
O boot em 0,7 segundo do BIOS até o desktop é impressionante.
Era um caso automotivo, voltado para situações em que recursos como infotainment ou painel de instrumentos precisam estar disponíveis logo após a energia dos acessórios ser ligada.
Eu tinha curiosidade sobre como um sistema operacional desenha uma GUI de alta qualidade
Em desenvolvimento bare-metal, já desenhei gráficos simples usando um framebuffer linear, mas sempre fiquei curioso sobre como são geradas as imagens que representam componentes de UI em interfaces como essa ou em telas do Windows. Não vejo arquivos PNG para as bordas das janelas, e sim código que define as cores dos pixels de acordo com o tema. Fico me perguntando se os componentes de UI de um sistema operacional normalmente são desenhados programaticamente, em vez de serem feitos em um editor de imagens e depois usados em tiling
Por outro lado, se há uma API de desenho, é mais fácil mapear uma codificação de gráficos vetoriais na forma de chamadas aos comandos de desenho correspondentes. Ao mesmo tempo, isso também resolve o problema de redimensionamento, e ativos vetoriais geralmente ocupam muito menos espaço
Então dá para encarar aquelas descrições como explicações de como desenhar a UI em vez de usar imagens raster
Artigo relacionado: Essence: Desktop operating system built from scratch - https://news.ycombinator.com/item?id=29950740 - janeiro de 2022, 290 comentários
Normalmente, tentativas de criar um novo sistema operacional parecem irrealistas demais, como querer ferver o oceano, mas gostei deste. Parece ter potencial imediato
Como dica, primeiro, adicionar virtualização cedo permitiria executar outros sistemas operacionais e aplicativos familiares. No longo prazo, explorar uma virtualização integrada, parecida com o Parallels Coherence, poderia permitir rodar apps externos sobre o sistema operacional host e servir como uma solução de curto e médio prazo para o problema de “não há apps” que assombra novos sistemas operacionais. Segundo, seria bom limitar o escopo de suporte a hardware a algumas plataformas-alvo, como laptops voltados a Linux da System76 e da Framework, além do Raspberry Pi. Terceiro, considerar trazer e usar drivers do Linux ou do BSD por meio de uma API compatível talvez permita lidar com dispositivos cujo suporte é notoriamente difícil, como placas Wi‑Fi
Ao olhar a página do autor do Essence, nakst, em https://nakst.gitlab.io/, há esta frase
nakst's webpage // This site works best with JavaScript disabled; excelente pessoaO mundo é pequeno