Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ISD — IR0 Software Distribution

Declarative, stamp-based builder for the canonical product image on top of the IR0 kernel: runit PID 1, BusyBox, login/auth, firstboot, recovery, and /etc overlays.

Sibling kernel: IR0 — public UAPI (headers_install), pack adapters, and QEMU/first-boot orchestration. See Documentation/DISTRO_CONTRACT.md and Documentation/PACKAGES.md.

Layer Repo Role
Kernel IR0 mechanisms, drivers, UAPI, boot ISO
Distro ISD (this tree) packages, init, services, rootfs, disk.img

ISD first boot — create your account

ISD first boot wizard (generic account; password also authenticates doas).

ISD guest — BusyBox vi editing main.c

After login: BusyBox vi on the MINIX rootfs — edit guest sources under QEMU (make run PROFILE=minimal from IR0).

ISD guest — BusyBox top under runit

BusyBox top: runit as PID 1 with supervised services (runsvdir/runsv) and an interactive shell — product process tree on QEMU.

IR0/Unix — Doom on QEMU (desktop profile)

Doom on the desktop profile: fbdev + evdev clients on the ISD rootfs under QEMU (make run PROFILE=desktop from IR0).

Fastest path (from IR0)

git clone https://github.com/IRodriguez13/IR0.git
cd IR0
make first-boot PROFILE=minimal    # clones ../ISD, asks before sudo install
make run PROFILE=minimal

Layout:

parent/
├── IR0/          # kernel + first-boot / run-isd
└── ISD/          # this repo — owns out/<arch>/images/<profile>/disk.img

make first-boot does not inject BusyBox/runit one-by-one. It builds the ISD image for PROFILE and boots that disk. Legacy inject remains behind IR0_LEGACY_USERSPACE=1 for smokes.

From this tree alone

export IR0_ROOT=../IR0
make isd-defconfig                 # writes .isdconfig if missing
make fetch
make headers                       # or: IR0_UAPI_TARBALL=/path/ir0-uapi.tar
make build ARCH=x86_64 PROFILE=minimal
make rootfs-tree PROFILE=minimal
make image-minix PROFILE=minimal   # → out/x86_64/images/minimal/disk.img

Extras (interactive — packages + BusyBox applets such as top):

make isdconfig PROFILE=minimal
# or non-interactive:
#   python3 scripts/isdconfig.py set CONFIG_PKG_NANO=y
#   python3 scripts/isdconfig.py set CONFIG_APPLET_TOP=y
make isd-image PROFILE=minimal   # apply after changing .isdconfig

profiles/*/packages.txt is lean (busybox+runit). Defconfig enables nano, ncurses, opendoas, and applet top by default.

Profiles

Profile Role
minimal Default — first-boot user registration + doas + nano
development Lab only (root autologin / fixtures)
desktop desktop policy + nano/ncurses
appliance Services only (busybox + runit)

Per-profile outputs:

out/<arch>/rootfs/<profile>/
out/<arch>/images/<profile>/disk.img
out/<arch>/stamps/{toolchain,uapi,packages,services,rootfs,images}/

Package stamps depend on the toolchain only (not UAPI). Services need UAPI. See Documentation/PACKAGES.md.

Layout

packages/        upstream recipes + setuid.allowlist
profiles/        profile.conf (policy), packages.txt (truth), overlay/
rootfs/base/     canonical /etc (no personal accounts)
scripts/         resolve-packages, isdconfig, stamp-run, stage-rootfs, …
services/        runit stages, console, firstboot, …
out/<arch>/      product/ stamps/ rootfs/<profile>/ images/<profile>/
Documentation/   distro contract and guides

Gates

./tests/contracts/run.sh
make toolchain-check ARCH=x86_64
make profiles-check
make personal-data-check
make rootfs-check PROFILE=minimal
make release-check PROFILE=minimal ARCH=x86_64

About

Unix userland for the IR0 kernel: runit, BusyBox, login/doas, rootfs profiles

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages