Reactive, dependency-graph-driven Linux init system with hot-swappable services and live kernel upgrades. A system that never needs to reboot.
YakirOS is a reactive, dependency-graph-driven init system for Linux. Instead of following a fixed boot sequence, components declare what they provide and what they require, and they activate the moment their prerequisites are satisfied. The graph is always live — there is no static "booted" state, just a system that emerges and adapts.
Highlights
- Reactive, not sequential. Traditional init says "here is the sequence, follow it." YakirOS says "here are the pieces, they know what they need" — components light up as dependencies are met.
- Capability registry. Each component publishes capabilities
(like
fs.dev,logging, orssh) and requires others; the resolver wires the graph together from those declarations. - Process supervision built in.
graph-resolverruns as PID 1, handling fork/exec/reap, SIGCHLD, early-boot mounts, and restart rate limiting. - Live component addition. An inotify watch on
/etc/graph.d/lets you drop in new component declarations and have them resolve into the running graph. - Inspect it as it runs. The
graphctlCLI talks to a control socket to show status, pending components, and dependency trees in real time. - Static, minimal binaries. A small TOML subset describes components; the resolver and CLI build as static binaries (musl-friendly) for early boot.
- A roadmap toward zero reboots. Milestone 1 (replace init) is done; later milestones target hot-swapping services via fd-passing and live kernel upgrades through CRIU checkpoint and kexec.
A taste
Component declarations live as TOML files in /etc/graph.d/:
/sbin/graph-resolver PID 1 binary (static)
/usr/bin/graphctl CLI tool (static)
/etc/graph.d/*.toml Component declarations
/run/graph-resolver.sock Control socket
/usr/libexec/graph/check-* Health check scripts
Installation
Build it and try the resolver against your existing system in test mode:
git clone https://github.com/Solifugus/yakiros.git
cd yakiros
make
# Install example components
sudo mkdir -p /etc/graph.d
make split-components
sudo cp examples/split/*.toml /etc/graph.d/
# Resolver detects non-PID-1 and runs in test mode
sudo ./graph-resolver &
# Query the graph
./graphctl status
./graphctl pending
./graphctl tree sshd
For a real deployment, build static binaries with make static,
install with make install and
make install-components, then point your bootloader's kernel
command line at init=/sbin/graph-resolver.
Downloads & installation
Builds are coming soon. Grab the source from GitHub for now.