Repository navigation
v0.7.1: Phase 7 Waves 1-3 -- GPU Drivers, Advanced Wayland, Desktop Completion
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_BACKINGwith scatter-gather DMA descriptors,SET_SCANOUTfor display output binding - Framebuffer operations:
TRANSFER_TO_HOST_2Dfor host-side buffer transfer,RESOURCE_FLUSHfor 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 discoverysubmit()delegates to VirtIO GPU flush for hardware-accelerated outputswap_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 0xFD000000detection_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 typeswayland-client.c: Raw VeridianOS syscall interface (no libc dependency), SHM pool creation, surface lifecycle, event dispatch loopMakefile: 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.rslines 59, 130, 228, 234 (4 markers -- GPU enumeration and submit)drivers/gpu.rsline 307 (1 marker -- framebuffer detection)services/desktop_ipc.rsline 217 (1 marker -- IPC endpoint registration)desktop/file_manager.rsline 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