Skip to content
Release version 0.9

New features and major improvements since v0.8:

- Linux ABI breadth: implemented the remaining 36 missing syscalls and 37 RISC-V64 syscalls to close the gap with Linux, plus keyring, fanotify, acct, AIO, pidfd, epoll_pwait2, and module syscalls; fixed syscall numbers so every RISC-V64 entry is reachable.
- Linux ABI depth: real in-kernel splice/tee/vmsplice engine; full membarrier command set with cross-CPU barrier; eventfd live O_NONBLOCK and futex CLOCK_REALTIME validation; userfaultfd, perf_event_open, and PI futexes with remaining stub/ENOSYS markers dropped; PTRACE_SEIZE and PTRACE_INTERRUPT; openat2 RESOLVE_CACHED (dropping the conflicting NO_TRAILING flag); posix timer struct sigevent parsing with SIGEV_THREAD_ID; completed the Linux input ABI so libinput enumerates evdev; exposed /sys/devices/virtual/<subsystem>/<name> for udev and replayed device uevents when udevd's KOBJECT_UEVENT socket binds.
- Desktop and graphics: integrated the XFCE desktop environment with Wayland; added the labwc compositor (wlroots) as the Wayland compositor; wired labwc's DRM path into the GUI image; completed the KMS ioctls and PRIME support to drive labwc; built a real libdrm instead of the header-only stub; integrated Mesa EGL/GLES/GBM and the GTK3 stack; virtio-gpu virgl (3D) feature negotiation and capset query with DRM passthrough and test; boots a stock Alpine XFCE Wayland rootfs via `make distro-run`; dropped WLR_LIBINPUT_NO_DEVICES and tidied init now that input works.
- Performance overhaul: per-bucket locks and second-chance LRU in page_cache, block_cache, and dcache; fsync scoped per inode instead of the whole mount; writeback serialized per vnode instead of globally; 128 KiB sequential readahead window; batched deferred frame frees so munmap/exit take pfa.lock once per chunk; COW fault TLB shootdown targeted at mm active CPUs instead of broadcasting; loongarch64 user vDSO so clock_gettime/gettimeofday avoid full traps; spinlock contention telemetry with callsite attribution; proc_lock taken once per context switch.
- Park/Wake protocol: split the Park/Wake state machine to a per-task park_lock, read the wake reason after sched() without proc_lock, lock-free proc_park_finish after a wake, and fully removed proc_lock from the Park/Wake path.
- Contest stage7 (BuildStorm): restored proven virtio-blk polling completions, ext4 blockwise file reads, and the in-kernel accept path; disabled unsafe batched page fill; acknowledged TLB shootdown after fence; prevented stale TLB frame reuse under parallel builds; silenced false idle hang reports in release builds; added device hotplug lifecycle for USB/PCI and serialized driver progress with lifecycle updates; prevented BuildStorm data corruption; recovered ext4 journal and fixed directory tail split; reclaimed idle vnode and page caches.
- Filesystems and devices: completed the standard fbdev ioctls on /dev/fb0, minimal DRM/KMS and ALSA audio device interfaces, the mem/rtc backend split of devfs.c, and the classic Linux proc files missing vs Uinxed-Kernel; extended /proc, /dev, and tty ioctl file interfaces; mounted ext4 with deferred journal cleanup on flush failure; ext4 namespace lookups take the metadata lock in read mode; made the offset_lock mutex recursive and moved user copies out of it.
- Networking: implemented SCM_CREDENTIALS, SO_PASSCRED and SO_PEERCRED; unified the hybrid network stack, wait layer, and Linux-ABI channel access.
- mm/proc hardening: cleared deferred VMA state across fork, kept the riscv vDSO below the maximum user stack, isolated the fdtable before multithreaded exec, restarted shebang parsing at file offset zero, enlarged VMA index capacity so compiler address spaces keep binary search, and skipped the global shared-dirty harvest scan when the vnode has no MAP_SHARED mappings.
- Toolchain and structure: added support for the Lamina1 toolchain; exported drvmod kallsyms_print so lock.h consumers load; skipped the LVGL desktop in text-mode dev builds; made `make all` reliable from a fresh checkout; kept submodules pristine for the XFCE Wayland desktop by hardening the kernel; reorganized external submodules into categorized subdirectories; added robust final test discovery and the reproducible Linux BuildStorm baseline.

Notable fixes and compatibility:
- drvmod: supported far riscv64 data references and module calls, completed the driver deployment refactor with arch-boundary cleanup.
- Restored proven paths (virtio-blk polling, ext4 blockwise reads, in-kernel accept) reverted by earlier performance experiments.
- Fixed struct sigevent parsing for posix timers and the clone TLS argument order in the aarch64 syscall hook.
- Hardened the VisionFive 2 and LS2K1000 drivers and adaptations.