Before editing this page, please see the instructions on how debates work. If you are not the maintainer of a position statement, and have a suggestion or change to make, please contact the maintainers.

OpenRC position statement

OpenRC wishes to continue implementing things in a small, simple and efficient way, with the minimum things written in C, and all of the needed features. It also aims at portability. OpenRC is used in Gentoo by default, but also works very well in a number of BSD systems, and it can already work under Debian GNU/kFreeBSD very easily. OpenRC doesn't "take over" the PID 1, it doesn't even implement it, it only implements what's after it: it is a replacement for sysv-rc, not for sysv-init.

Pros

Cons

Comparing OpenRC with others

OpenRC vs Systemd

I have decided to not write anything in this section, considering the aggressive tone I'm getting in return, which is all but fun. Anyway, the problems with Systemd have been debated a lot already, so it is useless to list them here again.

OpenRC vs Upstart

Rebuttals

A bit of OpenRC description

Why this?

Because, even if OpenRC is used more or less the same way as sysv-rc, is the least known init systems, so I think this is useful.

Things you need to know about OpenRC

How OpenRC works: Example runscript

Because it seems OpenRC is not known enough, I thought it'd be nice to explain how it works, and show what a runscript looks like. So I wrote the below runscript for rsyslog replacing the default init.d sysv-rc style script shipped with the current version of rsyslog:

 #!/sbin/runscript

 command=/usr/sbin/rsyslogd
 name="enhanced syslogd"

 depend()
 {
         provide rsyslogd syslog
         need $remote_fs $time
 }

The only thing that is needed to replace the old init.d script of rsyslog is replace its content by the above, then do:

update-rc.d rsyslog defaults

It is just like we have been used to for years, and that is it, nothing more to it: it auto-magically integrates with the rest of the (traditional) init scripts with correct dependencies as one would expect. Internally of course, OpenRC in Debian re-implements update-rc.d and calls rc-update, but nobody needs to know that (except the maintainers of OpenRC in Debian). Pretty strait forward, for anyone that is used to the old sysv-rc scripts, isn't it? Also, if the above runscript looks a bit like a shell script, it is because it is one! In fact, maintainers can decide to implement or not the start() and stop() functions, and do any complex thing if they decide to do it (it is of course recommended to avoid it, but sometimes, you really do need to do complex stuff).

Transition plan

The transition should be very easy if we decide to get rid of the old sysv-rc package. Just have sysv-rc become a transition package which depends on OpenRC, and let everyone upgrade.

Todo list for OpenRC

The Debian package has still some things to be fixed. Rather than hiding the truth, I'm listing them here, hoping that this transparency will be appreciated.

invoke-rc.d

The Debian package for OpenRC keeps things as they were with sysv-rc as much as possible. Note that it is this way because of efforts from the package maintainers to allow a smooth trandition. The OpenRC version in Gentoo for example, doesn't provide update-rc.d or invoke-rc.d, which had to be included in OpenRC. These currently need some more work, so that symlinks in /run/openrc/started are correctly added or removed when calling invoke-rc.d in the case of a shell script (as opposed to a runscript which already works perfectly). This will make it possible to have "rc-status" display things correctly in all cases, which isn't the case yet when writing these lines (it currently only works for runscripts).

Hurd port

OpenRC is already ported to GNU/Hurd and work is progressing nicely. It already boots with up-to-date sysvinit and openrc packages. Some remaining quirks, like out-of-the-box halt and reboot remains to solve.

sysv-rc depends

It used to be very easy to install OpenRC: apt-get / dpkg -i the package, and that's it. Though recently, some dependency change in the sysvinit source package made the situation more complicated: ifupdown and openssh-server depends on a version of sysv-rc, which makes it impossible to install OpenRC even if it Provides: sysv-rc. A solution should be found.

Position statement maintainers