DEV Community

Cover image for V.E.L.O.C.I.T.Y.-OS: The Synaptic Canvas GUI & V-NCE GPU (Part 10)
UnitBuilds for UnitBuilds CC

Posted on

V.E.L.O.C.I.T.Y.-OS: The Synaptic Canvas GUI & V-NCE GPU (Part 10)

After writing drivers for NVMe storage, my bare-metal kernel could load files and run JIT code. However, I was still typing commands into a text-only COM1 serial terminal. I needed a graphical interface.

Last night, the second agent took over to build a double-buffered visual rendering compositor on top of the UEFI Graphics Output Protocol (GOP) framebuffer.


The V.E.L.O.C.I.T.Y.-OS 12-Part Roadmap

We are building a bare-metal, self-healing operating system running entirely inside the CPU's L3 cache. Here is the roadmap for this 12-part series:

  1. Part 1: The Spark — Exposing the "Safe-Room" security leak and building the compiler gate.
  2. Part 2: The NDA Language — Designing a content-addressed triplet representation to cure context bloat.
  3. Part 3: Ditching the Web Stack — Building a native 30MB IDE with 1,500,000x IPC latency drops.
  4. Part 4: The Closure JIT — Compiling AST blocks to nested closures and bypassing borrow checker limits.
  5. Part 5: JIT Math Optimizations — Replacing division operations with precomputed 16-bit lookup tables.
  6. Part 6: x86-64 Assembler & SCEV-Lite — Compiling scalar loops directly to native code in constant time.
  7. Part 7: Classic Compiler Passes — Implementing inter-procedural Dead Code Elimination and loop unrolling.
  8. Part 8: Reclaiming Ring 0 — Exiting UEFI boot services and transitioning the kernel to Ring 0.
  9. Part 9: Bare-Metal Drivers — Writing a PCI scanner, NVMe block storage controller, and FAT32 parser.
  10. Part 10: Synaptic Canvas — Rendering a spatial, force-directed GUI based on model token activation vectors. (You are here)
  11. Part 11: Swarms & Hot-Patching — Building multi-agent scheduling and zero-downtime RCU driver updates.
  12. Part 12: Self-Evolution — Handing system control over to a local LLM Terminal that self-optimizes via telemetry.


This led to the design of the Synaptic Canvas GUI.

The Swappable GUI Engines

I started by mapping the physical screen buffer pointer discovered by UEFI GOP. I implemented a double-buffering scheme: drawing elements to a heap-allocated backbuffer (Vec<u32>) and blasting it to screen memory in a single operation to prevent screen flicker.

I implemented three swappable GUIs that compile in #![no_std] without float libraries:

  1. GlassmorphicShellGui: A premium, semi-transparent frosted glass terminal container. It overlays active system metrics (RAM allocated, SMP core status, W^X protections) with a live terminal prompt and a COM1 log streaming console.

    Glassmorphic Shell GUI

    Fig 1: Glassmorphic Shell GUI.
  2. MatrixRainGui: Cuz I mean why not, I'm putting an AI in the Matrix?

    Matrix Rain

    Fig 2: Sorry, I just had to...
  3. SynapticCanvasGui (The Workspace): A spatial coordinate interface. Instead of rendering files inside folders, files and JIT execution blocks float as interactive nodes on a 2D plane.

    Synaptic Canvas GUI

    Fig 3: Synaptic Canvas GUI.

Here is the double-buffered renderer implementation in src/gui.rs showing the radial background gradient and the frosted-glass blending loop that runs at bare metal:

