Skip to content

v0.7.1: Phase 7 Waves 1-3 -- GPU Drivers, Advanced Wayland, Desktop Completion

Choose a tag to compare

@doublegate doublegate released this 28 Feb 15:36
· 742 commits to main since this release

VeridianOS v0.7.1 -- Phase 7 Waves 1-3: GPU Drivers, Advanced Wayland, Desktop Completion

Release Date: February 28, 2026
Tag: v0.7.1
Commits since v0.7.0: 1 (42 files changed, +19,489/-1,045 lines)
Build: Zero errors, zero warnings on x86_64, AArch64, RISC-V (clippy -D warnings)
Boot: 29/29 tests passing, 2x BOOTOK on all 3 architectures


Overview

Phase 7 Waves 1-3 transform VeridianOS from a basic compositor demo into a feature-rich graphical desktop environment. This release implements GPU driver infrastructure (VirtIO GPU with PCI discovery + vendor GPU framework stubs), 8 Wayland protocol extensions (layer-shell, idle-inhibit, DMA-BUF, multi-output, xdg-decoration, XWayland), a user-space Wayland client library, and 14 new desktop modules covering the full desktop environment stack: application launcher, notification system, system tray, screen locker, Alt-Tab application switcher, animation framework, virtual workspaces, window decorations, compositing effects, MIME database, syntax highlighting, system settings, and image viewer.


Wave 1: GPU Drivers + Dynamic Linker Completion

GPU Infrastructure (5 sprints)

VirtIO GPU Driver (kernel/src/drivers/virtio_gpu.rs, ~1,900 lines)

  • PCI device discovery: vendor 0x1AF4, device 0x1050, subsystem 0x0010
  • Split virtqueue ring buffer management with descriptor chains
  • 2D resource lifecycle: RESOURCE_CREATE_2D (XRGB8888/ARGB8888), RESOURCE_ATTACH_BACKING with scatter-gather DMA descriptors, SET_SCANOUT for display output binding
  • Framebuffer operations: TRANSFER_TO_HOST_2D for host-side buffer transfer, RESOURCE_FLUSH for display refresh
  • Public API: init(), with_driver(), is_available(), flush_framebuffer(), get_display_size(), enumerate_gpu_devices()

GPU Manager Integration (kernel/src/graphics/gpu.rs)

  • enumerate() wired to VirtIO GPU PCI bus scan for real device discovery
  • submit() delegates to VirtIO GPU flush for hardware-accelerated output
  • swap_buffers() triggers framebuffer refresh cycle
  • All 4 TODO(phase7) markers resolved

Bootloader GOP Detection (kernel/src/drivers/gpu.rs)

  • detect_framebuffer() reads UEFI GOP boot info with fallback to hardcoded 0xFD000000
  • detection_mode() reports "GOP detected" or "fallback"

Vendor GPU Framework Stubs

Driver File Lines Generations PCI IDs
Intel i915 drivers/gpu_i915.rs ~300 6 (Skylake-Meteor Lake) Skylake GT2, KBL GT2, CFL GT2, ICL GT2, TGL GT2, MTL-M
AMD amdgpu drivers/gpu_amdgpu.rs ~320 4 (GCN5-RDNA3) Vega, Navi 10/21/22/23/31/33
NVIDIA Nouveau drivers/gpu_nouveau.rs ~300 4 (Pascal-Ada) GTX 1060-1080, RTX 2070-2080Ti, RTX 3070-3090, RTX 4080-4090

Each stub provides: PCI device ID tables, architecture/generation classification, MMIO register offset maps, BAR extraction, PCI bus probing (x86_64 only).

Dynamic Linker Completion (3 sprints)

userland/ld-veridian/ld-veridian.c (expanded from ~1,340 to ~1,845 lines)

Feature Implementation
Multi-LOAD ELF fix Page-boundary rounding for PT_LOAD segments, anonymous mmap + pread
Lazy PLT binding GOT/PLT resolver with _dl_runtime_resolve(), DT_JMPREL/DT_PLTREL processing
Symbol versioning Elf64_Verneed/Vernaux/Versym structs, DT_VERSYM/VERNEED/VERDEF parsing
Weak symbols Fallback resolution when strong symbol not found
LD_PRELOAD Colon-separated library list injection before main dependencies
LD_LIBRARY_PATH Search path ordering: env -> DT_RPATH -> /lib -> /usr/lib
TLS PT_TLS segment allocation, ARCH_SET_FS via arch_prctl
Init/Fini arrays DT_INIT_ARRAY forward execution, DT_FINI_ARRAY reverse
RELRO PT_GNU_RELRO + SYS_MEMORY_PROTECT for read-only relocations

