Tilck é um kernel x86 monolítico educacional projetado para ser compatível com Linux no nível binário.
Foi divulgada a notícia de um novo empreendimento que tem o nome «Project Tilck», em que um funcionário da VMware está desenvolvendo um kernel monolítico que é fundamentalmente diferente do Linux, mas projetado para ser compatível binário com Linux e capaz de executar aplicativos criados para Linux.
O desenvolvimento visa implementar as características mínimas exigidas, evitando sobrecarga de funcionalidade, arquitetura simples e compreensível, simplificação máxima de código, tamanho pequeno de arquivos binários, comportamento previsível (determinístico), garantindo atrasos mínimos, alcançando alta confiabilidade e simplificando os processos de desenvolvimento e teste.
O Tilck é fundamentalmente diferente do Linux porque não tem como alvo servidores multiusuário ou máquinas de desktop, nem um pouco porque isso não faria sentido: o Linux não é grande e complexo por causa de uma implementação ruim, mas por causa do número incrível de recursos que possui. ofertas e a complexidade intrínseca que elas exigem. Em outras palavras, o Linux é ótimo devido ao problema que resolve. A Tilck oferecerá menos recursos em troca de:
código mais simples (de longe)
menor tamanho binário
comportamento extremamente determinístico
latência ultra baixa
desenvolvimento e testes mais fáceis
robustez adicional
O projeto não se destina ao uso em ambientes de servidor multiusuário ou sistemas de desktop. Dos sistemas de arquivos, FAT16 e FAT32 são suportados no modo de leitura, assim como ramfs, devfs e sysfs. Dispositivos de bloco ainda não foram implementados; tudo está na memória.
O VFS é fornecido para abstrair as operações do FS. O multithreading no estágio atual de desenvolvimento está disponível apenas no nível do kernel (ainda não fornecido no espaço do usuário).
O kernel suporta multitarefa preemptiva e implementa cerca de 100 chamadas básicas. ao sistema Linux, como fork(), waitpid(), read(), write(), select() e poll(), que são suficientes para executar aplicativos de console como BusyBox, Vim, TinyCC, Micropython e Lua, bem como aplicativos gráficos baseados em framebuffer, como o jogo fbDOOM. Para criar programas para Tilck, é fornecido um conjunto de ferramentas baseadas na biblioteca Musl.
É mencionado que o conjunto de drivers proposto permite executar o Tilck tanto no ambiente QEMU como em sistemas convencionais inicializando a partir de uma unidade USB. Além disso, também é observado que há suporte para conjuntos de instruções estendidas SSE, AVX e AVX2. Ele oferece seu próprio gerenciador de inicialização interativo que suporta sistemas BIOS e UEFI, mas também é possível usar gerenciadores de inicialização de terceiros, como GRUB2. Quando carregado no QEMU, o kernel pode rodar em um ambiente com 3 MB de RAM.
Atualmente, o projeto se posiciona como um projeto educacional, mas a longo prazo é possível que o Tilck cresça até um nível adequado para uso como um kernel para sistemas embarcados que requerem comportamento previsível e baixa latência.
Embora Tilck use internamente o conceito de thread, o multithreading não está atualmente exposto ao espaço do usuário (existem threads de kernel, é claro). Ambos fork() e vfork() são implementados corretamente e copy-on-write é usado para processos bifurcados. A chamada de sistema waitpid() é totalmente implementada (o que implica grupos de processos, etc.).
Uma característica interessante nesta área merece uma menção especial: apesar da falta de multithreading no espaço do usuário, o Tilck tem suporte total para TLS.
Espera-se que Marcação preencher a lacuna entre soluções baseadas em kernel do Linux e sistemas operacionais dedicados em tempo real, como FreeRTOS e Zephyr. Os planos incluem a migração de processadores Tilck para ARM e unidades de gerenciamento de memória (MMU), adição de um subsistema de rede, suporte para dispositivos de bloco e sistemas de arquivos adicionais, como ext2.
O código é escrito em C e é distribuído sob a licença BSD. No estágio atual de desenvolvimento, o kernel suporta apenas a arquitetura x86, mas o código é projetado com universalidade e implementação em mente para suporte futuro a outras arquiteturas.
finalmente se você está interessado em saber mais sobre isso, você pode verificar os detalhes no link a seguir.