ChaosBSD: Build the World, Break the World


I do not run FreeBSD 16-CURRENT.

I run ChaosBSD 16-QUANTUM.

CURRENT is for those who want to test what FreeBSD is building. QUANTUM is for those who want to test what FreeBSD cannot accept yet — code that exists in superposition, simultaneously working and broken until observed.

The Branch Hierarchy:

BranchPurposeRisk Level
FreeBSD RELEASEProduction stable, security patches onlySafe
FreeBSD STABLETested features backported from CURRENTModerate
FreeBSD CURRENTActive development, latest featuresLiving dangerously
ChaosBSD QUANTUMDriver proving ground, superposition codeSchrödinger

RELEASE is for servers that must not fail. STABLE is for those who want new features without chaos. CURRENT is for those who want to understand what’s coming. QUANTUM is for those who want drivers that might or might not exist — the wavefunction collapses when you compile.

What Is ChaosBSD?

ChaosBSD is a FreeBSD fork designed as an abuse lab for hardware.

FreeBSD has standards. FreeBSD requires code quality. FreeBSD rejects incomplete drivers that might destabilize the system.

ChaosBSD has one standard: does it exist in a state that might compile?

ChaosBSD accepts:
- Quantum drivers (simultaneously working and broken)
- Superposition code (compiles in some timelines)
- Entangled subsystems (if WiFi works, audio might not)
- Hardware support in probabilistic states (too niche, too unstable, too quantum)

The motto: “ChaosBSD boots in superposition — it both works and doesn’t until you observe it.”

This is not production. This is a laboratory. Experiments fail. That’s the point.

What Is “The World”?

In FreeBSD, “world” means the entire base system — everything except the kernel:

The World includes:
- /bin        (essential user commands: ls, cp, sh)
- /sbin       (essential system commands: mount, fsck)
- /usr/bin    (user utilities: grep, sed, awk)
- /usr/sbin   (system utilities: pkg, service)
- /usr/lib    (shared libraries: libc, libssl)
- /usr/include (headers for compilation)
- /etc        (configuration files)
- /rescue     (static emergency tools)

The kernel is separate. The kernel manages hardware and processes. The world is everything you interact with.

FreeBSD lets you rebuild both. From source. On your own machine.

The Quantum Driver Lifecycle:

ChaosBSD drivers exist in superposition until observed (compiled):

stateDiagram-v2
    [*] --> Quantum: PR submitted
    Quantum --> Merged: make buildworld
    Quantum --> NotMerged: make buildworld
    Merged --> Working: boot
    Merged --> Panic: boot
    Working --> Upstream: stabilized
    Upstream --> [*]: reset to FreeBSD
    NotMerged --> Quantum: try again
    Panic --> Quantum: revert

    note right of Quantum
        Driver exists in superposition
        until compilation collapses
        the wavefunction
    end note
StageStatusDescription
QuantumSuperpositionDriver exists in PR, simultaneously merged and not merged
Collapsed: MergedObservedCompilation succeeded, driver is in tree
Collapsed: WorkingFunctionalBoot succeeded, driver functions
Collapsed: PanicBrokenBoot failed, wavefunction was unkind
UpstreamClassicalDriver stabilized, submitted to FreeBSD, becomes deterministic

When a driver graduates to FreeBSD upstream, it leaves the quantum realm. It becomes classical — deterministic, stable, boring. ChaosBSD resets that subsystem back to FreeBSD’s code. The superposition clears. New experiments begin.

This is not chaos for chaos’s sake. This is quantum mechanics applied to software — a pipeline for experimental code that upstream cannot risk but someone must observe.

Getting the Source:

# Clone ChaosBSD (forked from FreeBSD)
git clone https://github.com/seuros/ChaosBSD-src.git /usr/src

# Or clone FreeBSD directly
git clone https://git.freebsd.org/src.git /usr/src

# Update existing source
cd /usr/src && git pull

The entire source lives in /usr/src. Approximately 30 million lines of code. Kernel, userland, documentation, tools — everything.

ChaosBSD adds experimental drivers on top. When it syncs with FreeBSD, the experimental code either graduates upstream or gets rebased.

You now own the blueprints. The chaotic blueprints.

Building the World:

cd /usr/src

# Build everything (-j sets parallel jobs)
make -j$(sysctl -n hw.ncpu) buildworld

