How Linux Used the Upstart Init System

This article examines Upstart, the event-driven init daemon developed by Canonical to replace the traditional System V init system in Linux distributions like Ubuntu. It outlines how Upstart handled system initialization through an asynchronous, event-based model, details the structure of its job configuration files, discusses its adoption across the broader Linux ecosystem, and explains the eventual transition to systemd.

What Was Upstart?

Upstart was an init system designed to manage the startup, maintenance, and shutdown of tasks and services during Linux operation. In Linux, the init system runs as Process ID 1 (PID 1), the direct or indirect ancestor of all other processes and the first user-space program executed by the kernel.

Canonical introduced Upstart in 2006, debuting in Ubuntu 6.10 (Edgy Eft). At the time, standard Linux distributions relied on the traditional UNIX System V (SysV) init model, which launched services sequentially according to predetermined runlevels. As modern computers introduced hot-pluggable devices (like USB drives, dynamically connected network interfaces, and external monitors), the rigid, sequential nature of SysV init became a bottleneck. Upstart was built to handle dynamic hardware changes efficiently and reduce system boot times.

The Event-Driven Architecture

Unlike SysV init's static process queues, Upstart functioned on an asynchronous, event-driven model:

Upstart Job Configurations

Upstart eliminated complex, boilerplate shell scripts typical of /etc/init.d/ in favor of declarative configuration files located in /etc/init/ with a .conf extension.

A standard Upstart configuration utilized specific stanzas to declare how a service should behave:

description "Example Network Service"
author "SysAdmin"

# Trigger events
start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]

# Process monitoring and lifecycle
respawn
respawn limit 10 5

# Execution
exec /usr/sbin/example-daemon --foreground

Key features of this configuration style included:

Administrators interacted with these jobs using utility commands such as start <job>, stop <job>, status <job>, and the master control tool initctl.

Adoption Across the Linux Ecosystem

While created by Canonical specifically for Ubuntu, Upstart's performance improvements led to adoption by other major distributions:

The Transition to systemd

Despite its improvements over SysV init, Upstart faced criticism for tight coupling with Ubuntu development policies and its reliance on proprietary Canonical Contributor License Agreements (CLAs).

In the early 2010s, systemd emerged as an alternative that incorporated an event-driven architecture, declarative service management, socket activation, and deep cgroup integration. Following Debian’s technical committee vote in 2014 to adopt systemd as its default init system, Canonical announced that Ubuntu would follow Debian's lead. Ubuntu officially replaced Upstart with systemd in Ubuntu 15.04 (Vivid Vervet), marking the end of Upstart's widespread role in mainline Linux distribution architecture.