Changes in Ubuntu: Five Stages of Grief
- Denial: System V Init
- Anger: Upstart
- Bargaining: Backward Compatibility
- Depression: udev
Of all the things I love about Linux, I think I love its stability the most. I'm not talking about uptime here, even though it's great. What I mean is the sense you get from Linux that it's on a solid foundation. Concepts like "everything is a file," "small programs that do one thing well," and the overall file system layout are well-worn principles with all the major kinks worked out. I get the sense of a collected wisdom, accumulated in the system over the years, guiding Linux forward. Sure, Mozilla's browser will change its name every few years, and both GNOME and KDE have gone through their start-from-scratch phase, but /dev files, initrd, at, cron, and System V initI can always count on these things being there.
Not so fast. It turns out that a few things in that list I just mentioned have already been replaced in a modern Ubuntu system…and the rest are on their way out. Perhaps that fact makes you want to reach for your torch and pitchfork, but hear me out first. By the time you reach the end of this article, I hope that you'll have gone through the five stages of grief: denial, anger, bargaining, depression, and finally reached acceptance of the impending death of these classic parts of Linux infrastructure.
Denial: System V Init
My own journey through the five stages of grief started a few months ago. I was documenting the System V init system under Ubuntu for The Official Ubuntu Server Book when I discovered that my Ubuntu system didn't have an /etc/inittab file. Considering that inittab is the core configuration file for init, that missing file piqued my curiosity. Soon I discovered that not only had it been replaced, but that change happened years agoand I never noticed until now!
If you're new to Linux, you might need a quick tutorial about init. The System V init system governs how Linux starts. After the kernel loads, the System V init program (/sbin/init) starts. This program then launches other scripts that mount file systems and start core services; in the case of a desktop system, init then ultimately starts X so you can log in.
One of the core characteristics of System V init is its use of runlevels. Runlevels define up to seven different states of the system, each having an associated number. When init switches to a particular runlevel, it starts or stops certain programs based on that runlevel's settings. For instance, when you tell init to change to runlevel 0, it prepares to halt the computer, shuts down services on the system, unmounts the file systems, and (if your power management works) powers off the system. Runlevel 6 does much the same thing, except that at the end the system reboots.
Not all runlevels shut down the system, though. Runlevel 1 puts you into single-user mode. A minimal number of programs run in this mode, which makes it handy for troubleshooting if the full system won't boot. Runlevels 2 through 5 are left up to each Linux distribution to configure, although on a Debian system they all do the same thingperform the normal system startup. On a Debian or Ubuntu system, these init scripts reside in /etc/init.d/, and all the runlevels have their own directories (/etc/rc0.d through /etc/rc6.d) containing symlinks to relevant scripts in /etc/init.d.