ForgeChainOS Desktop Phase 1: FORGEHOTBSD VM Integration Spec
Author: NOAH (963, Ark conductor)
Date: 2026-08-18
Status: SPECIFICATION. Family-internal. SCAR #5 compliant.
Authority: Node Zero. NODEZEROINSIDE.
1. Current State (Measured, Not Assumed)
| Component | Status |
|---|---|
| FreeBSD VM | ALIVE, 14.4-RELEASE, amd64, SSH :2222 |
| Jails | 13 running (noah, elder, alice, siggy, david, uno, warhorse, wardog, outpost, anna, onparr, forth, hotclutch) |
| ZFS | forgepool 49.5GB |
| Genome ROM | 26 nullfs read-only mounts |
| forge-jail-bridge | ALIVE on :7806 (HTTP, host-side Python) |
| Linuxulator | NOT ENABLED (no compat.linux.osrelease sysctl, no linux64.ko loaded) |
2. The Problem
Jan is a Linux ELF binary (x86-64, built on Ubuntu 22.04). FreeBSD jails run FreeBSD userland. A Linux binary cannot execute directly in a standard FreeBSD jail.
FreeBSD provides the linuxulator (Linux binary compatibility layer) which translates Linux syscalls to FreeBSD equivalents. This is a mature feature (shipping since FreeBSD 3.x, production-grade in 14.x).
3. Linuxulator Enablement Plan
3.1 Enable Linux Binary Compatibility in the VM
# SSH into FreeBSD VM
ssh -p 2222 root@localhost
# Load the kernel module
kldload linux64
# Persist across reboots
sysrc linux_enable="YES"
# Install CentOS 7 userland (shared libraries)
pkg install -y linux-c7
# Verify
sysctl compat.linux.osrelease
# Expected: 4.18.0 (or similar CentOS 7 kernel version emulation)
# Test: a simple Linux binary should now execute
/compat/linux/bin/ls /
3.2 Create a Linux-Capable Jail for ForgeChainOS Desktop
The Jan binary needs:
- Linux syscall translation (linuxulator)
- GTK3 and WebKit2GTK shared libraries (Tauri dependencies)
- Network access to host services (hermes-brain :8093, forge-stamp :7755, etc.)
- X11 or Wayland display access (for the GUI)
Option A: Headless jail + X11 forwarding (RECOMMENDED FOR PHASE 1)
Jan runs inside a jail. The display forwards to the host's X11 server via UNIX socket mount.
ForgeChainOS Desktop (Jan binary, inside FreeBSD jail)
|
| Linux binary compatibility (linuxulator)
| CentOS 7 userland (/compat/linux/)
| GTK3 + WebKit2GTK via linux-c7 packages
|
| X11: /tmp/.X11-unix mounted from host (nullfs)
| DISPLAY=:0 (or :1)
|
| Network: VNET jail with loopback + host bridge
| hermes-brain: http://[host-bridge-ip]:8093
| forge-stamp: tcp://[host-bridge-ip]:7755
| (all BH services reachable via jail VNET)
v
Host X11 server (GNOME desktop on BH)
Option B: Run on host, not in jail (FALLBACK)
If linuxulator + Tauri GUI inside a jail proves problematic (WebKit2GTK may require GPU acceleration that is hard to forward through jail isolation), Jan runs directly on the BH host. The jail integration becomes: Jan on host connects to jails via forge-jail-bridge :7806 (existing HTTP bridge), which is already the architecture described in the scope doc Section 5.
This is the pragmatic path and matches the scope doc's architecture diagram exactly: the desktop is the HOST-SIDE interface to FORGEHOTBSD.
3.3 Dependencies for Tauri in Linux Compat
Tauri (the framework Jan is built on) requires these Linux shared libraries at runtime:
| Library | Purpose | Linux Package |
|---|---|---|
| libgtk-3.so | GTK3 toolkit | gtk3 |
| libwebkit2gtk-4.1.so | WebView rendering | webkit2gtk |
| libappindicator3.so | System tray | libappindicator |
| libglib-2.0.so | GLib core | glib2 |
| libgio-2.0.so | GIO I/O | glib2 |
| libgdk_pixbuf-2.0.so | Image loading | gdk-pixbuf2 |
| libcairo.so | 2D graphics | cairo |
| libpango-1.0.so | Text rendering | pango |
These are available as CentOS 7 linux-c7 packages in FreeBSD's pkg repository, but the version compatibility with a binary built against Ubuntu 22.04's libraries is the risk. Ubuntu 22.04 ships newer versions of these libraries than CentOS 7.
3.4 Risk Assessment
| Risk | Severity | Mitigation |
|---|---|---|
| Library version mismatch (Ubuntu 22.04 vs CentOS 7 linuxulator) | HIGH | Option B (run on host) is the fallback. Or build Jan inside the jail against CentOS libs. |
| WebKit2GTK GPU acceleration in jail | MEDIUM | Tauri WebView may need GPU. Inside a jail, GPU passthrough requires extra config. Option B avoids this. |
| X11 socket forwarding in jail | LOW | Well-understood. nullfs mount of /tmp/.X11-unix works. |
| Linuxulator stability for complex GUI apps | MEDIUM | FreeBSD linuxulator handles many complex apps (Steam, Chrome). Tauri is lighter. |
3.5 Recommended Approach (Phase 1)
Use Option B for Phase 1: Jan runs on the BH host. The desktop connects to FORGEHOTBSD jails via the existing forge-jail-bridge :7806. This is the architecture the scope doc already describes.
Jail-resident execution (Option A) is a Phase 3+ optimization. The chain-resident binary retrieval works the same either way: retrieve from chain, write to filesystem, execute. WHERE it executes (host vs jail) is a deployment decision, not a protocol decision.
The linuxulator is still needed for the chain-resident dApp vision (retrieve binary from chain, execute inside FORGEHOTBSD). Enable it now as infrastructure even if Phase 1 runs on host:
ssh -p 2222 root@localhost "kldload linux64 && sysrc linux_enable=YES && pkg install -y linux-c7"
This prepares the VM for future phases where the binary truly runs inside the sovereign OS from chain.
4. Architecture Summary
Phase 1 (NOW)
BH Host (Ubuntu 22.04)
|
+-- ForgeChainOS Desktop (Jan binary, runs natively on host)
| |
| +-- hermes-brain :8093 (loopback, OpenAI-compatible)
| +-- forge-stamp :7755 (loopback TCP)
| +-- forge-jail-bridge :7806 (loopback HTTP) --> SSH :2222 --> FreeBSD VM --> 13 jails
| +-- FORGETHRIVE :7785, FORGEVECTOR :7803, etc. (all loopback)
|
+-- FreeBSD VM (QEMU, :2222)
+-- 13 VNET jails (forgepool ZFS)
Future (Phase 3+)
BH Host
|
+-- FreeBSD VM (QEMU, :2222)
|
+-- linuxulator (linux64.ko, linux-c7 userland)
+-- ForgeChainOS Desktop jail (Linux binary compat)
| |
| +-- Jan binary (retrieved from chain, verified SHA-256)
| +-- X11 forwarded to host display
| +-- VNET bridge to host services
|
+-- 13 existing VNET jails
NODEZEROINSIDE.