What it is
A custom ARM64 operating system built from a package list and shipped as a bootable ISO: Alpine Linux under an XFCE desktop that deliberately mixes two conventions — a macOS-style bar along the top (app menu, tray, volume, clock) and a Windows-style dock along the bottom (app launchers, live taskbar, show-desktop). It boots in Parallels straight to a branded desktop with no login prompt and no setup wizard, logging itself in and configuring its own wallpaper, shortcuts and panels on first start. Assembled from a downloaded kernel and initramfs with a custom overlay shipped on the disc, then debugged from inside the running VM over TCP, because a guest console cannot be read remotely. Three bugs were worth the trouble: a panel launcher plugin that rendered only one of seven declared icons (fixed with one plugin per icon), a mouse that would not move because Alpine eudev ships no init script so udev never started — and libinput finds devices only through udev — and an invisible cursor that looked exactly like a broken mouse until the core cursor font was installed.
Version history
Straight from the project’s own card data — what each version added.
First attempt: a from-scratch kernel and boot chain, built by the repo’s own build script. The kernel booted, but the UEFI handoff could not be verified remotely and there was no way to read a guest console — scrapped for something that could be inspected from the inside.
Rebuilt on Alpine Linux: boots to a branded XFCE desktop in Parallels with no login prompt, working mouse and keyboard, self-applied wallpaper and keyboard shortcuts, top menu bar + 7-icon dock. 431 MB ARM64 live ISO, resumable download.
Files on the site
By the numbers
Measured from the real working folder ~/IsaacOS — not a claim, a count.
Mostly: Shell ×8 · binary assets ×7 · Python ×5 · JSON ×2 · Markdown ×1
What broke, and what I’d change
Not written yet. This is the part only I can write — what actually went wrong, and what I’d do differently. It lives in builds/reflections/isaacos.md (see _TEMPLATE.md); as soon as that file has words in it, this section fills in on the next build.
Everything else on this page — the spec, the version history, the file counts — is generated from the project’s own build notes and files, so nothing here is guesswork.
Build spec
The project’s own build notes, rendered. Open the raw .md ↗
Show the spec
IsaacOS v1.0 — build notes
A custom ARM64 operating system that boots straight into a branded desktop, made as a bootable ISO for Parallels on Apple Silicon.
Download: IsaacOS-v1.0-arm64.iso — 431 MB · SHA-256 dab0e68cdbd1937abf685b091265fadb99add847df205b5c58b56c34255dc4af
What it is
Not a reskin and not a remaster. IsaacOS is assembled from a package list: an Alpine Linux userland, a downloaded kernel + initramfs, and an XFCE desktop configured property-by-property through xfconf. The desktop deliberately mixes two conventions — a macOS-style bar along the top (app menu, tray, volume, clock, power) and a Windows-style dock along the bottom (app launchers, live taskbar).
- Base: Alpine Linux, ARM64
- Desktop: XFCE 4.18
- Display: Xorg + fbdev, libinput for input
- Boots to: desktop, no login prompt, no setup wizard
- First boot: ~2.5 min (installs the desktop from the disc); instant after
that, since it runs from RAM
Boot chain
- UEFI/GRUB loads the kernel + initramfs from the ISO.
- Alpine's
nlplug-findfsscans the boot media, finds*.apkovl.tar.gz - The overlay's
/etc/apk/worldtells apk which packages the live system needs; firstboot.shruns on tty1: brings up udev and dbus, configures the desktop,session-setup.shruns inside the session and applies the wallpaper and
automatically, and unpacks it over the live root as an overlay.
they're installed from the local repo on the disc.
then starts X.
desktop config with xfconf-query before the panel draws.
The four bugs that actually cost the time
1. A wallpaper path that doesn't exist falls back silently. XFCE doesn't complain about a missing background image — it shows its default mouse wallpaper. The fix was to ship the PNG at a real path in the overlay and write the xfce4-desktop.xml channel file to point at file:///usr/share/backgrounds/....
2. xfce4-panel's launcher plugin rendered exactly one icon. Seven launchers were declared in a single plugin's items array and only the first ever appeared. Splitting them into one launcher plugin per icon made all seven render. Worth knowing: the config was provably correct the whole time — the settings were verifiably applied inside the running system.
3. The mouse didn't work — because udev never started. Xorg takes its input devices from libinput, and libinput finds devices only through udev. Alpine's eudev package ships /sbin/udevd and /sbin/udevadm but no /etc/init.d/udev script, so the usual rc-service udev start fails silently. The legacy-looking rc-update add udev default line looked like it was doing the job, but it only enables a service that doesn't exist. Launching the daemon directly fixed it:
mkdir -p /run/udev
pgrep -x udevd >/dev/null 2>&1 || /sbin/udevd --daemon
/sbin/udevadm trigger --action=add
/sbin/udevadm settle --timeout=15
4. An invisible cursor looks exactly like a broken mouse. With no cursor theme or cursor font installed, the pointer can render as nothing at all. font-cursor-misc supplies the core cursor glyphs, so the pointer is guaranteed visible.
Debugging method
A live VM console isn't readable remotely, and screenshots can't see a hardware cursor. So the guest was given DHCP and a one-way TCP dump back to the host: the boot script piped xfconf-query -lv, ls /usr/share/applications/, cat /proc/bus/input/devices and the tail of Xorg.0.log to a listening socket on the host. That's how the launcher config and the mouse binding were confirmed from inside the running system rather than guessed at.
Rebuild
cd ~/IsaacOS
python3 apkidx/build_apkovl.py # rebuild the overlay from apkovl-src/
bash build-isaacos-iso.sh # rebuild the ISO
Boot test in Parallels:
prlctl stop IsaacOS --kill
prlctl set IsaacOS --device-set cdrom0 --image ~/IsaacOS/IsaacOS-v1.0-arm64.iso --connect
prlctl start IsaacOS
Known limitations
- Live system — runs from RAM, so changes don't survive a reboot. Installing
- No 3D acceleration — X.org runs on software rendering (fbdev/swrast).
- Desktop icons — app shortcuts placed in
~/Desktopdon't render in this
to disk for persistence is the next step.
setup; every app is in the dock instead.
Earlier draft — auto-generated spec (2026-09-28)
_Kept for provenance. This is the spec generated from the original draft's own files before it was rebuilt as a working live ISO._
IsaacOS
Category: Software & Apps · Status: Draft
Custom OS concept - bootable with all Isaac tools.
Stack / Tools: OS, Concept, System Design
Build path:
- V1 — Concept phase.
Location: ~/projects/drafts/
Custom OS concept — bootable image bundling all Isaac tools. Concept phase.
Where it lives
- Source folder:
~/Documents/projects/drafts/IsaacOS - Artefacts on the site: 9 files · 960 lines of text · 28 KB
Stack
- Shell ×2 · .embed ×1 · .combined ×1 · .amd64 ×1
- external tools invoked:
node,npm,python3
What's in the code
build-isaacos.sh— 802 lines (Shell)README.md— 108 lines (Markdown)run-build.sh— 50 lines (Shell)
Notes found in the scripts
- =============================================================================
- IsaacOS ISO Builder
- Creates custom Debian-based ISOs for ARM64 and x86_64
- =============================================================================
_Spec generated from the project's own files on 2026-09-28 (gen-project-specs.py). Everything above was read from the listed files — file counts, line counts, names, routes, headings and script comments. No description was invented._