Foi lançado o projeto Asterinas 0.19, que desenvolve um núcleo escrito em Rust e destinado ao uso em sistemas operacionais de propósito geral. O núcleo fornece uma ABI (Interface Binária de Aplicação) compatível com o núcleo Linux, podendo ser utilizado como substituto. Paralelamente, está em desenvolvimento a distribuição Asterinas NixOS, que combina o núcleo Asterinas com o ambiente de sistema NixOS. O código do projeto está em desenvolvimento desde 2022 e é distribuído sob a licença MPL (Mozilla Public License).
Atualmente, o núcleo implementa mais de 240 chamadas de sistema do Linux. Na distribuição Asterinas NixOS, o funcionamento sobre o núcleo Asterinas foi verificado com mais de 100 pacotes do NixOS. Entre os pacotes suportados estão: Xfce, Firefox, bash, systemd, Podman, QEMU, rsync, Apache httpd, nginx, SQLite, Redis, Clang, GCC, Go, Lua, Node.js, OpenJDK, Perl, PHP, Python, Ruby, Rust, Git, FFmpeg, PyTorch, TensorFlow, Ollama e Codex.
O núcleo oferece suporte total para a arquitetura x86-64, suporte parcial para ARM64, RISC-V 64 e x86-64 com isolamento baseado em Intel TDX, além de suporte inicial para a arquitetura LoongArch 64. As áreas prioritárias de aplicação incluem sistemas atrelados à Linux ABI, mas que exigem um nível mais alto de proteção. Por exemplo, o Asterinas é sugerido para a formação de ambientes de sistema protegidos. máquinas virtuais, para os quais são utilizadas tecnologias como ARM CCA, AMD SEV e Intel TDX, além de na parte do sistema host que garante a execução de contêineres.
Para reduzir a probabilidade de erros ao trabalhar com memória, que são a principal fonte das vulnerabilidades mais perigosas, o Asterinas foi escrito na linguagem Rust e emprega a tática de uso limitado de blocos unsafe. O núcleo é construído usando a arquitetura framekernel, na qual se tentou combinar as capacidades de isolamento de micro núcleos com a eficiência de núcleos monolíticos.
Os componentes do núcleo em Asterinas são alocados em um espaço de endereços comum, e a segurança é alcançada no nível de separação lógica entre código seguro e código que pode apresentar problemas de segurança. O núcleo é dividido em duas partes, escritas em Rust: OS Framework e OS Services. Em OS Services, é proibido o uso de blocos unsafe, e todas as operações de baixo nível que exigem a execução de código em blocos unsafe foram transferidas para o OS Framework e estão disponíveis apenas através de uma API de alto nível. Todas as chamadas de sistema, sistemas de arquivos e drivers são implementados no nível de OS Services e não podem incluir blocos unsafe.
Para o desenvolvimento de serviços de sistema e módulos do núcleo, é fornecida a ferramenta OSDK (Kit de Desenvolvimento de Sistema Operacional), que oferece a utilidade cargo-osdk para criar, compilar, testar e executar componentes do sistema operacional. Para os desenvolvedores, foi preparado um conjunto de bibliotecas OSTD (Biblioteca Padrão do Sistema Operacional), que inclui uma edição das bibliotecas padrão do Rust (crate std) adaptada para uso em componentes do sistema operacional.
Entre as mudanças no Asterinas 0.19:
- Foi implementado o subsistema DRM (Gerenciador de Renderização Direta), o dispositivo /dev/dri, a interface KMS (configuração do modo do núcleo) e o driver "modesetting", que permitiram iniciar a pilha gráfica padrão baseada no X.Org Server e Mesa, em vez do driver fbdev anteriormente utilizado, que usa framebuffer.
- Adicionou-se suporte para a arquitetura AArch64 (ARM64), que agora é usada como a principal arquitetura durante o desenvolvimento, ao lado de x86-64. Para AArch64, foi implementado um segundo nível de suporte, que prevê a funcionalidade básica operacional, verificação em sistema de integração contínua e cobertura parcial dos testes.
- O trabalho de adaptação do Asterinas para ser executado como sistema convidado em contêineres VM Kata e Contêineres Confidenciais foi continuado. Uma nova implementação do Overlayfs foi proposta, passando com sucesso pelos conjuntos de testes padrão do sistema de arquivos do núcleo Linux e xfstests. Uma nova API de montagem foi implementada. O código do virtio-fs foi estabilizado. O suporte para o protocolo
direct-boot, usado no QEMU, Cloud Hypervisor e Firecracker, foi acelerado durante a inicialização em máquinas virtuais, cuja memória é criptografada usando a tecnologia Intel TDX. - No framework OSTD (Biblioteca de Padrões do Sistema Operacional), uma API básica para a criação de hipervisores minimalistas baseados em Intel VMX foi implementada.
- O suporte para o modelo de desenvolvimento de drivers na linguagem Rust foi adicionado. Um componente aster-device foi incorporado, com funcionalidades similares aos componentes do núcleo Linux, contendo primitivas e abstrações básicas para o desenvolvimento de drivers, mas escrito em Rust sem código inseguro.
- A possibilidade de auto-reconstrução (self-hosting) foi assegurada — a partir de um ambiente com o núcleo Asterinas e pacotes NixOS, agora é possível compilar o núcleo Asterinas.
Fonte: opennet.ru