Wave 2: Advanced Wayland Features (8 sprints)

New Wayland Protocol Modules

Module File Lines Protocol
Layer Shell wayland/layer_shell.rs ~620 zwlr_layer_shell_v1
Idle Inhibit wayland/idle_inhibit.rs ~220 zwp_idle_inhibit_manager_v1
DMA-BUF wayland/dmabuf.rs ~770 zwp_linux_dmabuf_v1
Multi-Output wayland/output.rs ~780 wl_output v4
XWayland desktop/xwayland.rs ~560 X11 socket stub

Layer Shell: 4 layers (Background/Bottom/Top/Overlay), anchor bitfield (Top/Bottom/Left/Right), exclusive zones for panel reservation, keyboard interactivity modes, up to 64 managed surfaces.

DMA-BUF: 10 fourcc format codes (XRGB8888, ARGB8888, XBGR8888, ABGR8888, RGB888, BGR888, YUYV, NV12, NV21, YUV420), DmaBufParams builder pattern with multi-plane support, VirtIO GPU resource ID import as native handle.

Multi-Output: HiDPI scaling (1x/2x/3x), horizontal/vertical/mirror arrangement modes, output geometry (position, physical size, subpixel layout, transform, mode, scale), hotplug add/remove events.

XDG Decoration: negotiate_decoration() with server-side preference, DecorationMode enum (ClientSide/ServerSide).

XWayland: Socket infrastructure at /tmp/.X11-unix/X0, X11 window-to-Wayland surface mapping, window type classification (Normal/Dialog/Toolbar/Menu/DND/Tooltip/Popup).

User-Space Wayland Client Library

userland/libwayland/ (~1,440 lines across 3 files)

  • wayland-client.h: Public API with WlDisplay, WlSurface, WlBuffer, WlShmPool, WlSeat types
  • wayland-client.c: Raw VeridianOS syscall interface (no libc dependency), SHM pool creation, surface lifecycle, event dispatch loop
  • Makefile: Cross-compilation with $(CC) and $(AR) variables

Desktop IPC Services

services/desktop_ipc.rs (expanded to ~590 lines)

  • 6 IPC endpoints: WM=1000, INPUT=1001, COMPOSITOR=1002, NOTIFICATION=1003, CLIPBOARD=1004, LAUNCHER=1005
  • 14 typed message types: WindowCreate/Move/Resize/Close/Focus, KeyEvent, MouseEvent, SurfaceCreate/Damage, NotificationShow, ClipboardCopy/Paste, LauncherOpen/Search

Wave 3: Desktop Completion (14 sprints)

Window Manager Enhancements

Feature Implementation
Placement heuristics Cascade (30px offset), Center, Smart (overlap minimization via gravity scoring)
Snap-to-edge Left/Right/Top/Bottom + 4 corner zones, automatic resize to zone
Tile layouts Horizontal, Vertical, Grid with automatic window distribution
Server-side decorations Title bar (28px), border (2px), min/max/close buttons (20px), active/inactive colors, hit testing
Alt-Tab switcher Centered modal overlay, keyboard cycling (Tab/Shift-Tab), selection highlight, timeout dismiss
Virtual workspaces 4 workspaces with per-workspace window lists, switch/move, Ctrl+Alt+Arrow, panel indicators
Compositing effects 3-pass box blur shadows (4-16px radius), alpha blending, per-window opacity
Animation framework 9 easing functions (Linear, EaseIn/Out/InOut, Quad, Cubic, Bounce), fixed-point 8.8 math, 256-entry lookup

Desktop Environment Modules

