-* License
-* Complete control socket handling and protocol
- - support for pinned-start and pinned-stop
- - support for listing all services
-* Implement a control utility to start/stop services after dinit has started
- - very basic version exists, needs thorough cleanup
-
+For version 0.3.0:
+------------------
+* Skippable services: if they terminate via ^C, treat as a successful startup. Allows
+ skipping filesystem checks.
+* Provide better status information:
+ - whether a service failed to start (as opposed to just being STOPPED)
+ - directly, and how (error code? died to signal? timed out?) or
+ - due to a dependency.
+ - whether a service has acquired, or is waiting to acquire, the console
+ - whether service was skipped (via ^C/SIGINT) instead of started normally.
+* Option to send signals to service process leader only (not to process group).
+
For version 1.0:
----------------
-* Log messages are completely prevented from going to the console if the console
- is being held by a service, meaning some can get lost. It would be better if
- there was a (limited) buffer.
+* Support S6-style startup notification (write to fd)
+* Man pages for all programs (done for dinit, not for dinitctl/shutdown/etc).
+* Write wtmp entry on startup (see simpleinit)
+* "triggered" service type: external process notifies Dinit when the service
+ has started. (maybe?)
+* on shutdown, after repeated intervals with no activity, display information
+ about services we are waiting on (or, do this when prompted via ^C or C-A-D).
+* A (perhaps limited) way(s) to modify a service description after it is loaded -
+ eg add/remove dependencies, change properties.
+* Think about detecting runs-on-console dependency conflicts (i.e. if A runs-on-console and
+ B depends on A and runs-on-consle then B can never start)?
+ - Complicated if service descriptions can be altered after loading. Perhaps not necessary
+ if better status information can be provided.
+* Documentation must be complete (see section below).
+* Package-manager-friendly way to enable/disable services.
+ Perhaps a service can specify a dependency file (with dependency type) where
+ the file contains a list of service names, or if it is a directory, each
+ filename within corresponds to a service that is a dependency.
+* Proper support for socket activation?
+* Be able to boot and shutdown Linux and FreeBSD.
+
+For later:
+----------
+* On linux when running with PID != 1, write PID to /proc/sys/kernel/cad_pid so
+ that we still receive SIGINT from ctrl+alt+del (must be done after /proc is
+ mounted, possibly could be left to a service script)
* Perhaps need a way to prevent script services from re-starting.
(eg there's no need to mount filesystems twice; there might be various other
system initialisations that can't or shouldn't really be "undone" and so do
not need to be re-done).
-* Add command line arg to start in "PID 1" mode (even if PID != 1).
- Basically, allow running as a system service monitor, without
- requiring that dinit runs as PID 1.
-* if PID != 1, choose a more sensible service definition directory
- (something like $HOME/dinit.d)
-* Documentation including sample service definitions
-* Better error handling, logging of errors
-* Write wtmp entry on startup (see simpleinit)
-* Allow running services as a different UID
-
-For later:
+* Internationalisation
+* A service can prevent shutdown/reboot by failing to stop. Maybe make
+ multiple CTRL-ALT-DEL presses (or ^C since that's more portable) commence
+ immediate shutdown (or launch a simple control interface).
* When we take down a service or tty session, it would be ideal if we could kill
- the whole process tree, not just the leader process.
-* Investigate using cn_proc netlink connector (cn_proc.h) to receive process
- termination events even when running with PID != 1 (Linux only).
- Also, there is the possibility of having a small, simple PID-1 init which
- sends terminated process IDs over a pipe to Dinit.
+ the whole process tree, not just the leader process (need cgroups or pid
+ namespace or other mechanism).
* Allow logging tasks to memory (growing or circular buffer) and later
- switching to disk logging (allows for filesystem mounted readonly on boot)
-* Rate control on process respawn
-* Maybe re-implement "shutdown" ("halt", "reboot") from util-linux to better work
- with dinit.
+ switching to disk logging (allows for filesystem mounted readonly on boot).
+ But perhaps this really the responsibility of another daemon.
* Allow running services with different resource limits, chroot, cgroups,
namespaces (pid/fs/uid), etc
-* Make default control socket location build-time configurable
-* Allow specifying a timeout for killing services; if they don't die within
- the timeout (after a TERM) then hit them with a KILL.
+* Support chaining service output to another process (logger) input; if the
+ service dies the file descriptor of its stdout isn't closed and is reassigned
+ when the service is restarted, so that minimal output is lost.
+ - even more, it would be nice if a single logger process could be responsible
+ for receiving output from multiple services. This would require some kind of
+ protocol for passing new output descriptors to the logger (for when a
+ service starts).
-Even later:
+Even later / Maybe never:
+-------------------------
* Support recognising /etc/init.d services automatically (as script services, with
no dependency management - or upstart compatible dependency management)
Also BSD's rc.d style scripts (PROVIDE, REQUIRE).
factor.
* Cron-like tasks (if started, they run a sub-task periodically. Stopping the
task will wait until the sub-task is complete).
-* Socket activation of services? Not sure if enough non-SystemD derived
- daemons actually support this to warrant implementing it.
* Allow to run services attached to virtual tty, allow connection to that tty (ala "screen").
* SystemD-like handling of filesystem mounts (see autofs documentation in kernel)
i.e. a mount point gets an autofs attached, and lazily gets mounted when accessed
Documentation:
+--------------
+* Design philosophy/rationale document
+* Coding style guidelines
* What's the best TERM setting? gogetty gives me "linux" but I think other variants may be
better (eg "linux-c").