diff options
Diffstat (limited to 'TODO.md')
| -rw-r--r-- | TODO.md | 53 |
1 files changed, 53 insertions, 0 deletions
@@ -0,0 +1,53 @@ +# vigil + +## Philosophy + +- Never drop into an emergency shell for non-critical failures (e.g. non-root filesystem mount failure). +- Failures should be logged, not fatal. +- Configuration via declarative TOML unit files. _(just like in systemd, but without the extra bloatware. Objectively, it is convenient to write services for systemd)_ + +## Non-goals (explicitly out of scope) + +- Socket or bus activation (also like systemd). +- Built-in cgroups, namespaces, or resource control. +- D-Bus integration. +- Dynamic dependency resolution beyond static unit deps. + +## Implementation Roadmap + +### Early system setup + +- [x] Mount essential filesystems (`/proc`, `/sys`, `/dev` via `devtmpfs`). +- [ ] Spawn `udev` (or compatible device manager) as child process. +- [x] Mount user-defined filesystems from `/etc/fstab` (non-fatal on failure = log & continue). +- [ ] Activate `swap` (non-fatal on failure). +- [ ] Set hostname, timezone, and locale from config. +- [ ] Load kernel modules (via `modprobe` or direct `init_module` syscall). + +### Core runtime responsibilities + +- [ ] **Service management** + - Parse TOML unit files (`/etc/vigil/units/*.toml`) + - Start/stop/restart/status via `vigilctl` + - Handle `Wants=`, `After=`, `Before=` dependencies + - Auto-restart failed services (configurable: `restart = always|on-failure|never`) +- [ ] **Child process reaping** + - Install `SIGCHLD` handler + - Call `waitpid(-1, ...)` in loop to reap zombies + - Log exit status, signal, and runtime duration per service +- [ ] **TTY & login** + - Launch `getty` on configured TTYs (e.g. `tty1`–`tty6`) + - Support custom `getty` paths/args per TTY in config + +### System lifecycle control + +- [ ] Handle `reboot`, `halt`, `poweroff` via `vigilctl` +- [ ] Properly terminate all services in reverse dependency order +- [ ] Sync filesystems and unmount (best-effort) +- [ ] Invoke `reboot(2)` / `halt(2)` syscalls directly + +### Signal handling + +- [ ] `SIGINT` / `SIGTERM` = graceful shutdown +- [ ] `SIGUSR1` / `SIGUSR2` = reload config or trigger debug dump +- [ ] Block all non-fatal signals during critical sections (e.g. mount) |
