As we've learned, the init process is the first process to run during the Linux boot process. It is the parent of all other processes and is responsible for starting the essential services that bring your system to a usable state. But how does it accomplish this?
There are three major implementations of the Linux init system, each with a different approach to managing services.
System V Init
System V init, often called sysvinit, is the traditional init system for Linux. It follows a sequential startup procedure defined by scripts. The system's state is managed through runlevels, where each runlevel (e.g., single-user mode, multi-user with networking) has a specific set of services to start or stop. This was the standard for a long time in the classic Linux boot process.
Upstart
Found on older Ubuntu versions, Upstart is an event-based init system. It moved away from the strict sequential model of System V. Instead, Upstart starts and stops services (called jobs) in response to system events, such as a network device becoming available. This allows for more flexible and faster boot times.
systemd
The modern standard for the Linux init system is systemd. It is a goal-oriented system that manages dependencies aggressively. Instead of just starting a list of services, you define a target state (like a graphical interface), and systemd works to satisfy all dependencies for that target, often starting services in parallel to significantly speed up the boot process.
We have an entire course on Init systems where we will dive into each of these systems in more detail.