Types of init systems in Linux
Once the Linux kernel has completely loaded - it searches init process located at /sbin/init. This process is responsible for starting the user space environment.
The most common init implementation currently are:
- System V - is the old solution, it has been around for a couple of decades. It uses runlevels to define the state a system should be booting in.
In every runlevel a specific amount of shell scripts is processed to reach the state that the system should be in. There is little standardization on the System V init shell scripts.
If your system has an /etc/inittab, it is using System V
- Upstart - was created by Ubuntu and was the first serious attempt to replace System V. Upstart is reactionary: it receives events and runs jobs based on these events - this makes Upstart more flexible.
But still, Upstart is using shell scripts and uses many features that existed in System V already.
If your system has an /etc/init directory, it is using Upstart
- systemd is rapidly taking over the way how Linux systems are starting services. The goal of systemd project is "to provide an operating system that runs on top of Linux kernel".
It takes care of everything, which on ocasions scares experienced Linux administrators: mounting file systems, cron can go away - because you can schedule jobs, xinitd can go away - because systemd can do that as well, it can even spawn containers.
systemd is goal oriented: the administrator defines a target that needs to be reached and next - defines all that needs to be loaded to reach that state in Unit files.
Unit files specify loading of services and more, as well as dependencies that need to be met to load them. If your system has a directory /usr/lib/systemd - you're on systemd.
systemd currently is the standard on all major Linux distributions.