SlopOS
Getting Started

Build And Test Recipes

Current justfile recipes for SlopOS development

The source repo's recipe list is the command source of truth. Run just --list after pulling changes.

Setup And Build

RecipeWhat it does
just setupVerify Rust nightly, x86_64-unknown-none, Go >= 1.22, and workspace metadata
just buildBuild userland, root filesystem image, and builddir/kernel.elf
just isoBuild builddir/slop.iso with the default command line
just cleanRemove cargo build output and builddir/kernel.elf
just distcleanRemove ISOs, disk images, logs, and build output

Limine is not a git submodule. The ISO build fetches the pinned Limine binary release if the local Limine cache is empty.

Boot

RecipeWhat it does
just bootInteractive boot with display window and default wheel behavior
just boot-fastInteractive boot with roulette=skip
just boot-prodRelease-optimized kernel, wheel skipped
just boot-headlessInteractive serial-only boot
just boot-logHeadless timed boot, writes test_output.log
just boot-debugboot-fast plus GDB stub and QEMU monitor

Useful boot environment variables:

BOOT_CMDLINE='tests=off roulette=skip boot.debug=on' just boot
DEBUG=1 just boot
QEMU_SMP=2 QEMU_MEM=1G just boot-fast
just ports=7777,8080 boot

Tests

RecipeWhat it does
just testFull QEMU harness with live progress and per-failure diagnostics
just test FILTER='glob'Run matching kernel/userland tests
just test-rerun-failedRun the last failed test names
just test-verbose FILTER='glob'Dump captured klog for every test
just test-quiet FILTER='glob'Show only failures and summary
just test-rawPass QEMU stdout through directly
just test-json builddir/events.jsonlWrite machine-readable JSONL events
just test-userland-onlyRun only the userland phase
just test-hostHost-side Rust tests for selected crates and OSTD
just check-tests-hostGo unit tests for the host test wrapper
just check-test-countGuard against accidental test-count drops

The QEMU harness builds the host test runner, boots with tests=on tests.shutdown=on tests.verbosity=summary boot.debug=on roulette=skip, parses KTAP from the serial stream, and interprets isa-debug-exit.

Verification And Discipline

RecipeWhat it does
just ensure-verusFetch the pinned Verus toolchain
just verifyVerify all proof files, or one proof stem via FILTER
just check-miriRun slopos-ostd tests under Miri
just tcb-ratioPrint unsafe lines in OSTD over kernel Rust LoC
just check-no-kernel-asyncFail on async fn in kernel crates
just check-framekernelComposite framekernel gate
just fmtcargo fmt --all -- --check
just checkAllocation and stack-size gates against kernel.elf

just check-framekernel requires a prior just build because the stack-size gate inspects builddir/kernel.elf.

On this page