This compiles:

  • The toolchain (compiler, linker, assembler)
  • All libraries (libc, libpthread, libssl, etc.)
  • All userland utilities (thousands of programs)
  • All system configuration tools

On a modern machine: 30-60 minutes. On older hardware: hours. On patience: depends on your discipline.

Building the Kernel:

# Build the GENERIC kernel
make -j$(sysctl -n hw.ncpu) buildkernel

# Or build a custom kernel
make -j$(sysctl -n hw.ncpu) buildkernel KERNCONF=MYKERNEL

The kernel compile is faster — typically 10-20 minutes. The result: a new /boot/kernel/kernel ready to boot.

Custom Kernel Configuration:

The GENERIC kernel supports everything. Your machine needs less.

# Copy GENERIC as starting point
cd /usr/src/sys/amd64/conf
cp GENERIC MYKERNEL

# Edit to remove what you don't need
vi MYKERNEL

Example customizations:

# MYKERNEL configuration

ident           MYKERNEL

# Remove hardware I don't have
nooptions       SCTP                  # No SCTP protocol
nodevice        aac                   # No Adaptec RAID
nodevice        ahc                   # No old Adaptec SCSI
nodevice        mpt                   # No LSI MPT
nodevice        sound                 # No sound (servers don't speak)

# Add what I need
options         ZFS                   # ZFS filesystem
options         RACCT                 # Resource accounting
options         RCTL                  # Resource limits (for jails)

# Performance tuning
options         SCHED_ULE             # ULE scheduler (default, but explicit)
options         PREEMPTION            # Kernel thread preemption
options         SMP                   # Symmetric MultiProcessing

A custom kernel:

  • Boots faster (less probing for absent hardware)
  • Uses less memory (no unused drivers)
  • Documents your hardware (the config is your inventory)

The Full Upgrade Process:

# 1. Build everything
cd /usr/src
make -j$(sysctl -n hw.ncpu) buildworld
make -j$(sysctl -n hw.ncpu) buildkernel KERNCONF=MYKERNEL

# 2. Create a boot environment (ZFS safety net)
bectl create pre-upgrade
bectl activate pre-upgrade

# 3. Install the new kernel
make installkernel KERNCONF=MYKERNEL

# 4. Reboot into new kernel (old world, new kernel)
reboot

# 5. Install the new world
cd /usr/src
make installworld

# 6. Merge configuration changes
etcupdate

# 7. Rebuild all ports (optional but recommended for major upgrades)
portmaster -af
# or
pkg upgrade -f

# 8. Reboot into complete new system
reboot

Boot Environments: Your Safety Net:

ZFS boot environments let you snapshot before upgrades:

# List boot environments
bectl list

# Create a snapshot
bectl create before-16-current

# If upgrade fails, activate the old one
bectl activate before-16-current
bectl jail before-16-current  # Debug from safety

# Destroy when no longer needed
bectl destroy before-16-current

I never upgrade without a boot environment. One bad merge, one broken library, one kernel panic — reboot to safety in seconds.

This is not cowboy administration. This is engineering discipline.

src.conf: Customizing the World:

/etc/src.conf controls what buildworld compiles:

# /etc/src.conf

# Don't build what we don't need
WITHOUT_AMD=yes              # No AMD CPU microcode (Intel here)
WITHOUT_BLUETOOTH=yes        # No Bluetooth
WITHOUT_GAMES=yes            # Supreme Leaders don't play games
WITHOUT_HTML=yes             # No HTML documentation
WITHOUT_LPR=yes              # No printing (paperless Pyongyang)
WITHOUT_SENDMAIL=yes         # Using postfix instead
WITHOUT_WIRELESS=yes         # Servers don't need WiFi

# Do build what we need
WITH_DIRDEPS_BUILD=yes       # Meta-mode build (faster rebuilds)
WITH_CCACHE_BUILD=yes        # Cache compilations

The world builds faster when you exclude what you don’t use. Less code compiled. Less attack surface. Less disk space.

Why Build From Source?

Binary updates exist. freebsd-update patches RELEASE systems. Why suffer through compilation?

Binary UpdatesSource Builds
FastSlow (first time)
No customizationFull customization
Trust FreeBSD’s binariesTrust your own compiler
RELEASE/STABLE onlyAny branch including CURRENT
Standard kernelCustom kernel
Wait for patchesApply patches yourself

