Została zaprezentowana wersja projektu Asterinas 0.18, rozwijającego jądro napisane w języku Rust, przeznaczone do użycia w systemach operacyjnych ogólnego przeznaczenia. Jądro zapewnia ABI (Interfejs binarny aplikacji), kompatybilny z jądrem Linuksa i możliwy do użycia zamiast niego. Równolegle rozwija się dystrybucja Asterinas NixOS, łącząca jądro Asterinas z środowiskiem systemowym NixOS. Kod projektu jest rozpowszechniany na podstawie licencji MPL (Mozilla Public License).
Obecnie w jądrze zaimplementowano około 240 wywołań systemowych Linuksa. W dystrybucji Asterinas NixOS zweryfikowano działanie ponad 100 pakietów NixOS na jądrze Asterinas. Wśród wspieranych pakietów znajdują się: 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 i Codex.
Jądro zapewnia pełne wsparcie dla architektury x86-64, częściowe wsparcie dla RISC-V 64 oraz x86-64 z izolacją opartą na Intel TDX, a także wczesne wsparcie dla architektury LoongArch 64. Priorytetowe obszary zastosowań obejmują systemy oparte na Linux ABI, które wymagają wyższego poziomu bezpieczeństwa. Przykładowo, Asterinas zaleca się do tworzenia systemowego środowiska aplikacji ochronnych, które wykorzystują technologie takie jak ARM CCA, AMD SEV i Intel TDX, a także po stronie systemu gospodarza, który zapewnia uruchamianie kontenerów. maszyn wirtualnych, do izolacji których wykorzystuje się takie technologie, jak ARM CCA, AMD SEV i Intel TDX, oraz po stronie systemu gospodarza, zapewniającego uruchamianie kontenerów.
Aby zmniejszyć ryzyko wystąpienia błędów związanych z pamięcią, będących głównym źródłem najbardziej niebezpiecznych podatności, w trakcie pisania Asterinas zastosowano język Rust oraz strategię ograniczonego użycia bloków unsafe. Jądro zostało zbudowane w oparciu o architekturę framekernel, w której starano się połączyć możliwości izolacji mikrojąder z efektywnością jąder monolitycznych.
Komponenty jądra w Asterinas są umieszczane w wspólnej przestrzeni adresowej, a bezpieczeństwo osiąga się na poziomie logicznego podziału bezpiecznego kodu i kodu, w którym nie można wykluczyć wystąpienia problemów z bezpieczeństwem. Jądro dzieli się na dwie części, napisane w Rust: OS Framework i OS Services. W OS Services zabronione jest użycie bloków unsafe, a wszystkie operacje niskopoziomowe wymagające wykonania kodu w blokach unsafe są przeniesione do OS Framework i dostępne tylko poprzez wysokopoziomowe API. Wszystkie wywołania systemowe, systemy plików i sterowniki są realizowane na poziomie OS Services i nie mogą obejmować bloków unsafe.
Do rozwoju systemowych usług i modułów jądra dostarczany jest zestaw narzędzi OSDK (Operating System Development Kit), oferujący narzędzie cargo-osdk do tworzenia, kompilacji, testowania i uruchamiania komponentów systemu operacyjnego. Dla programistów przygotowano zestaw bibliotek OSTD (Operating System Standard Library), w tym edycję standardowych bibliotek Rust (crate std), dostosowaną do użycia w komponentach systemu operacyjnego.
Wśród zmian w wersji 0.18:
- W ramach działań mających na celu uruchomienie Asterinas jako systemu gościa w kontenerach VM Kata Containers i Confidential Containers wprowadzono wsparcie dla przestrzeni nazw IPC i cgroup, nsfs (/proc/[pid]/ns), cgroups, virtio-fs (do dostępu do współdzielonego z systemem hosta FS), virtio-rng (/dev/hwrng dla entropii do generatora pseudolosowych liczb) oraz vsock (do interakcji między systemem hosta a systemem gościa).
- Zrealizowano wywołanie systemowe ptrace i możliwości debugowania w przestrzeni użytkownika za pomocą GDB i strace.
- Zaproponowano nową implementację systemu plików ext2 oraz dodano sterownik NVMe. W VFS dodano mechanizm Dentry (Directory Entry) oraz przekształcono implementację cache'a stron.
- W dystrybucji Asterinas NixOS wprowadzono możliwość uruchamiania Codex, QEMU i Firefox.
- Dodano wywołania systemowe pidfd_getfd, pidfd_send_signal, pivot_root.
- Dodano wstępną wsparcie IPv6.
- Zrealizowano system capabilities do delegowania poszczególnych uprzywilejowanych operacji.
- Dodano wstępną implementację frameworka LSM (Linux Security Modules).
Źródło: opennet.ru
