È stato presentato il rilascio del progetto Asterinas 0.18, che sviluppa un kernel scritto in Rust, pensato per l'utilizzo in sistemi operativi di uso generale. Il kernel offre un ABI (Application Binary Interface) compatibile con il kernel Linux e può essere utilizzato al suo posto. Parallelamente, è in fase di sviluppo la distribuzione Asterinas NixOS, che combina il kernel Asterinas con l'ambiente di sistema NixOS. Il codice del progetto è distribuito sotto licenza MPL (Mozilla Public License).
Attualmente, il kernel implementa circa 240 chiamate di sistema Linux. Nella distribuzione Asterinas NixOS, sono state verificate funzionalità di oltre 100 pacchetti di NixOS che funzionano sopra il kernel Asterinas. Tra i pacchetti supportati figurano: 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.
Il kernel offre un supporto completo per l'architettura x86-64, supporto parziale per RISC-V 64 e x86-64 con isolamento basato su Intel TDX, nonché supporto iniziale per l'architettura LoongArch 64. Tra le aree prioritarie di applicazione ci sono i sistemi legati all'ABI Linux, ma che richiedono un livello di sicurezza superiore. Ad esempio, Asterinas è suggerito per la formazione di ambienti di sistema sicuri. di macchine virtuali, per i quali vengono utilizzate tecnologie come ARM CCA, AMD SEV e Intel TDX, oltre a quelle sul lato del sistema host che gestisce l'esecuzione dei contenitori.
Per ridurre la probabilità di errori nella gestione della memoria, che rappresentano la principale fonte di vulnerabilità pericolose, Asterinas è sviluppato utilizzando il linguaggio Rust e la strategia di utilizzo limitato dei blocchi unsafe. Il kernel è costruito utilizzando l'architettura framekernel, che cerca di combinare le capacità di isolamento dei microkernel con l'efficienza dei kernel monolitici.
I componenti del kernel in Asterinas sono posizionati in uno spazio indirizzabile condiviso, e la sicurezza è garantita a livello di separazione logica tra codice sicuro e codice in cui possono sorgere problemi di sicurezza. Il kernel è suddiviso in due parti, scritte in Rust: OS Framework e OS Services. In OS Services l'uso di blocchi unsafe è vietato, e tutte le operazioni a basso livello che richiedono l'esecuzione di codice in blocchi unsafe sono trasferite in OS Framework e accessibili solo tramite API di alto livello. Tutti i syscalls, filesystem e driver sono implementati a livello di OS Services e non possono includere blocchi unsafe.
Per lo sviluppo di servizi di sistema e moduli kernel è fornito l'OSDK (Operating System Development Kit), che include l'utility cargo-osdk per la creazione, compilazione, testing e avvio dei componenti del sistema operativo. Per gli sviluppatori è disponibile una libreriaOSTD (Operating System Standard Library), che comprende un'edizione delle librerie standard di Rust (crate std), adattata per l'uso nei componenti del sistema operativo.
Tra le novità nella versione 0.18:
- Nel contesto del lancio di Asterinas come sistema guest nei contenitori VM di Kata Containers e Confidential Containers, è stato implementato il supporto per gli spazi dei nomi IPC e cgroup, nsfs (/proc/[pid]/ns), cgroups, virtio-fs (per l'accesso al file system condiviso con il sistema host), virtio-rng (/dev/hwrng per l'entropia al generatore di numeri pseudo-casuali) e vsock (per l'interazione tra sistemi host e guest).
- È stata implementata la chiamata di sistema ptrace e le funzionalità per il debugging nello spazio utente utilizzando GDB e strace.
- È stata proposta una nuova implementazione del file system ext2 e aggiunto un driver NVMe. Nel VFS è stato integrato meccanismo Dentry (Directory Entry) e ristrutturata l'implementazione della cache di pagina.
- Nel pacchetto Asterinas NixOS è stata implementata la possibilità di eseguire Codex, QEMU e Firefox.
- Sono state aggiunte le chiamate di sistema pidfd_getfd, pidfd_send_signal, pivot_root.
- È stata aggiunta l'implementazione iniziale supporto IPv6.
- È stato implementato un sistema di capabilities per delegare singole operazioni privilegiate.
- È stata aggiunta l'implementazione iniziale del framework LSM (Linux Security Modules).
Fonte: opennet.ru
