s6.rc [1] is an attempt to bridge the gap between the elegant foundation provided by s6/s6-rc and an init/rc system that implements the main functionalities beneficial for distributions. s6.rc features a preprocessor that generates source directories for use with s6-rc from given templates. The preprocessing procedure is composed of multiple tiny passes, which makes the preprocessor not only clean and powerful, but also extensible. Using the preprocessor, s6.rc supports instanced supervision, optional dependencies, in-place `up'/`down' scripts, automatic connection between services and loggers, as well as package-specific passes that can be plugged into the preprocessing phase. [1] . The init part of s6.rc is, in many aspects, similar to what one would expect from s6-linux-init. The stage 1/2/3 scripts shipped with s6.rc additionally support features like setting the time using hwclock(8) or other means before exec()ing `s6-svscan' (cf. the documentation for the rationale), duplicating (while writing to `/run/uncaught-logs') verbose `s6-rc' output to `/dev/console', automatic reboot under certain circumstances (eg. when required by fsck(8)), and automatically saving `/run/uncaught-logs/current' on shutdown. The attached tarball is an s6.rc-based example setup tailored for Alpine 3.7.x; a VM image of the setup is available at [2]. Due to a lack of expressiveness in execline, most scripts in s6.rc are written for the Byron Rakitzis implementation [3] of the rc(1) shell from Plan 9, and static-linked binaries for x86 [4] and x86_64 [5] are available for download. See the attachments for SHA512 checksums (signed using my OpenPGP public key) of the tarball, the VM image and the rc(1) binaries. [2] . [3] . [4] . [5] . Of course, this is just the beginning; a lot of work has to be done: * Although s6.rc can be easily configured to be rock solid, it is fairly fragile to PEBKACs: eg. if you accidentally delete `s6.rc' and then reboot the system, the system can get into quite serious troubles. Sprinkling related scripts with a lot of "if something is unset then default to blah" clauses can avoid the problem, but seems to make the code bloated. Is there a better solution? * Many more service definitions and ancillary files are necessary for s6.rc to be useful for the general public instead of just a few users, so any contribution / suggestion is welcome. BTW, I do not consider myself to be a really good documentation writer, so please tell me if you have a good idea on improving the s6.rc documentation. * In principle, it is possible to implement something like Gentoo's netifrc [6] using s6.rc's preprocessor, and I believe it would be much cleaner than netifrc. However, since I am not exactly familiar with the networking stuffs, perhaps it had better be done by someone else. [6] . -- My current OpenPGP key: RSA4096/0x227E8CAAB7AA186C (expires: 2020.10.19) 7077 7781 B859 5166 AE07 0286 227E 8CAA B7AA 186C