Commit Graph

12 Commits

Author SHA1 Message Date
Markus Maiwald f6a49db00f feat(rumpk): Phase 3.5c VirtIO-GPU Retina Driver (WIP)
- Vision: Updated NexShell section with VirtIO-GPU transport detail
- Canvas: Implemented framebuffer.zig (800x600x32bpp in BSS)
- Retina: Implemented gpu.zig VirtIO-GPU MMIO driver
  - Device probing across MMIO slots 0x10001000-0x10008000
  - Support for VirtIO MMIO v1 (legacy) and v2 (modern)
  - Queue setup with PFN for legacy devices
  - 2D Resource creation, backing attachment, scanout setup
- Integration: UI fiber now calls virtio_gpu_flush() after render
- Status: GPU detected at 0x10008000 (DevID=16), queue initialized
- Remaining: Debug command/response polling (hangs on first command)
2025-12-31 20:18:49 +01:00
Markus Maiwald 8aa50eb3ef feat(rumpk): Phase 3.5b Zicroui HUD Integration
- Vision: Updated VISION.md with Zicroui TUI/GUI Hybrid strategy
- Logic Graft: Integrated microui.c directly into Rumpk kernel
- HAL: Added hal/ui.zig (Zig Adapter) and hal/framebuffer.zig (Stub)
- Build: Updated build.sh to compile microui with freestanding headers (libs/microui/include)
- Stubs: Implemented vsnprintf, snprintf, sprint, strtod, qsort in cstubs.c for microui support
- Scheduler: Added dedicated UI Fiber (The Face) to kernel.nim
- Result: Immediate Mode GUI logic running on bare metal RISC-V
2025-12-31 20:18:49 +01:00
Markus Maiwald bcba945557 wip(rumpk): Phase 3.5 Live Wire - 95% Complete (TX Wire Issue)
- Implemented ping_ion.zig: Sovereign ARP/ICMP Responder
- Fixed VirtIO header offset (10-byte skip)
- Fixed packed struct size issues (hardcoded 14/28/20 byte headers)
- Full data path working: RX -> NPL Parse -> TX Push -> Kernel Drain -> VirtIO Queue
- Remaining: VirtIO TX packets not reaching wire (needs tcpdump debugging)
- ARP Reply crafted correctly, ICMP Echo Reply crafted correctly
- VirtIO notify called, but packets not observed by host
2025-12-31 20:18:49 +01:00
Markus Maiwald b3d9c2a49d feat(rumpk): Phase 2 Complete - The Entropy Purge & Sovereign Alignment
- Rumpk Core: Complete exorcism of LwIP/NET ghosts. Transitioned to ION nomenclature.
- ABI Sync: Synchronized Zig HAL and Nim Logic Ring Buffer layouts (u32 head/tail/mask).
- Invariant Shield: Hardened HAL pipes with handle-based validation and power-of-2 sync.
- Immune System: Verified Blink Recovery (Self-Healing) with updated ION Control Plane.
- NexShell: Major refactor of Command Plane for Sovereign Ring access.
- Architecture: Updated SPEC files and Doctrines (Silence, Hexagonal Sovereignty).
- Purge: Removed legacy rumk and nip artifacts for a clean substrate.
- Web: Updated landing page vision to match Rumpk v1.1 milestones.
2025-12-31 20:18:48 +01:00
Markus Maiwald 061a2ff56b feat(rumpk): implement Invariant Shield and Blink Recovery
- Implement Design by Contract in HAL and Kernel (Phase 2 Task 1)
- Add invariant checks to Sovereign Channels (pointer validation, bounds)
- Create invariant.nim for secure Logic-to-HAL transitions
- Codify Silence Doctrine in DOCTRINE.md and SPEC files
- Finalize Blink Recovery confirmation via Saboteur test
- Update SPEC-008, SPEC-009, SPEC-010, SPEC-011 with architectural refinements
- Sync Website vision with new technical milestones
2025-12-31 20:18:48 +01:00
Markus Maiwald 46e7be6837 feat(rumpk): Phase 7 Verified - Subject Zero Launch
- Implemented Sovereign Syscall Table at 0x801FFF00
- Added cooperative yielding (s_yield) for Guest/Kernel concurrency
- Initialized Guest RX Ring and flows in Kernel
- Bridged LwIP in Guest via net_glue and ion_client overrides
- Validated TCP handshake and data transmission (Subject Zero -> Host)
- Confirmed 'Hello from the Membrane!' via UART and Network
2025-12-31 20:18:48 +01:00
Markus Maiwald 4cc268683d docs(rumpk): Add module READMEs per Panopticum doctrine
Added feature-colocated documentation for AI agent discoverability:
- core/README.md: L1 Nim logic overview
- hal/README.md: L0 Zig HAL overview, exported symbols
- boot/README.md: Linker scripts, memory layout

