È stato presentato il rilascio del progetto Asterinas 0.18, che sviluppa un kernel scritto nella lingua Rust e destinato all'uso in sistemi operativi di uso generale. Il kernel fornisce un ABI (Application Binary Interface) compatibile con il kernel Linux e può essere utilizzato al suo posto. Parallelamente, si sviluppa la distribuzione Asterinas NixOS, che combina il kernel Asterinas con l'ambiente di sistema NixOS. Il codice del progetto è rilasciato sotto la licenza MPL (Mozilla Public License).
Attualmente nel kernel sono implementate circa 240 chiamate di sistema Linux. Nella distribuzione Asterinas NixOS sono state verificate le operazioni sopra il kernel Asterinas di oltre 100 pacchetti di NixOS. Tra i pacchetti supportati ci sono: 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 garantisce un supporto completo per l'architettura x86-64, un supporto parziale per RISC-V 64 e x86-64 con isolamento basato su Intel TDX, nonché un supporto iniziale per l'architettura LoongArch 64. Tra i settori prioritari vi sono i sistemi basati su Linux ABI, ma che richiedono un livello più elevato di sicurezza. Ad esempio, Asterinas è proposto per la creazione di ambienti di sistema sicuri. macchine virtuali, per i quali si utilizzano tecnologie come ARM CCA, AMD SEV e Intel TDX, così come sul lato del sistema host che garantisce l'esecuzione dei container.
Per ridurre la probabilità di errori nella gestione della memoria, che sono la principale fonte delle vulnerabilità più pericolose, nella scrittura di Asterinas è stato utilizzato il linguaggio Rust e una strategia di uso limitato di blocchi unsafe. Il kernel è costruito utilizzando l'architettura framekernel, in cui si è cercato di combinare le capacità di isolamento dei microkernel con l'efficienza dei kernel monolitici.
I componenti del kernel in Asterinas sono collocati in uno spazio di indirizzamento comune, mentre la sicurezza è ottenuta a livello di separazione logica tra codice sicuro e codice in cui sono possibili problematiche di sicurezza. Il kernel è suddiviso in due parti, scritte in Rust: OS Framework e OS Services. In OS Services è vietato l'uso di blocchi unsafe, 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. Tutte le chiamate di sistema, i file system e i driver sono implementati a livello di OS Services e non possono includere blocchi unsafe.
Per lo sviluppo di servizi di sistema e moduli del kernel è fornito l'OSDK (Operating System Development Kit), che offre l'utilità cargo-osdk per creare, compilare, testare e avviare i componenti del sistema operativo. È stato preparato un set di librerie OSTD (Operating System Standard Library) adattato per l'uso nei componenti del sistema operativo, che include una versione delle librerie standard Rust (crate std).
Tra le novità della versione 0.18:
- Nel contesto del supporto all'avvio di Asterinas come sistema guest nei contenitori VM di Kata Containers e Confidential Containers, è stata implementata la supporto per gli spazi dei nomi IPC e cgroup, nsfs (/proc/[pid]/ns), cgroups, virtio-fs (per l'accesso a un 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 i sistemi host e guest).
- Implementata la chiamata di sistema ptrace e le funzionalità di debug nello spazio utente tramite GDB e strace.
- È stata proposta una nuova implementazione del file system ext2 e aggiunto un driver NVMe. Nel VFS è stato aggiunto un meccanismo Dentry (Directory Entry) e l'implementazione della cache delle pagine è stata rielaborata.
- Nel distributore Asterinas NixOS è stata implementata la possibilità di avviare Codex, QEMU e Firefox.
- Aggiunti le chiamate di sistema pidfd_getfd, pidfd_send_signal, pivot_root.
- Aggiunta una implementazione iniziale supporto IPv6.
- Implementato un sistema di capabilities per delegare operazioni privilegiate individuali.
- Aggiunta una implementazione iniziale del framework LSM (Linux Security Modules).
Fonte: opennet.ru
