Running SlOS in QEMU
SlOS is Slepp's personal, unreleased hobby operating system. The first-use path is a native 64-bit QEMU VM with a fresh disk and user-space shell. The kernel source is currently private; these commands assume you already have a checkout.
1. Check the host
Use Linux with GNU Make and Python 3. x86-64 needs native GCC, GNU binutils, NASM, GRUB, xorriso, and qemu-system-x86_64; GCC multilib is not required. AArch64 needs native or cross GCC/binutils and qemu-system-aarch64. make doctor diagnoses the selected toolchain without installing or downloading anything.
# Debian / Ubuntu, if doctor reports missing tools
sudo apt install build-essential binutils nasm python3 grub-pc-bin grub-common xorriso qemu-system-x86
# Cross-building AArch64/QEMU virt on an x86-64 host:
sudo apt install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu qemu-system-arm make selects AArch64 on an ARM64 host and x86-64 otherwise. Set ARCH=x86_64 or ARCH=aarch64 BOARD=qemu_virt explicitly to select a guest. GRUB/xorriso are required for the x86-64 boot ISO; AArch64 boots its native Image with a firmware device tree. DOOM and the Hew compiler are not first-run prerequisites.
2. Build and start the guest
# In an existing SlOS source checkout on Linux
make doctor
make first-user-check
make dev make first-user-check checks the native user shell and persistent file readback across two boots before you start an interactive session. A retired i386 executable is refused rather than silently run through a compatibility layer.
make dev uses DOOM=0, serial I/O, and a unique 8 MiB image under build/<variant>/dev/. Successful disposable sessions remove their image; failed or interrupted runs retain it. It never opens your existing disk.img. Guest user networking has no host forwarded ports by default.
Both qualified QEMU targets default to SMP=1 CPUS=4. AP-pinned kernel work is preemptive; user programs and general services remain on CPU 0. SMP=0 CPUS=1 selects single-core debugging. x86-32 is retired and ARCH=x86 is rejected.
help
uname
heap test
ps
events 10
fsck
halt Wait for slos:/$. The shell itself runs as a native user ELF. halt shuts down QEMU. Alternatively press Ctrl-a, x to exit; Ctrl-a, c switches between the serial console and QEMU monitor.
3. Use a persistent disk
make dev DEV_MODE=graphical
make dev DEV_DISK=my-slos.img
# After halt, resume the same explicitly persistent image:
make dev DEV_DISK=my-slos.img x86-64 graphical mode adds a VGA window while retaining serial I/O; it does not qualify every older graphical application. AArch64/QEMU virt uses serial mode and rejects graphical mode. An explicit DEV_DISK is persistent and is not reset. Save work under /home/; guest /tmp is RAM scratch. Stop the VM before host-side image editing, use a separate disk for each VM, and back up persistent work.
4. Reach a guest service from the host
# Opt-in loopback forwarding with an explicitly persistent dev disk
SLOS_QEMU_HOSTFWD='tcp:127.0.0.1:8080-:80' make dev DEV_DISK=my-slos.img
# In SlOS:
httpd
# In a second host terminal:
curl http://localhost:8080/
curl http://localhost:8080/api/causal/state SLOS_QEMU_HOSTFWD adds only the requested rules. The explicit 127.0.0.1 binding keeps this example on host loopback. Start the intended guest listener separately; a forwarded port does not start a service.
The legacy x86-64 run/run-nographic targets instead reuse disk.img and configure HTTP 8080→80, telnet 2323→23, Noise shell 5200→5200, and chat 6667→6667. Their forwards are not restricted to loopback. Check port availability and firewall exposure; these hobby services are not production security boundaries.
10.0.2.15 is the guest address inside QEMU's user network, not normally a host-routable address. Use localhost:8080 from the host. A bridge or TAP setup has different addressing and requires explicit configuration.
Troubleshooting
Run make doctor for the selected architecture first. Missing GRUB/xorriso prevents an x86-64 ISO boot; a cross-built AArch64 guest needs its matching compiler and QEMU. Use serial mode on a headless host. A legacy run failing to bind a port can use default make dev without forwards. Preserve failure logs and disks; never delete a disk containing work as a troubleshooting shortcut.
Continue with the C/Hew application workbench, build variants, native compute demonstrations, or the local Hew platform.