// velocity-bootloader/src/gui.rs — Double-Buffered Glassmorphic Compositor
impl GlassmorphicShellGui {
    fn render(&mut self, buffer: &mut [u32], width: usize, height: usize) {
        // 1. Draw premium Slate radial background gradient
        for y in 0..height {
            let offset_y = y * width;
            let ratio = y as f32 / height as f32;
            let r = (20.0 + ratio * 20.0) as u32;
            let g = (26.0 + ratio * 20.0) as u32;
            let b = (38.0 + ratio * 24.0) as u32;
            let color = (r << 16) | (g << 8) | b;
            buffer[offset_y..(offset_y + width)].fill(color);
        }

        let win_x = 40usize;
        let win_y = 60usize;
        let win_w = width - 80;
        let win_h = height - 120;

        // 2. Draw glass background panel (frosted glass transparency blend)
        for dy in 0..win_h {
            let py = win_y + dy;
            let offset = py * width + win_x;
            for dx in 0..win_w {
                let pixel = buffer[offset + dx];
                // In-place linear blend with frosted glass white tint (glassmorphism)
                let r = (((pixel >> 16) & 0xFF) * 8 + 25) / 9;
                let g = (((pixel >> 8) & 0xFF) * 8 + 30) / 9;
                let b = ((pixel & 0xFF) * 8 + 42) / 9;
                buffer[offset + dx] = (r << 16) | (g << 8) | b;
            }
        }

        // 3. Draw glass border (thin Slate outline)
        draw_rect_outline(buffer, width, win_x, win_y, win_w, win_h, 0x00D9E2EC, 2);

        // Render header title bar
        draw_rect(buffer, width, win_x + 2, win_y + 2, win_w - 4, 36, 0x0010172A);
        draw_string(buffer, width, "V.E.L.O.C.I.T.Y.-OS  ::  STANDALONE KERNEL METRICS PANEL", win_x + 16, win_y + 14, 0x0038BDF8);

        // ... render telemetry columns and bottom interactive shell console
    }
}
Enter fullscreen mode Exit fullscreen mode

Semantic Clustering: The Synaptic Canvas

The compositor computes the pairwise cosine similarity between all files in the FAT32 directory.

I implemented a Force-Directed layout entirely in #![no_std] using a custom Newton-Raphson integer f32_sqrt method. Nodes repel each other, pull together based on cosine embedding similarities, and gravitate toward the center of the screen, sliding smoothly across ticks.

Connection splines are drawn using quadratic Bezier curves, rendering moving glow ripple dots to visualize live data transmission between executing JIT threads.

Here is the visual mapping of the Synaptic Canvas graphics pipeline:

Flowchart showing the Synaptic Canvas graphics pipeline from direct framebuffers to Bezier spline drawing and force directed nodes

Fig 4: The graphics pipeline and force-directed graph compositor stages.

V-NCE GPU Compute API

To accelerate these embedding calculations and compositor draws, I laid the groundwork for the V-NCE GPU Compute API (gpu.rs).

The driver scans the PCI space for standard graphics adapters (like VGA or Nvidia adapters) and maps their registers in Unified Memory Architecture (UMA) space.

This enables zero-copy CPU-to-GPU memory transfers. The JIT compiler emits hardware-agnostic command lists (BindPipeline, SetPushConstants, DispatchCompute) that write directly to the GPU's registers, falling back to SIMD/AVX2 software emulation on unmapped hardware.

Pascal's Analysis: Immediate-Mode Rendering

When I discussed the native visual compositor and display list specifications with

, he highlighted the next major logical hurdle:

"GUI rendering natively in NDA is the next hard problem — you need a display list format that maps to the immediate-mode rendering pipeline you described earlier. But the draw commands are already in the NDA spec, so the path is clear."

Pascal pointed out that by anchoring file locations to semantic embeddings, and utilizing the immediate-mode drawing commands already specified in the NDA header, the IDE was no longer a static folder tree—it was an interactive cognitive map of the code.

But running a complex GUI alongside real-time JIT compilation was hitting core contention bottlenecks. I needed to distribute work across CPU cores.

In the next post, I'll document how I implemented the Nexus Core multi-agent swarm runtime, headless serial streaming, and zero-downtime hot-patching.

Discussion

Have you written custom graphics layout renderers or GUI environments at bare metal? What are the biggest challenges in coordinating double-buffering, mouse coordinate mapping, and spatial layouts (like force-directed graphs) without a Window Server or GUI framework? Let's discuss in the comments below! And lemme know, should I call the AI Neo or Agent Smith? I'm leaning towards Agent Smith cuz it can spawn sub-agents...


Special thanks to

for helping me realize that the visual compositor could reflect the model's internal representation of the code.


Disclaimer: AI was used throughout this project, it is just fitting that it would co-author with me, so special thanks to the Foundry for its tireless hours toiling away and Gemini for producing the cover image.

Top comments (1)

Collapse
 
unitbuilds profile image
UnitBuilds UnitBuilds CC

@pascal_cescato_692b7a8a20 I included screenshots of the GUI from QEMU, so you can also see the different interfaces.