summaryrefslogtreecommitdiff
path: root/doc/systemd.html
blob: 16f00282dd797eabba4abaa50ef36eb3c19eeea0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="Content-Language" content="en" />
    <title>s6: a word about systemd</title>
    <meta name="Description" content="s6: a word about systemd" />
    <meta name="Keywords" content="s6 supervision init systemd" />
    <!-- <link rel="stylesheet" type="text/css" href="//skarnet.org/default.css" /> -->
  </head>
<body>

<p>
<a href="index.html">s6</a><br />
<a href="//skarnet.org/software/">Software</a><br />
<a href="//skarnet.org/">skarnet.org</a>
</p>

<h1> A word about systemd </h1>

<p>
 <a href="http://www.freedesktop.org/wiki/Software/systemd/">systemd</a>
is becoming <i>de facto</i> a standard init system for Linux. But even
this choice of words is treacherous, because systemd is much more than
an init system. It's basically an integrated redesign of all the low-level
userspace of a Linux system, with great plans to change how software is
run and organized.

<p>
 Which is not a bad thing per se: Unix software can definitely benefit
from improvements in this area, and the s6 suite, among other software,
comes from the same assessment and ultimately has the same goal. But
systemd suffers from a single conception flaw that sets it apart from
the other initiatives, and that has both political and technical
repercussions.
</p>

<p>
<strong>
 The single, overarching problem with systemd is that it attempts, in every
possible way, to do <em>more</em> instead of <em>less</em>.
</strong>
</p>

<h2> The political issue </h2>

<p>
 systemd attempts to cover <em>more</em> ground instead of <em>less</em>.
In other words, rather than simply being an init system, it tries to be
a complete overhaul of the way a Linux system is run, and tries to force
other software to hook with it in order to be supported. This goes very
much against: 
</p>

<ul>
 <li> The Unix philosophy, which is to do one job and do it well; </li>
 <li> The <a href="http://www.catb.org/esr/writings/cathedral-bazaar/">bazaar</a>
approach that has made the free software ecosystem what it is today - see
below; </li>
 <li> Cross-platform compatibility. BSD is not dead, Solaris is not dead,
but systemd ignores Unix. It even ignores Linux to some extent: the systemd
authors had the guts to ask for specific kernel interfaces! </li>
</ul>

<p>
 The reason why systemd has become so prevalent is not that it has been
accepted by the community. It's that it has manpower. It is backed up by
open source software companies that can provide much more manpower than
developers like myself working on free software on their own time. The
distribution model of systemd, made of lobbying and bullying, is much more
akin to the distribution model of Microsoft Windows than the one of GNU/Linux.
</p>

<h3> Project development vs. ecosystem development </h3>

<p>
I claim that systemd goes against the bazaar approach; someone noted that
the s6 development model is cathedral-like, and found it confusing. How
can I blame systemd for not embracing the bazaar when I myself don't
either? My answer was the following:
</p>

<p>
 I actually do not support bazaar as a <em>development model for a
project</em>.
I believe that quality software can only be written by keeping a tight grip
on what goes in, with a clear vision about the scope and design of the
project,
and that can only be achieved with very small teams. Free software following
the bazaar development model is notoriously bad at quality control; the
only way to have a project working is to have a small lead team
performing integration control - this is the way the Linux kernel works, for
instance, and it has a <em>huge</em> developer base.
</p>

<p>
(The other more or less viable development model for a project is to be
company-driven: making up for the lack of technical excellence with
manpower and procedures. Needless to say, companies usually do not
produce either free or good software, and they are not efficient at
doing so.)
</p>

<p>
 However, I also believe that the scope of a project should be clearly
defined and limited, and I very
much support the blossoming of as many well-scoped projects as can be, and
total freedom about the interfaces and communication points between all those
projects. I support bazaar as a <em>development model for a software
ecosystem</em>:
everybody can write software that interacts
with other software on their machine, in the way they choose.
To me, that is entirely what free software is about.
</p>

<p>
 systemd gets it wrong on all levels. It has a large developer
base, so no really coherent vision (and the vision it has is technically
inept, see below); its quality control is company-driven, with
all the drawbacks that it has; <em>and</em> it has an insanely
large scope and tries to enforce the use of its own interfaces for new
software development, essentially proprietarizing the ecosystem, which is
very much the opposite of bazaar.
</p>

<h2> The technical issue </h2>

<p>
 Software that does <em>more</em> instead of <em>less</em> is, simply put,
badly designed software. Trying to come up with an all-encompassing solution
is always a sign of developer hubris and inexperience, and never a sign of
good engineering. Ever. Remember sendmail, BIND, INN, and, definitely a better
analogy, the early days of Microsoft Windows&nbsp;? Yes, systemd is in
exactly the same league. It's as if we had learned <em>nothing</em> from the
mistakes of the past 20 years. The systemd programmers may be better at
writing code than the BIND programmers - which isn't saying much - but
they are just as bad at <em>designing software</em>, and when said software
is process 1 and basically the whole low-level userland layer, it is
frightening.
</p>

<p>
 Yes, doing more instead of less is especially bad in the case of
system software, i.e. low-level software that
aims to make the machine work and that application software depends upon.
The goal of an operating system is to make it possible to run <em>applications</em>,
and system software should always partake in that goal. <strong>System software
should stay the heck out of the way</strong>, which is exactly what systemd does
not. In that respect, it is very similar to Microsoft Windows. Again.
</p>

<p>
Listing all the technical flaws of systemd is a lifetime's work; some
people have pointed out the most glaring ones - there are a few links
below. My point is that the "we will solve problems by doing more"
approach chosen by the systemd developers is a newbie mistake, and the
root cause of all those flaws; systemd is technically unsustainable.
</p>

<p>
 s6 is my humble contribution to the fight against systemd, and I am
committed to making it evolve so it becomes a real alternative.
</p>

<h2> Links </h2>

<ul>
 <li> <a href="http://freedesktop.org/wiki/Software/systemd/">systemd's home page</a> </li>
 <li> <a href="http://uselessd.darknedgy.net/ProSystemdAntiSystemd/">An analysis of
the vacuity of most Internet arguments about systemd</a>, by the author of
<a href="http://uselessd.darknedgy.net/">uselessd</a>. </li>
 <li> <a href="http://ewontfix.com/14/">Technical arguments against systemd</a>,
by Rich Felker, main author of <a href="http://musl-libc.org/">musl</a> </li>
 <li> <a href="http://judecnelson.blogspot.fr/2014/09/systemd-biggest-fallacies.html">A
list of fallacies about systemd, with debunk</a> </li>
</ul>

</body>
</html>