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, or ssh) and requires others; the resolver wires the graph together from those declarations.
  • Process supervision built in. graph-resolver runs 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 graphctl CLI 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.