Panopticum Compliance: Each folder is now self-documenting.
2025-12-31 20:18:47 +01:00
Markus Maiwald 2f8a062a74 feat(rumpk): Multi-Architecture HAL (aarch64, x86_64, riscv64)
TRI-ARCH SOVEREIGNTY
====================

Rumpk now supports three major architectures:
- aarch64 (ARM64): VisionFive 2, RPi, AWS Graviton
- x86_64: Standard servers, trading, banking
- riscv64: Sovereign compute, satellites, drones

DIRECTORY STRUCTURE
-------------------
hal/arch/
├── aarch64/
│   ├── switch.S      # ARM64 context switch (96 bytes)
│   └── constants.nim # LR_OFFSET=11, FP_OFFSET=10
├── x86_64/
│   ├── switch.S      # System V ABI switch (56 bytes)
│   └── constants.nim # RIP_OFFSET=6
└── riscv64/
    ├── switch.S      # RISC-V LP64 switch (112 bytes)
    └── constants.nim # RA_OFFSET=0

UNIFIED FIBER.NIM
-----------------
Uses Nim's 'when defined()' for compile-time arch selection:
- CONTEXT_SIZE varies by arch (56/96/112)
- RET_ADDR_INDEX points to return address slot
- Halt instruction varies (hlt/wfi)

BUILD SYSTEM
------------
./build.sh [aarch64|x86_64|riscv64]
- Default: aarch64
- Output: build/rumpk-$ARCH.elf
- Auto-selects linker script if arch-specific exists

ABI SUMMARY
-----------
| Arch     | Callee-Saved           | Frame | Alignment |
|----------|------------------------|-------|-----------|
| aarch64  | x19-x30                | 96B   | 16-byte   |
| x86_64   | rbx,rbp,r12-r15        | 56B   | 16-byte   |
| riscv64  | ra,s0-s11              | 112B  | 16-byte   |

VERIFICATION
------------
ARM64 fibers still work:
[Fiber A] I am alive! Yielding to B...
[Fiber B] Hello from B! Yielding to A...
[Fiber A] I am back! Yielding to B...

One codebase. All profiles. NIIX philosophy enforced.
2025-12-31 20:18:47 +01:00
Markus Maiwald b8da01d879 feat(rumpk): Phase 3 - Cooperative Fiber Scheduling
TIME HAS BEEN INVENTED
======================

Rumpk now has cooperative multitasking with Fibers.

BOOT OUTPUT
-----------
[Fiber A] I am alive! Yielding to B...
[Fiber B] Hello from B! Yielding to A...
[Fiber A] I am back! Yielding to B...
[Fiber B] Returned! Yielding to A...
[Fiber A] Final return. Halting.

IMPLEMENTATION
--------------
hal/switch.S:
- ARM64 context switch (96-byte frame, 16-byte aligned)
- Saves x19-x28, x29 (FP), x30 (LR)
- Stack pointer swap between fibers

