- Tilck é um kernel monolítico compatível em binário com Linux, projetado para fins educacionais e sistemas embarcados
- Tem como objetivo o uso mínimo de recursos, sendo útil em dispositivos embarcados ou ambientes restritos
- Pode executar aplicações de espaço de usuário Linux existentes como BusyBox sem modificações, eliminando a necessidade de criar apps separados
- Suporta as arquiteturas i686 e RISC-V64, com planos futuros de portar também para ARM e CPUs sem MMU
- Inclui diversos recursos como sistema de arquivos, gerenciamento de processos, console e depuração, e também consegue executar Vim, Micropython e Lua
- Suporta boot em QEMU e em hardware real e oferece um ambiente de teste e depuração bem estruturado, facilitando a experimentação até para iniciantes
Overview
-
What is Tilck?
- Tilck é um kernel educacional compatível com Linux com um design pequeno e simples
- Em vez de exigir apps próprios como alguns kernels, ele pode usar programas Linux compilados com toolchain baseada em musl
- Consegue executar vários apps como BusyBox, Vim e TinyCC
- Usa uma estrutura monolithic, processando todas as funções em um único espaço de kernel, como o Linux
- Dá grande importância à execução em hardware real
-
Future plans
- É adequado para ambientes embarcados que exigem sistemas de latência ultrabaixa e totalmente determinísticos
- Mira uma posição de nicho entre Embedded Linux e FreeRTOS/Zephyr
- Há planos para suporte a ARM64, sem MMU, rede (UDP/IP) e armazenamento (FAT32, ext2)
- O objetivo de longo prazo é oferecer recursos de rede e armazenamento para SoCs como o Raspberry Pi 3/4
-
What Tilck is NOT?
- Tilck não é um projeto para substituir o Linux
- Não tem como objetivo ser um sistema operacional desktop (sem suporte a X server etc.)
- Tilck minimiza recursos para priorizar simplicidade e tempo real
-
Tilck vs Linux
- O Linux é complexo por ser multifuncional, enquanto o Tilck escolhe simplicidade, tamanho reduzido e ultrabaixa latência
- Tilck também se esforça para ter uma infraestrutura de testes próxima do nível enterprise
Features
-
Suporte a i686
- Suporta ao mesmo tempo hardware legado (8259 PIC, 8254 PIT etc.) e recursos modernos (SSE, AVX, ACPI etc.)
- Por meio de ACPI, consegue tratar eventos de energia e verificar informações da bateria
- Foi testado em vários ambientes x86 (BIOS, UEFI, CSM etc.)
-
Suporte a riscv64
- Arquitetura focada em embarcardos
- Suporta QEMU e a placa Sipeed licheerv-nano
- As informações do dispositivo são passadas via device tree, sem código dependente da placa no kernel
- Suporta ns16550 UART, controladores de interrupção PLIC/INTC etc.
-
File systems
- Suporta ramfs, devfs e sysfs
- FAT16 e FAT32 têm suporte somente leitura e permitem mapeamento em memória
- Há VFS, mas não há suporte a dispositivos de bloco (tudo funciona na memória)
-
Processes and signals
- Suporta funções básicas de processos e sinais como
fork, vfork, waitpid e rt_sigaction
- Não há multithreading em espaço de usuário, mas o TLS (
set_thread_area) foi implementado conforme os requisitos da libmusl
-
I/O
- Além de
read e write, há suporte a readv, writev, select e poll
epoll não é suportado
-
Console
- Implementa mais de 90% dos recursos do console Linux
- Suporta tanto modo texto quanto modo framebuffer
- A implementação é suficiente para que o Vim funcione perfeitamente no Tilck
-
Userspace applications
- Pode executar apps de console e framebuffer como BusyBox, Vim, Micropython, Lua e fbDOOM
Booting Tilck
-
Tilck's bootloader
- Tilck inclui um bootloader com suporte a BIOS e UEFI
- Permite selecionar modo de vídeo, kernel e editar a linha de comando
-
3rd-party bootloaders
- É possível inicializar o Tilck com bootloaders compatíveis com Multiboot 1.0 (ex.: GRUB)
- Também são fornecidos exemplos de configuração do GRUB
A comment about user experience
- Tilck foi projetado para que até desenvolvedores iniciantes consigam compilar e testar facilmente
- Fornece seus próprios scripts para build da toolchain, sem grande peso de instalação de dependências
- É semelhante ao
buildroot, mas muito mais simples
- Também oferece vários scripts para executar no QEMU
1 comentários
Comentários no Hacker News
Parece ser um projeto interessante que fica no meio do caminho entre um Unix antigo como o xv6 (versão de 1975, veja o Lion book) e um kernel Linux completo; foi legal ver rodando em uma placa RISC-V de US$ 9 chamada LicheeRV Nano (CPU 64 bits de 1,0 GHz (C906), MMU, FPU, unidade vetorial de 128 bits, 256 MB de DDR3), e essa placa tem desempenho parecido com um Pentium III intermediário ou um PowerPC G4; também parece que seria bem fácil portar para o Milk-V Duo 256M, Duo S, ou mesmo o Duo (64 MB de RAM, US$ 5), que usam o mesmo SoC; no momento ainda não há suporte a rede, dispositivos de bloco ou multicore
Um G4 com Altivec entrega em multimídia um nível de desempenho quase equivalente ao de um PIV com SSE2
A cada poucos meses aparece um novo kernel de sistema operacional que roda só em VM, sem abstração de hardware; o Tilck não é desse tipo; o Tilck é um sistema operacional de verdade; roda em hardware real; enquanto o primeiro espaço já está saturado, o Tilck parece preencher muito bem um nicho que há tempos quase não era ocupado
Impressiona como o Tilck inicializa muito rápido e até roda doom em framebuffer; dá para ver no link https://www.youtube.com/watch?v=Ce1pMlZO_mI; também foi legal ver o desenvolvedor respondendo com gentileza diretamente no YouTube às perguntas de um aspirante a cientista da computação
Vi que o Tilck está marcado como "educacional", mas fico me perguntando se, trocando apenas o bootloader, ele não seria utilizável também em dispositivos embarcados pequenos
O arquivo README do Tilck é inesperadamente longo e interessante, e parece leitura obrigatória para qualquer desenvolvedor de sistemas operacionais
Para pessoas como eu, que cresceram estudando com o Minix, fico curioso sobre o quanto o Tilck seria útil para fins educacionais
Compartilhando links de discussões antigas no HN sobre o Tilck:
O Tilck é interessante, mas é uma pena não ter suporte multiusuário; se ao menos suportasse algo como chmod/chgrp e mudanças de proprietário e grupo de arquivos, acho que poderia ser muito mais útil até em coisas como um servidor NFS, então eu gostaria que o desenvolvedor reconsiderasse o suporte multiusuário
A compatibilidade do sistema de arquivos do Tilck é um problema ainda maior do que esse; na verdade, para o meu uso, uma plataforma com confiabilidade comprovada seria melhor, e o Tilck, por ser voltado à educação, não parece adequado do ponto de vista de segurança da informação ou robustez dos dados
Também dá para imaginar um método de apenas gravar os valores user:group no sistema de arquivos e refletir isso em tempo de execução só ao atender clientes; por exemplo, se um servidor de arquivos Linux roda como root, ele consegue fazer verificação de permissões e gerenciar propriedade sem trocar de usuário internamente; além disso, se der fork a cada sessão e mudar para o usuário daquele cliente, o kernel passa a impor as permissões à força, resolvendo automaticamente o tratamento de permissões de arquivos
Este projeto é realmente impressionante; me faz lembrar da época em que se rodava Linux para firewall NAT em disquetes de 3,5 polegadas