No âmbito do projeto Kerla, está sendo desenvolvido o núcleo de um sistema operacional escrito na linguagem Rust. O novo núcleo é inicialmente voltado para garantir compatibilidade com o núcleo do Linux em nível ABI, o que permitirá executar arquivos executáveis não modificados, compilados para Linux, em um ambiente baseado no Kerla. O código é distribuído sob as licenças Apache 2.0 e MIT. O projeto é desenvolvido pelo programador japonês Seiya Nuta, conhecido pela criação do sistema operacional de micro núcleos Resea, escrito na linguagem C.
Na fase atual de desenvolvimento, o Kerla pode operar apenas em sistemas com arquitetura x86_64 e implementa chamadas de sistema básicas, como write, stat, mmap, pipe e poll, suportando sinais, canais nomeados e trocas de contexto. Para gerenciamento de processos, são fornecidas chamadas como fork, wait4 e execve. Há suporte para tty e pseudoterminais (pty). Até o momento, os sistemas de arquivos suportados incluem initramfs (utilizado para montar o sistema de arquivos raiz), tmpfs e devfs. Um stack de rede com suporte a sockets TCP e UDP foi implementado com a biblioteca smoltcp.
O desenvolvedor preparou um ambiente de inicialização que pode ser executado no QEMU ou no máquina virtual Firecracker com o driver virtio-net, ao qual já é possível se conectar via SSH. A biblioteca do sistema utilizada é a musl, e para utilitários de usuário, utiliza-se o BusyBox.

Com base no Docker, foi desenvolvida uma sistema de construção que permite criar suas próprias imagens de inicialização initramfs com o núcleo do Kerla. Separadamente, está sendo desenvolvida uma shell semelhante ao fish, chamada nsh, e um stack GUI chamado Kazari, baseado no protocolo Wayland.

O uso da linguagem Rust em um projeto permite reduzir o número de erros no código graças à aplicação de técnicas de programação segura e ao aumento da eficiência na identificação de problemas relacionados à memória. A operação segura com a memória em Rust é garantida durante a compilação por meio da verificação de referências, rastreamento da posse de objetos e consideração do tempo de vida dos objetos (escopo), além da avaliação da correção no acesso à memória durante a execução do código. Além disso, Rust oferece ferramentas para proteção contra estouros inteiros, exige a inicialização obrigatória dos valores das variáveis antes do uso, aplica o conceito de referências e variáveis imutáveis (immutable) por padrão, e oferece forte tipagem estática para minimizar erros lógicos, facilitando o tratamento de valores de entrada por meio de técnicas de correspondência de padrões.
Para o desenvolvimento de componentes de baixo nível, como o núcleo do sistema operacional, Rust oferece suporte a ponteiros brutos, empacotamento de estruturas, inserções inline de assembleia e a inclusão de arquivos em assembleia. Para operações que não dependem da biblioteca padrão, existem pacotes de crate independentes para realizar operações com strings, vetores e flags de bits. Dentre os benefícios, destacam-se as ferramentas integradas para avaliação da qualidade do código (linter, rust-analyzer) e a criação de testes unitários, que podem ser executados não apenas em hardware real, mas também no QEMU.
Fonte: opennet.ru