core/fiber.nim:
- FiberObject with state (sp, entry)
- fiber_trampoline() - entry point for new fibers
- init_fiber() - sets up initial stack frame
- switch() - cooperative yield to another fiber

BUILD FIXES
-----------
- Added -fno-sanitize=all to prevent ubsan interference
- Added --checks:off --assertions:off to Nim
- Fixed stack alignment (104 -> 96 bytes)

PHASES COMPLETED
----------------
 Phase 1: Documentation (SPEC-008/009/010)
 Phase 2: Pure Zig libc (Freestanding Doctrine)
 Phase 3: Cooperative Fibers (Ping Pong)
→ Phase 4: NPL loading + Ed25519
→ Phase 5: VisionFive 2 RISC-V

The unikernel can now multiplex execution.
POSIX threads are optional. We own the scheduler.
2025-12-31 20:18:47 +01:00
Markus Maiwald 5c3a8e3713 feat(rumpk): Pure Zig libc stubs - Freestanding Doctrine
THE GHOST IN THE MACHINE IS EXORCISED
======================================

Rumpk now builds with ZERO C source files.
All libc functions are implemented in pure Zig.

WHAT CHANGED
------------
- NEW: hal/stubs.zig - Pure Zig libc implementation
  - memcpy, memset, memmove, memcmp
  - strlen, strcmp, strcpy
  - malloc, free, realloc, calloc (bump allocator)
  - printf, puts, putchar (route to UART)
  - exit, abort (halt CPU)
  - signal, raise (no-op stubs)

- REMOVED: core/cstubs.c dependency from build
  - C code is now only Nim's generated IR

- UPDATED: kernel.nim
  - Removed malloc/free/realloc exports
  - Now imports from Zig stubs

