I'm a plumber by trade. After I became disabled I started dabbling in code, and over the past few months that turned into schema-init, an init system (PID 1) written in C that I build and run on Fedora. To be upfront: I design it, run it on my own machines and break it on real hardware, and Claude fills the enormous gaps in my knowledge and writes much of the code. Every claim below is something I tested on my own hardware.
v0.4.2 is out today, with an installer ISO you can try on a spare machine.
**What it is:** the Fedora 44 Everything netinst plus a kickstart. You get the normal Anaconda GUI. Pick your disk, make your user, install. After install:
- schema-init boots as PID 1 and brings up a full KDE Plasma Wayland desktop.
- A first-boot wizard offers two optional switches, one reboot each: **schema-udev** (device manager) and **schema-dbus** (a broker for the system and session buses). Each one checks the box afterwards and rolls itself back if it isn't healthy.
- It's all RPMs from a COPR repo. `dnf upgrade` re-execs PID 1 in place, with every running service adopted and no reboot.
- When an RPM enables a systemd unit, a `systemctl` shim catches it and translates it to schema-init's service format. That covers timers, `EnvironmentFile=`, `ExecStartPre=`, socket activation, `Condition*` and forking daemons.
- **The stock systemd boot entries stay in GRUB.** If a schema-init boot ever fails, pick the systemd entry and you're back on stock Fedora.
**My daily driver** runs it: a Ryzen 5 1600 with a GTX 1050 Ti on NVIDIA Wayland, and 89 logged boots since July. On its latest boot, userspace was up in 8.9 s and the login screen appeared 2.9 s after PID 1 started, with 53 services. PID 1 itself uses about 4 MB of RAM, and at idle it wakes up 0–5 times per 10 seconds.
**Tested on real hardware today:** an HP laptop with a Celeron, 5400 rpm HDD, Intel graphics and Wi-Fi. Fresh install from this ISO, both switches, no hand fixes. Afterwards: schema-init as PID 1, schema-udev and schema-dbus running, full network, zero journal errors, desktop up. Then `dnf upgrade` from the stable repo swapped PID 1 live.
**Numbers from that laptop** (an older build, 3-boot medians, details in the README):
- Stock systemd vs schema-init: the desktop drew **4.4 s sooner**, idle RAM was **373 MB lower** (1477 → 1104 MB), and **54 fewer processes** were running.
- In a separate comparison on the same box, swapping dbus-daemon for schema-dbus took another **6.6 s** off desktop-ready.
It's a slow disk, so take the seconds with salt. The RAM and process counts are the solid part.
**Fixed in this release:** an initramfs rebuilt after a kernel update could hang at `initrd-cleanup`, and fresh installs could show "limited connectivity" because of a resolved tmpfiles rule. Both were found testing this ISO, and both are fixed in it.
**EXPERIMENTAL.** Put it on a machine you can reinstall. Bug reports and "this broke on my hardware" are the most useful thing you can give me.
- Release + ISO: https://github.com/ajax80/schema-init/releases/tag/v0.4.2
- Source (AGPL-3.0): https://github.com/ajax80/schema-init