Module File Lines Description
Application Launcher launcher.rs ~1,210 Grid layout, .desktop parser, search-as-you-type, 5 default apps, keyboard nav
Notification System notification.rs ~440 Toast popups, urgency levels (Low/Normal/Critical), tick-based expiry, stacking
System Tray systray.rs ~470 CPU/memory monitors (color-coded), clock, separator rendering, click handling
Screen Locker screen_lock.rs ~530 Password auth (SHA-256), 5-attempt lockout (30s), idle timeout, padlock icon
Notification IPC notification_ipc.rs ~230 Cross-process notification delivery via IPC endpoint 1003

Desktop Application Enhancements

Module File Lines Features
MIME Database mime.rs ~1,130 31 MIME types, magic byte detection (8 formats), extension mapping, category classification
Syntax Highlighting syntax.rs ~1,320 Rust (36 keywords)/C (27)/Shell (23) highlighters, 6 token types, 26 unit tests
System Settings settings.rs ~730 5 panels (Display/Network/Users/Appearance/About), sidebar navigation
Image Viewer image_viewer.rs ~720 PPM P3/P6 + BMP 24/32-bit, nearest-neighbor zoom (0.1x-10x), pan, auto-detection

File Summary

New Files (21)

Category Files
GPU Drivers virtio_gpu.rs, gpu_i915.rs, gpu_amdgpu.rs, gpu_nouveau.rs
Wayland Extensions layer_shell.rs, idle_inhibit.rs, dmabuf.rs, output.rs
Desktop Environment animation.rs, app_switcher.rs, launcher.rs, notification.rs, systray.rs, screen_lock.rs, xwayland.rs
Desktop Applications mime.rs, syntax.rs, settings.rs, image_viewer.rs
Services notification_ipc.rs
Userland Library libwayland/wayland-client.h, wayland-client.c, Makefile

Modified Files (19)

File Change Type
graphics/gpu.rs VirtIO GPU integration, real device enumeration
drivers/gpu.rs GOP framebuffer detection
drivers/mod.rs 4 new driver module declarations
desktop/mod.rs 12 new desktop module declarations
desktop/window_manager.rs Placement, snap, tile, workspaces (+616 lines)
desktop/renderer.rs Server-side decorations (+391 lines)
desktop/panel.rs Layer-shell integration, workspace indicators (+419 lines)
desktop/wayland/compositor.rs Shadow rendering, alpha blend (+69 lines)
desktop/wayland/shell.rs XDG decoration negotiation (+90 lines)
desktop/wayland/mod.rs 4 new protocol module declarations
services/desktop_ipc.rs 6 IPC endpoints, typed messages (+415 lines)
services/mod.rs notification_ipc module declaration
ld-veridian.c Lazy PLT, versioning, TLS, RELRO (+2,420/-1,045 lines)
Cargo.toml, commands.rs, fs/mod.rs Version bump 0.7.0 -> 0.7.1
README.md, CHANGELOG.md, CLAUDE.md Documentation updates

Build and Verification

Check Result
./build-kernel.sh all dev Zero errors, zero warnings (all 3 architectures)
cargo clippy --target x86_64-unknown-none -p veridian-kernel -- -D warnings Clean
cargo clippy --target aarch64-unknown-none -p veridian-kernel -- -D warnings Clean
cargo clippy --target riscv64gc-unknown-none-elf -p veridian-kernel -- -D warnings Clean
cargo fmt --all Clean
QEMU x86_64 boot 29/29 tests, 2x BOOTOK, root@veridian:/#

TODO(phase7) Markers Resolved

  • graphics/gpu.rs lines 59, 130, 228, 234 (4 markers -- GPU enumeration and submit)
  • drivers/gpu.rs line 307 (1 marker -- framebuffer detection)
  • services/desktop_ipc.rs line 217 (1 marker -- IPC endpoint registration)
  • desktop/file_manager.rs line 229 (1 marker -- MIME dispatch)

Total: 7 of 35 TODO(phase7) markers resolved (remaining 28 are in Waves 4-6 scope)


Upgrade Notes

  • No breaking API changes from v0.7.0
  • All new modules use #![allow(dead_code)] as they provide framework APIs for future desktop integration
  • VirtIO GPU driver auto-detects at boot; falls back to existing framebuffer if no VirtIO GPU present
  • Vendor GPU stubs (i915/amdgpu/nouveau) perform PCI scan only -- no register programming (requires real hardware)
  • Dynamic linker enhancements are backward-compatible; existing statically-linked binaries unaffected

Full Changelog: v0.7.0...v0.7.1