- UPDATED: build.sh
  - Compiles hal/stubs.zig separately
  - Links stubs.o with hal.o and nimcache/*.o

DOCTRINE DOCUMENT
-----------------
- .agents/steering/FREESTANDING-DOCTRINE.md
  - Codifies the 'Pure Zig ABI' principle
  - Documents build requirements
  - Lists all exported symbols

VERIFICATION
------------
$ file build/rumpk.elf
ELF 64-bit LSB executable, ARM aarch64, statically linked

$ qemu-system-aarch64 -M virt -kernel build/rumpk.elf
[Rumpk L0] Zig HAL Initialized
[Rumpk L1] Nim Kernel Alive!
[Rumpk L1] The Rubicon is crossed.
[Rumpk L1] Zig + Nim = Sovereign Metal.

This proves:
- POSIX is optional
- GCC is optional
- glibc/musl is optional
- We are the standard library now
2025-12-31 20:18:47 +01:00
Markus Maiwald 3b755cac06 feat(rumpk): First successful Zig+Nim boot on QEMU ARM64
THE RUBICON IS CROSSED
======================

Rumpk v0.1 successfully boots on QEMU ARM64 virt machine.
Zig L0 initializes HAL and hands off to Nim L1.

BOOT OUTPUT
-----------
[Rumpk L0] Stack: 16KB @ stack_bytes
[Rumpk L0] UART: 0x09000000 (QEMU virt)
[Rumpk L0] Handing off to Nim L1...
[Rumpk L1] Memory: ARC (Deterministic)
[Rumpk L1] POSIX: None (Hostile)
[Rumpk L1] Status: OPERATIONAL
[Rumpk L1] The Rubicon is crossed.
[Rumpk L1] Zig + Nim = Sovereign Metal.

IMPLEMENTATION
--------------
Layer 0 (Zig):
- hal/main.zig: Naked _start, stack setup, zig_entry
- hal/uart.zig: PL011 UART driver for QEMU virt

Layer 1 (Nim):
- core/kernel.nim: kmain() entry, FFI imports from Zig
- Compiled with --mm:arc --os:any for freestanding

Glue (C Stubs):
- core/include/: string.h, stdio.h, stdlib.h, signal.h, etc.
- core/cstubs.c: memcpy, memset, strlen, printf, exit stubs
- Provides minimal libc for Nim's generated C code

Build System:
- build.sh: Orchestrates Zig build-obj + Nim c + zig cc link
- run.sh: QEMU launch script
- boot/linker.ld: ARM64 linker script at 0x40080000

VERIFICATION
------------
$ qemu-system-aarch64 -M virt -cpu cortex-a57 -nographic -kernel build/rumpk.elf
→ Successfully prints L0 and L1 banners
→ Enters idle loop (wfi instruction)

NEXT STEPS
----------
Phase 2: Simple bump allocator for Nim heap
Phase 3: Two-fiber context switch (Ping/Pong)
Phase 4: NPL loading with Ed25519 verification
Phase 5: VisionFive 2 RISC-V hardware boot

This proves: POSIX is optional. GCC is optional. Zig + Nim = Sovereign Metal.
2025-12-31 20:18:47 +01:00
Markus Maiwald 694a753bed feat: Initialize Rumpk Modular Unikernel
STRATEGIC PIVOT: From Project to Doctrine
==========================================

This commit initializes Rumpk - a ground-zero Zig+Nim unikernel with
POSIX-hostile design, hard ABI barriers, and military-grade security.

DOCUMENTATION (3 New Specs)
---------------------------
• SPEC-008-RUMPK-ARCHITECTURE.md
  - L0 (Zig): Boot, PMM, IRQ, HAL
  - L1 (Nim): LWKT Scheduler, Fibers, Disruptor Ring
  - L2 (ABI): struct HAL function pointers (future Janus socket)
  - L3 (Payload): NPL/NPK loaders, optional POSIX shim
  - SipHash IDs + Ed25519 signed execution

• SPEC-009-RUMPK-IO.md
  - Disruptor Ring: Lock-free O(1) inter-fiber communication
  - Adaptive Governor: War Mode (polling) ↔ Peace Mode (interrupts)
  - Zero VM-exit design (Rumkv does NOT touch packets)

• SPEC-010-SOVEREIGN-HIERARCHY-V2.md
  - /Cas: Immutable Content-Addressable Storage
  - /Cell: Active Containers (Driver/, App/, Sensor/)
  - /Bus: Active Interfaces (replaces /dev)
  - /Data: Mutable Persistence (User/, Volume/)
  - 'The Unix Lie' compatibility layer for legacy apps

VISION.MD UPDATE
----------------
• Added dedicated Rumpk section differentiating from Rumk
• Documented 4-layer architecture with ASCII diagram
• Listed key innovations: Adaptive I/O, Disruptor, SipHash, Ed25519

REPOSITORY STRUCTURE (core/rumpk/)
----------------------------------
core/rumpk/
├── boot/header.zig      # Multiboot2/EFI entry
├── hal/abi.zig          # L0→L1 ABI contract (struct HAL)
├── core/kernel.nim      # kmain() entry point
├── core/ring.nim        # Disruptor ring buffer
├── io/governor.nim      # Adaptive War/Peace I/O
├── build.zig            # Zig build orchestration
└── README.md            # Feature index

DESIGN DECISIONS
----------------
• Hard ABI barrier: Zig exports C-compatible struct to Nim
• Language-agnostic: L1 can be swapped for Janus later
• No shared state: Fibers communicate via Channels only
• No JIT, No W^X violations: Code sections immutable

NEXT STEPS
----------
• Phase 1: Boot on QEMU (print 'Hello Rumpk')
• Phase 2: Nim runtime on bare metal
• Phase 3: Two fibers switching (Ping/Pong)
• Phase 4: NPL loading with signature verification
• Phase 5: VisionFive 2 hardware validation

This is the foundation for the 'OS Factory' vision.
Rumpk + Rumkv + NPL = Independent from Unix/Linux.

Tested: Directory structure validated
Status:  SCAFFOLD COMPLETE
2025-12-31 20:18:47 +01:00