We are proud to announce the latest version of Unikraft, v0.21.0!
This release introduces a new Platform Abstraction Layer, support for VirtioFS, an overhauled printing subsystem including a dmesg-style log buffer, an improved crash screen and crash management, the ability to reseed the CSPRNG, an implementation of brk()/sbrk() syscalls, basic netlink socket support, and native build system support for JSON Compilation Database.
[!WARNING] DEPRECATION NOTICE: The old VFS, vfscore, is now marked as deprecated and will be fully removed from the codebase in a forthcoming release. For help on transitioning, consult the migration guide or join us on Discord.
A summary of the most important changes follows.
For more info refer to the accompanying blog post.
arch: Introduce new generic arch API.lib/ukpal: Introduce the Platform Abstraction Layer.plat/native: Introduce libukplat_native.plat/xen: Adapt to PAL (arm64 & x86_64).lib/ukpcpuvar: Introduce per-CPU variables library.lib/uklcpu: Introduce CPU management library.lib/ukpaging: Introduce paging library.lib/ukpm: Introduce system-wide power management library.drivers/firmware/ukefi: Implement power management driver for EFI platforms.drivers/firmware/uksmccc: Introduce SMC Calling Convention library.drivers/firmware/ukpsci: Introduce PSCI library.drivers/firmware/ukacpi: Add MADT-based CPU idx/id map filler; migrate ACPI code from plat/ to drivers/firmware.lib/ukfs-virtiofs: Introduce VirtioFS filesystem driver.drivers/virtio/fs: Add Virtio FS device driver.lib/ukfs: Introduce node driver template.lib/ukprint: Overhaul printing subsystem with dedicated console management, optional dmesg-style kernel log buffer, raw printing facilities, and runtime console loglevel adjustment via ukstore.lib/posix-process: Add per-process sbrk/brk implementations.lib/ukrandom: Add manual and periodic CSPRNG reseed mechanism.lib/ukdebug: Add crash handling facilities with crashdump support.arch: Add support for nested exception handling.lib/posix-time: Provide the times() syscall and CLOCK_THREAD_CPUTIME_ID; support clock_getres() for all clocks.lib/posix-netlink: Add basic Netlink socket support (route and link discovery).support/build: Add native JSON Compilation Database support for IDE and tooling integration (GCC & Clang).arch/x86: Handle ectx in AVX512 cases;plat/common/arm64: Enable FP/SIMD on secondary coresplat/kvm/arm: Do not check for system calls on IRQ entryplat/kvm/x86: Enable AVX512 if available; fix lxboot do_uk_reloc call stack alignment; do hardcoded ACPI port/value write as shutdown fallbacklib/posix-process: Use exit_signal from clone(); raise clone event on PID1; update PID allocation policylib/syscall_shim: Don't inline syscall enter/exit tab wrapper; fix strace build errorlib/posix-vfs: Fix off-by-1 in return of getcwd; fully support typed vopenlib/posix-fstab: Tolerate mkdir failures; correctly handle mounting initrdlib/ukfs: Fix handling of lookup returns, live template type assumption, pathutil assert; allow readlink operation to fail; update typed vopen APIlib/devfs: Make device name size configurable; Expose device_destroy to other link targetslib/vfscore: Mark vfscore as deprecated in Kconfiglib/ukrandom: Fix incorrect size parameters; decouple crypto implementation from swrandom API; improve efficiency of chacha_rand32(); add end-to-end testslib/ukvmem: Do not assert on uninitialized DMA VMA creationlib/ukfallocbuddy: Fix definition of BFA_DIRECT_MAPPEDlib/ukallocregion: Fix variable name in allocregion_posix_memalignlib/posix-socket: Don't block if MSG_DONTWAIT is set in flagslib/ukdebug: Make UK_BUG an unconditional halt; mark crash function noreturn; deprecate asmdumplib/ukboot: Halt system instead of crashing on init_mainlike returnlib/posix-tty: Fix truncated device names; fix TTY devfs initcall priority typoFeel free to ask questions, report issues, and meet new people.