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