3 pontos por GN⁺ 2023-09-28 | 1 comentários | Compartilhar no WhatsApp
  • 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, o Essence.ova para 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

Testes e build

  • O build nightly mais recente está disponível em build-essence releases
    • Baixe Essence.tar.xz e 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
  • 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

 
GN⁺ 2023-09-28
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.

    • Nesse sentido, também vejo com bons olhos distribuições como o ElementaryOS. Isso porque elas mantêm, modificam e criam software próprio para que sua distribuição realmente pareça um ambiente integrado.
      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.
    • Como essas distribuições Linux só com a aparência trocada são tão comuns, é fácil supor isso no início.
      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.
    • Lembrou um pouco o Oberon OS: https://en.wikipedia.org/wiki/Oberon_(operating_system)
    • Por outro lado, cliquei já achando que seria mais um Linux dizendo ter sido “feito do zero”, pronto para criticar, mas não era, e isso foi engraçado.
  • 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.

    • Exato. Entre as páginas de distribuições no estilo dos anos 2000, havia muitas que escondiam os screenshots da primeira tela como se tivessem vergonha de mostrar o sistema.
    • A cadeia de ferramentas e a experiência de desenvolvimento foram abordadas um pouco no vídeo. Parecia uma forma bem boa para o usuário aplicar temas ao próprio desktop.
    • Essa combinação de recursos parece uma plataforma bastante interessante para aplicações embarcadas.
      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...

    • Os commits depois de 2021 parecem correções de bugs. Talvez não esteja parado, mas sim em grande parte concluído.
    • Como sempre, não entendo por que fingir que isso vai virar um produto realista.
      É 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, quatro partition_entry_*: times 16 db 0 e dw 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 como fdisk, 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.

    • Isso me faz pensar na elegância, simplicidade e desempenho que estamos perdendo por causa da competição limitada entre sistemas operacionais.
    • Também me fez verificar rapidamente se era mais um projeto absurdamente genial da Justine Tunney.
  • 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.

    • Eu realmente gostaria de ver algo com um modelo de segurança baseado em permissões e amigável ao usuário, para que apps baixados da internet não possam roubar minhas credenciais e documentos.
      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.
    • Venho imaginando e construindo algo assim há anos, mas a vida cotidiana sempre vira prioridade.
      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.
    • Você pode experimentar o haiku-os.org.
    • O que acha dos BSDs ou do 9front, fork do Plan 9?
    • No ChromeOS, é fácil adicionar um ambiente Linux a qualquer momento.
  • O boot em 0,7 segundo do BIOS até o desktop é impressionante.

    • Alguns anos atrás, a Intel fez uma apresentação em que conseguiu boot do Linux em 0,3 segundo, desde ligar a energia até uma UI totalmente interativa, em uma plataforma embarcada.
      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

    • Hoje em dia, quase sempre são gráficos vetoriais. Antigamente usavam bitmaps simples, e este sistema operacional em particular usa gráficos vetoriais
    • Se você está fazendo tudo do zero, arquivos PNG podem acabar sendo mais complexos, porque precisam ser decodificados
      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
    • O link acima também afirma explicitamente que a interface de usuário é totalmente baseada em vetores
      Então dá para encarar aquelas descrições como explicações de como desenhar a UI em vez de usar imagens raster
    • Hoje em dia, em geral isso é baseado em shaders OpenGL com aceleração por hardware
    • Caso você tenha deixado passar esse conceito, vale a pena consultar: https://en.wikipedia.org/wiki/Vector_graphics
  • 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 pessoa