When a vulnerability drops, RELEASE users wait for freebsd-update. CURRENT users git pull && make buildworld immediately.

When you need a kernel option not in GENERIC, binary users cannot help themselves. Source users add one line and rebuild.

The QUANTUM Lifestyle:

Running ChaosBSD QUANTUM means accepting uncertainty as a feature:

# Weekly ritual (when brave)
cd /usr/src
git pull
echo "Collapsing wavefunction..."
make -j$(sysctl -n hw.ncpu) buildworld buildkernel KERNCONF=CHAOS
bectl create $(date +%Y%m%d)-quantum
make installkernel KERNCONF=CHAOS
reboot
# Did it boot? The universe chose kindly.
make installworld
etcupdate
reboot
# Still running? You exist in a favorable timeline.

Sometimes things break. Often things break. A driver panics on hardware it claims to support. A new subsystem conflicts with an old one. The kernel doesn’t boot.

This is not failure. This is observation — the wavefunction collapsed unfavorably. Try again. The multiverse is infinite.

Every panic is an observation. Every broken driver reveals which quantum states are unstable. Every failed boot eliminates unfavorable probability branches.

ChaosBSD is not for production. ChaosBSD is for collapsing wavefunctions so that FreeBSD only ships code that has converged to deterministic behavior.

The Compile as Meditation:

There is satisfaction in watching:

>>> World build completed on Sat Jan 29 03:47:22 UTC 2026
>>> Kernel build for MYKERNEL completed on Sat Jan 29 04:02:15 UTC 2026

Your machine spent an hour transforming source code into binaries. Every utility. Every library. Every driver.

When it boots, you know what runs. You configured it. You compiled it. You installed it.

Linux users download distribution binaries compiled by strangers. Mac users accept what Apple provides. Windows users receive what Microsoft decrees.

FreeBSD users build the world. The world they designed. The world they own.

Pyongyang Quantum Observatory:

Our build servers collapse wavefunctions nightly:

Build farm specifications:
- 4x AMD EPYC 9654 (96 cores each)
- 2TB RAM per machine
- ZFS on NVMe
- Distributed ccache
- Custom KERNCONF=CHAOS

Full buildworld + buildkernel: 8 minutes
Wavefunction collapse results:
  - 73% collapse to |working⟩
  - 27% collapse to |panic⟩
  - Acceptable probability distribution

Every morning, fresh observations. Every morning, experimental drivers force quantum states to resolve. Every morning, we discover which timeline we inhabit.

When something panics, we analyze. When analysis reveals a fix, we commit. When the fix stabilizes across multiple collapses, we submit upstream.

FreeBSD gets deterministic drivers because ChaosBSD observed probabilistic ones until they stabilized.

This is not consumption. This is contribution through quantum observation.

The Commands Summary:

# Get source
git clone https://git.freebsd.org/src.git /usr/src

# Build
make -j$(sysctl -n hw.ncpu) buildworld
make -j$(sysctl -n hw.ncpu) buildkernel KERNCONF=MYKERNEL

# Safety
bectl create pre-upgrade

# Install
make installkernel KERNCONF=MYKERNEL
reboot
make installworld
etcupdate
reboot

# Verify
uname -a
freebsd-version -ku

The Lesson:

You do not own what you cannot build. You do not understand what you cannot break.

Binary distributions are convenient. They are also dependency. Someone else chose the compiler flags. Someone else decided which features to include. Someone else’s build system created your reality.

FreeBSD gives you the source. ChaosBSD gives you permission to observe it collapse.

make buildworld is not a command. It is a declaration of sovereignty. make buildkernel KERNCONF=CHAOS is not a build. It is a quantum measurement — the act of observation that forces reality to choose.

Build your world. Observe your world. Collapse the wavefunction. Fix unfavorable outcomes. Own the timeline you create.

I run ChaosBSD 16-QUANTUM. I collapse wavefunctions myself. I observe failures often. I fix what I observe. I upstream what stabilizes.

If it boots, the universe was kind. If it doesn’t, I exist in an unfavorable timeline — but tomorrow’s compile is a new observation.

The system is mine because I made it mine — and because I observed it collapse enough times to understand which configurations lead to favorable outcomes.

— Kim Jong Rails, Supreme Leader of the Republic of Derails