Skip to content

A supervisor daemon for Linux - written entirely in Rust™ - that conforms to the UNIX philosophy of doing one thing and doing it well

License

Notifications You must be signed in to change notification settings

georglauterbach/initd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

initd Logo

ci::status documentation::badge

📃 About

Warning

This software is currently in development and should not be used in a production environment.

initd is a supervisor daemon for Linux - written entirely in Rust™ - that conforms to the UNIX philosophy of doing one thing and doing it well1. initd supervises other processes, possibly as an init system (process with PID 1). Its main goals are:

  1. Stability: The program is robust and reliable.
  2. Performance: The program is efficient and fast.
  3. Integrity: The code is well-documented, linted, tested, as well as easy to navigate and comprehend.
  4. Simplicity: The code is easy to understand, and the program is easy to use.
  5. Fun: Often overlooked, it should be seamless and fun to write code and to use the program.

initd uses YAML configuration files to fully define the processes it supervises. The code aims to be simple in structure and easy to comprehend. Hence, you should be able to effortlessly navigate it to find out more about this project.

Note

This project draws inspiration from the computer of the NCC-1701-D USS Enterprise from Star Trek - The Next Generation2. The computer aboard the ship is a central system that manages the ship's operations. Hence, you will occasionally encounter references. Engage!

🔖 Documentation

As a supervisor daemon, initd starts and manages so-called services. Services are defined declaratively, initd continuously tries to establish the defined state. To reach this goals, initd employs subsystems, each providing special functionality integral to initd's operation.

Services

Service Definition

A service is a description of a program and its environment. Such a description contains information about

  • the type of the program
  • the program's name, where to find it, how to start it, how to shut it down
  • what the environment that the program should run in looks like
  • how to test the program's current state

Service Types

There are temporary and permanent services.

Service Lifecycle

Service Definitions

Structure

Subsystems

initd consists of the following subsystems:

block-beta
columns 12

space space space START:6 space space space
SCHEDULER:6 WATCHER:6
RECONCILER:6 REFLECTOR:6
space space space API:6 space space space
Loading

Subsystem: START

This subsystem initd and handles the initialization of initd itself.

Subsystem: SCHEDULER

This subsystem starts, restarts and stops services.

Subsystem: RECONCILER

This subsystem reacts to state changes of services.

Subsystem: WATCHER

This subsystem observes services and publishes their state transitions.

Subsystem: REFLECTOR

This subsystem provides diagnostic functionalities.

Subsystem: API

This subsystems handles API requests used to interact with initd during run-time.

Footnotes

  1. Doug McIlroy; E. N. Pinson; B. A. Tague (8 July 1978). "Unix Time-Sharing System: Foreword". The Bell System Technical Journal. Bell Laboratories: 1902-1903 (Style).

  2. Memory Alpha. Computer Technology. "LCARS".

About

A supervisor daemon for Linux - written entirely in Rust™ - that conforms to the UNIX philosophy of doing one thing and doing it well

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages