104 lines
2.7 KiB
Markdown
104 lines
2.7 KiB
Markdown
# Blade is a PID 1
|
|
|
|
## Core
|
|
|
|
* [ ] Custom C++ userspace / init system
|
|
* [ ] Everything runs in one main PID 1 process
|
|
* [ ] Keep subsystems code-wise separate internally
|
|
* [ ] Single-user system
|
|
* [ ] Custom privilege escalation binary (`sudo`-like)
|
|
|
|
## Init / Service Manager
|
|
|
|
* [ ] PID 1 handles system initialization
|
|
* [ ] Start/stop/restart services
|
|
* [ ] Service dependencies
|
|
* [ ] Service ordering / stages
|
|
* [ ] Continuous service supervision
|
|
* [ ] Ruby-defined service configuration
|
|
* [ ] Ruby hooks for service events
|
|
* [ ] Runtime service control through Ruby socket
|
|
|
|
## Package Manager
|
|
|
|
* [ ] Built into the main userspace
|
|
* [ ] Packages defined as Ruby scripts
|
|
* [ ] Packages use Git sources
|
|
* [ ] Build using `make` commands
|
|
* [ ] Package dependencies
|
|
* [ ] Install/update packages
|
|
* [ ] Cleanup/remove unused packages
|
|
* [ ] Package hooks
|
|
* [ ] Hooks can add services/configuration/etc.
|
|
* [ ] Build required packages during startup
|
|
|
|
## Ruby
|
|
|
|
* [ ] Embedded static mruby
|
|
* [ ] Ruby is the main configuration language
|
|
* [ ] Same Ruby system defines packages + services + hooks
|
|
* [ ] Ruby commands available at runtime over a socket
|
|
* [ ] Runtime API for controlling the system
|
|
* [ ] Hooks / shortcuts can react to system events
|
|
|
|
## Built-in Components
|
|
|
|
* [ ] D-Bus broker
|
|
* [ ] Wayland compositor
|
|
- Notifications (also connects to dbus)
|
|
- Clipboard with history, and api to read/work with history.
|
|
* [ ] Terminal emulator
|
|
* [ ] Session manager
|
|
* [ ] Package manager
|
|
* [ ] Service manager
|
|
* [ ] System configuration/runtime API
|
|
|
|
## Boot Sequence
|
|
|
|
1. Start basic services
|
|
* Networking
|
|
* Audio
|
|
* Other essential infrastructure
|
|
2. Run package manager
|
|
* Build/update/install required packages
|
|
* Cleanup
|
|
* Run package hooks
|
|
3. Start TTY2
|
|
* Launch shell
|
|
4. Start normal non-desktop services
|
|
5. Start Wayland on TTY1
|
|
6. Wayland starts in `locker` state
|
|
7. Start services that depend on Wayland
|
|
8. Resolve service dependencies/order
|
|
9. Enter continuous runtime/event loop
|
|
|
|
## Wayland / Desktop
|
|
|
|
* [ ] Wayland compositor is built into PID 1
|
|
* [ ] TTY1 is graphical
|
|
* [ ] TTY2 is shell/terminal
|
|
* [ ] Desktop states:
|
|
* `locker`
|
|
* `terminal`
|
|
* `application`
|
|
* [ ] `application` state gives each application its own workspace
|
|
* [ ] System owns/controls the login/unlock password
|
|
* [ ] No traditional display manager
|
|
* [ ] One built-in terminal emulator
|
|
* [ ] Consider multiplexing later if actually needed
|
|
|
|
## Runtime
|
|
|
|
* [ ] Everything remains active after boot
|
|
* [ ] Event-driven system
|
|
* [ ] Ruby command socket
|
|
* [ ] Runtime configuration changes
|
|
* [ ] Hooks can react to:
|
|
* service events
|
|
* package events
|
|
* Wayland events
|
|
* shortcuts
|
|
* system events
|
|
* [ ] Continuously monitor and manage services
|
|
|