Se ha lanzado la versión del proyecto Asterinas 0.18, que desarrolla un núcleo escrito en el lenguaje Rust y destinado a su uso en sistemas operativos de propósito general. El núcleo proporciona un ABI (Interfaz Binaria de Aplicación) compatible con el núcleo de Linux y puede utilizarse como su sustituto. Paralelamente, se desarrolla la distribución Asterinas NixOS, que combina el núcleo Asterinas con el entorno del sistema NixOS. El código del proyecto se distribuye bajo la licencia MPL (Mozilla Public License).
Actualmente, el núcleo implementa alrededor de 240 llamadas al sistema de Linux. En la distribución Asterinas NixOS se ha verificado el funcionamiento sobre el núcleo Asterinas de más de 100 paquetes de NixOS. Entre los paquetes compatibles se encuentran: 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 y Codex.
El núcleo proporciona soporte completo para la arquitectura x86-64, soporte parcial para RISC-V 64 y x86-64 con aislamiento basado en Intel TDX, así como soporte inicial para la arquitectura LoongArch 64. Se mencionan como áreas de aplicación prioritarias los sistemas que dependen de Linux ABI, pero que requieren un mayor nivel de seguridad. Por ejemplo, se sugiere usar Asterinas para formar entornos de sistema seguros, máquinas virtuales, que utilizan tecnologías como ARM CCA, AMD SEV e Intel TDX, así como en el lado del sistema anfitrión, que asegura la ejecución de contenedores.
Para reducir la probabilidad de errores al trabajar con memoria, que son la principal fuente de las vulnerabilidades más peligrosas, se emplea el lenguaje Rust y la táctica de uso limitado de bloques unsafe en la escritura de Asterinas. El núcleo se construye utilizando la arquitectura framekernel, donde se intenta combinar las capacidades de aislamiento de los microkernels con la eficiencia de los núcleos monolíticos.
Los componentes del núcleo en Asterinas se colocan en un espacio de direcciones común, y la seguridad se logra a nivel de separación lógica entre el código seguro y el código donde no se pueden excluir problemas de seguridad. El núcleo se divide en dos partes, escritas en Rust: OS Framework y OS Services. En OS Services está prohibido el uso de bloques unsafe, y todas las operaciones de bajo nivel que requieren ejecución de código en bloques unsafe se trasladan a OS Framework y solo están disponibles a través de una API de alto nivel. Todas las llamadas al sistema, los sistemas de archivos y los controladores se implementan a nivel de OS Services y no pueden incluir bloques unsafe.
Para el desarrollo de servicios del sistema y módulos del núcleo, se proporciona la herramienta OSDK (Kit de Desarrollo de Sistemas Operativos), que incluye la utilidad cargo-osdk para crear, compilar, probar y ejecutar componentes del sistema operativo. Para los desarrolladores, se ha preparado un conjunto de bibliotecas OSTD (Biblioteca Estándar del Sistema Operativo), que incluye una edición de las bibliotecas estándar de Rust (crate std), adaptadas para su uso en los componentes del sistema operativo.
Entre los cambios en la versión 0.18:
- En el marco del trabajo para garantizar la ejecución de Asterinas como sistema invitado en contenedores VM de Kata Containers y Confidential Containers, se ha implementado el soporte para espacios de nombres IPC y cgroup, nsfs (/proc/[pid]/ns), cgroups, virtio-fs (para acceder al sistema de archivos compartido con el sistema host), virtio-rng (/dev/hwrng para la entropía al generador de números pseudoaleatorios) y vsock (para la interacción entre los sistemas host e invitado).
- Se ha implementado la llamada al sistema ptrace y capacidades de depuración en el espacio de usuario utilizando GDB y strace.
- Se ha propuesto una nueva implementación del sistema de archivos ext2 y se ha añadido un controlador NVMe. En VFS se ha añadido un mecanismo Dentry (Entrada de Directorio) y se ha reestructurado la implementación de la caché de páginas.
- En la distribución Asterinas NixOS se ha implementado la posibilidad de ejecutar Codex, QEMU y Firefox.
- Se han añadido llamadas al sistema pidfd_getfd, pidfd_send_signal, pivot_root.
- Se ha añadido la implementación inicial. soporte para IPv6.
- Se ha implementado un sistema de capacidades para delegar operaciones privilegiadas individuales.
- Se ha añadido una implementación inicial del marco LSM (Módulos de Seguridad de Linux).
Fuente: opennet.ru
