Dinit's overall function is fairly straightforward but there are some considerations that cause
its design to be more complicated than it might otherwise be. The heart of the issue is that
Dinit should not stall on I/O and its essential operation should never fail, which means that many
-code paths cannot perform memory allocation for example, and that log message all go through a
+code paths cannot perform memory allocation for example, and that log messages all go through a
buffer.
The design is based around an event loop: events include process termination, signal reception,