"The crucial point about upstart is that it's event-based rather
than level-based (init, as described above, is level-based).
Services can be started or stopped in response to other events
occurring on the system: any other events, anywhere. So a service
can be set to respond to an event generated by a piece of hardware
being plugged in, for example. It can also handle restarting
services if they die unexpectedly (which init can't do).
"Instead of treating a particular level (or a particular piece
of software) as a goal, and starting services to correspond with
that, upstart starts off with a single 'startup' event, and carries
on as far as the available hardware indicates, and as far as the
event chain from 'startup' implies. (Note that you can set services
to start when another service is started, which can also extend the
startup chain.) You can also use events to start up services in
blocks -- there'll be an explanation in the next article of how to
run your old init system with upstart for an easy move over."