annotate www/history.html @ 958:0581a13cadb3

Revert patch that breaks sh4 target in 2.6.32 kernel.
author Rob Landley <rob@landley.net>
date Sat, 23 Jan 2010 06:16:59 -0600
parents 0da87d1ef528
children 333c8f799302
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1 <title>History of Firmware Linux</title>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
2
881
0da87d1ef528 Update the web page. Put the left-side nav bar back, move about page to "about.html" and make news.html the default index. Add architectures page. Note that IRC discussion is now on #edev.
Rob Landley <rob@landley.net>
parents: 867
diff changeset
3 <!--#include file="header.html" -->
0da87d1ef528 Update the web page. Put the left-side nav bar back, move about page to "about.html" and make news.html the default index. Add architectures page. Note that IRC discussion is now on #edev.
Rob Landley <rob@landley.net>
parents: 867
diff changeset
4
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
5 <h1>Where did "Firmware Linux" come from? Our story so far...</h1>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
6
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
7 <p>My name is Rob Landley, and I've been working on Firmware Linux on and off
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
8 since the late 90's. It's what got me into BusyBox and uClibc, embedded
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
9 development, compiler internals, and so on. Now it's where I put together
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
10 everything else I'm doing (like toybox, tinycc, and the relocatable gcc
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
11 wrapper) to see what actually works and give it a good stress-test. "Eating
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
12 your own dogfood", and all that.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
13
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
14 <p>The following may not be interesting to anybody but me. (It's as much
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
15 autobiography as technical history of the project.) But just for
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
16 the record:</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
17
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
18 <h2>Prehistory</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
19
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
20 <p>Back in the late 90's, before linksys routers came out, I installed several
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
21 masquerading gateways by putting Red Hat on old leftover 386 machines. This
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
22 involved removing as many packages as possible from the bas install, both to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
23 get the size down (to fit it on old hard drives) and to reduce the security
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
24 exposure of all the daemons Red Hat ran by default (including a print
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
25 server and an NFS server exposed to the world, for no readily apparent
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
26 reason).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
27
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
28 <p>Back around Red Hat 6, the smallest base install was still hundreds of
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
29 megabytes, and needed dozens of packages removed to get a reasonably stripped
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
30 down system. (You couldn't choose _not_ to install things like ghostscript,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
31 or printer support, only remove them after the fact.) Package dependencies
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
32 often forced me to delete stuff by hand: some packages' uninstall scripts
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
33 outright failed, others had circular dependencies in long chains through
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
34 dozens of packages, and there was no distinction between "this package
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
35 provides optional functionality" and "it won't run without this", a dependency
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
36 was a dependency as far as RPM was concerned.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
37
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
38 <p>Stripping down Linux installs was a time-consuming process that still left
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
39 behind mountains of junk doing who knows what, which I didn't understand well
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
40 enough to safely remove.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
41
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
42 <p>Stripping down a full distribution seemed like the long way around to get a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
43 minimal system. What I wanted was to build _up_ from an empty hard drive,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
44 adding only what I needed. I knew how to build packages from source to add
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
45 them to a working system, but not how to _get_ a working system in the first
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
46 place. When I went to the the third Atlanta Linux Showcase (in 1999), I
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
47 pestered everyone I met to tell me how to build a complete Linux system from
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
48 source code. Lots of people thought it was a great idea, but nobody could
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
49 point me to the appropriate HOWTO. A few months later, one of the people I'd
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
50 asked emailed me about the launch of the Linux From Scratch project, and from
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
51 that I finally learned what I needed to know.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
52
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
53 <p>The LFS book linked to the <a href=http://tldp.org/HOWTO/Bootdisk-HOWTO/index.html>Linux Bootdisk HOWTO</a>, and for a while I got no further than that
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
54 immensely educational resource. It explained exactly what you needed to copy
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
55 from an existing root filesystem in order to run an arbitrary app from a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
56 bootable floppy. It explained the directory layout, which configuration files
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
57 were actually necessary and what they did, the early boot process, and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
58 introduced me to the ldd command with which I could track down the shared
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
59 libraries a given executable needed.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
60
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
61 <p>Around this time I also encountered
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
62 <a href=http://www.toms.net/rb/>tomsrtbt</a>, which used the old "format a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
63 1.44 megabyte floppy to to 1.7 megabytes" trick to fit an enormous amount
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
64 of Linux system onto a single bootable floppy disk. (This was also my
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
65 introduction to the BusyBox project, and later to the programming language
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
66 LUA.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
67
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
68 <p>The above approach of cherry-picking your own boot environment using
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
69 prebuilt binaries didn't scale very well, and didn't let me mix and match
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
70 components (such as substituting busybox for Red Hat's command line
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
71 utilities), so when Linux From Scratch's 3.0 release came out I cleared
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
72 a month to sit down and properly work through it, understanding what each
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
73 step was doing. I turned their instructions into a bash script as
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
74 part of the learning process, because I kept screwing up steps and having to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
75 start over, only to typo an earlier step as I repeated it by hand and have to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
76 start over _again_. I joined the Automated Linux From Scratch mailing list in
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
77 hopes I could find (or help create) an official script to use, but they were
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
78 all talk and no code. (Everybody had their own automation script, but the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
79 project wanted to create something big like Gentoo and seemed to think that
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
80 publishing a simple script implementing the existing Linux From Scratch
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
81 instructions was beneath them. So everybody had their own script, none of
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
82 which were "official".)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
83
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
84 <p>My own script quickly evolved to remove packages like gettext and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
85 tcl/expect, things the masquerading servers I'd been assembling didn't actually
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
86 need. I poked at adding X11 (something I'd installed myself by hand back under
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
87 OS/2) and pondered running the system on my laptop someday, but the hundreds of
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
88 packages I'd need to build and the constant maintenance of keeping it up to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
89 date kept that idea way down on my to-do list.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
90
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
91 <h1>FWL v0: The WebOffice version</h1>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
92
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
93 <p>Towards the end of 2000 I met the founders of a local start-up through
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
94 the Austin Linux Users Group (two Taiwanese guys named Lan and Lon), and at
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
95 the end of the year joined their start-up company "WebOffice" as employee #4.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
96 The two founders were ex-AMD hardware guys who didn't really program, who had
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
97 already hired a recently retired professional tennis player to do marketing
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
98 for them. They had a prototype firewall product they'd demonstrated to get
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
99 venture capital funding: a small yellow box running stock Red Hat 7. (When
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
100 they first demonstrated it to me, I diagnosed and removed the "code red" virus
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
101 from it.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
102
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
103 <p>The money wasn't great, but the project was interesting, challenging,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
104 and full of learning opportunities. Full-time Linux positions were still
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
105 somewhat rare back then, and to make up for the low salary (and the fact
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
106 they weren't offering stock options; yes I asked, they were saving it
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
107 for themselves and the VCs), I was promised that I could GPL most of the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
108 code I was working on as soon as it shipped. Back in 2000, that sounded
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
109 like a pretty good deal.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
110
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
111 <p>For a the first few months I was their only programmer, doing
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
112 everything from architecture to implementation (OS, applications, web
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
113 interface, the works). I became lead developer and architect when they got a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
114 second round of VC funding they hired more developers.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
115
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
116 <p>Alas, mostly bad ones. The founders didn't know enough about
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
117 programming to choose wisely,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
118 and I wasn't consulted on most hiring decisions because I wasn't "management".
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
119 Only one actual IDIOT in the bunch, thank goodness, but they made me share
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
120 an office with him. He was another Taiwanese guy (this one named "Luan")
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
121 who the founders felt sorry for because his previous dot-com had gone under
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
122 and he'd be deported if he didn't stay employed to maintain his H1B visa.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
123 (Yes, they admitted this to me when I complained about him.)
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
124 Unfortunately, not only did he not know anything of use to the company, but
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
125 he never showed any ability to learn, and after the third time "show me how
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
126 to do this" turned into him handing in my example code verbatim as his work,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
127 our working relationship deteriorated somewhat. He literally could not work
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
128 out how to write a "hello world" program by himself, and when I spent
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
129 an hour explaining things to him rather than writing example code he could
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
130 turn in he got frustrated and accused me of being obstructionist because I
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
131 wouldn't do his job for him. (Of course he had an MCSE.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
132
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
133 <p>And thus began my habit of taking my laptop to places other than
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
134 my office, so I could get work done without interruption...</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
135
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
136 <p>There are reasons this company didn't survive to the present day.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
137
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
138 <h2>Yellowbox technobabble.</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
139
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
140 <p>WebOffice's proposed product was an early multi-function embedded Linux
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
141 device. It was a masquerading fireball which provided dhcp and DNS for its
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
142 private subnet. It also provided a VPN bridging multiple such subnets
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
143 (possibly from behind other existing firewalls, by bouncing connections off a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
144 public "star server"; an idea the founders of WebOffice tried to patent over
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
145 my objections). It also provided network attached storage (samba) with a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
146 web-based user account management GUI. It
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
147 also provided scheduled actions, such as automated backup. It also acted
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
148 as a video server. And it did a dozen other things I don't even remember.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
149 (Their marketing material called the project the "iLand gateway 2000". I had
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
150 no say in this.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
151
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
152 <p>I called it "yellowbox" (because it was), and described it as a "swiss army
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
153 server". The hardware was a standard PC motherboard and an 8 port ethernet
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
154 switch in a small custom-designed bright yellow metal case with pretty decals
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
155 on it. Inside was a 266mhz celeron, 128 megs
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
156 of ram, a 2 gig hard drive, two network cards, and the aforementioned 8 port
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
157 100baseT ethernet switch removed from its case and screwed into a metal frame.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
158 The back of the box exposed a lot of ethernet ports (one "uplink" port and 8
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
159 switch ports, although only 7 of the switch's ports worked because the eighth
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
160 was soldered to the second internal ethernet card; they labeled it "service"
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
161 or some such because if the hole in the back of the case didn't let them
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
162 expose it to the outside world it wouldn't fit right). The only other port
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
163 was a place to plug in the power cable. The front had many blinky lights
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
164 (one of which was a blue LED, which they were very proud of and considered a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
165 big selling point).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
166
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
167 <p>Most importantly, the motherboard's video/keyboard/mouse ports weren't
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
168 exposed to the outside world: it was supposed to run as a headless box
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
169 administered through the network via a web server with clever CGI. We could
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
170 plug a keyboard and monitor into it during development, but only by taking
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
171 the case off. Out in the field, it had to "just work", and would be a useless
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
172 brick if it didn't boot all the way into the OS and run our applications.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
173
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
174 <p>This was my first exposure to embedded development. The hardware was
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
175 standard PC/x86, it wasn't too badly underpowered for what it did (at least
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
176 by the standards of the day), and it used wall current instead of battery
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
177 power... But it was a headless self-administering box meant to function as an
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
178 appliance to end users, which was new to me. It was also a challenge to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
179 strip down the whole OS into a small enough package that they could download
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
180 entire new OS images using the internet speeds of 2001, and then update
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
181 the new OS image without losing data or turning it into a brick.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
182
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
183 <p>WebOffice's original prototype device ran a stock Red Hat 7 intall (the one
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
184 that had the Code Red virus when they first demoed it to me after a LUG
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
185 meeting). The whole OS image took up almost a gigabyte, and that's before
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
186 they'd implemented any applications or web UI. I rebased the system on Linux
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
187 From Scratch, using my LFS 3.0 script to build the base OS and creating a new
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
188 script to build the additional packages (apache, postscript, ssh, and so on)
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
189 the project used. I got the OS down under 100 megs (but not by much, it still
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
190 used glibc and gnu coreutils and so on). I then spent the next year and a half
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
191 learning how to properly strip down and secure an embedded system. I brushed
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
192 against both busybox and uClibc during this period, but couldn't get either one
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
193 to work in our project at the time. We needed more functionality than either
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
194 provided back then.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
195
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
196 <p>I implemented all the web CGI stuff in Python; a part-time web
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
197 designer would come in once a week to mock up pages using Dreamweaver, and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
198 I'd take the result and make my Python code spit heavily cleaned up versions,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
199 plus actual content and minus most of the &amp;nbsp; and similar lunacy.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
200 Getting the stylesheets to work was interesting. (Working around the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
201 way Internet Explorer treated the end-form tag as a break tag and inserted
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
202 extra vertical whitespace that didn't show up in Netscape or Konqueror
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
203 was also fun, although it _didn't_ do this if your start form tag and end
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
204 form tags were at different table levels. Yes, to make it display right
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
205 I had to make tags cross, so IE didn't think it understood the data and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
206 thus get confused and do the wrong thing. I'm not proud of this, but it
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
207 was IE.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
208
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
209 <p>I learned how to configure and administer (and automate the administration
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
210 of) apache, samba, postfix, ssh, bind, dhcpd... I created
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
211 <a href=http://dvpn.sf.net>a scalable vpn</a> (which freeswan _wasn't_, nor
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
212 was the out-of-tree patch of the day remotely reliable) by combining iptables
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
213 port forwarding with ssh and a wrapper daemon. (Again the founders
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
214 tried to patent this; I objected strenuously that it was A)
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
215 obvious, B) they'd said I could GPL it when it shipped. This went on for a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
216 while).</p>
70
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
217
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
218 <p>I also made an automated production process for WebOffice: my scripts built
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
219 a CD-rom image which, when booted (with the case off there was a spare IDE
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
220 port you could hook a cd-rom drive to), would partition and format /dev/hda
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
221 and install the final OS image on it, eject the CD, play "charge" through the PC
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
222 speaker, and power down the machine. (If something went wrong, it played
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
223 "taps" instead.) Yes, these CDs were dangerous things to leave lying around,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
224 and I made sure to label 'em as such.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
225
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
226 <p>WebOffice wanted to be able to remotely upgrade the firmware, which meant
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
227 sending a new OS image as a single file. The install had to be fairly atomic,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
228 if something went wrong during the upgrade (including a power failure,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
229 including the user switching it off because it was taking too long) the thing
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
230 could easily become a brick. Obviously a traditional "extract tarball into
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
231 partition" approach was unacceptable, even before "fsck" issues came up.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
232 (The only journaling filesystem in the stock kernel at the time was reiserfs,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
233 and that was way too fiddly and overcomplicated for me to trust my data to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
234 it. I moved the data partition to ext3 when that got merged, but wanted to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
235 make the base OS partition read-only for security reasons.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
236
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
237 <p>I wound up creating a gpg-signed tarball with several files, one of which
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
238 was the new kernel to boot, one of which was the initrd (remember: this was
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
239 back before initramfs), and one of which was a filesystem image to read-only
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
240 loopback mount as the new root filesystem. (For security reasons I wanted
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
241 root mounted read only, which also suggested a compressed filesystem to save
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
242 space. Squashfs didn't exist yet and the ext2 compression patches had already
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
243 bit-rotted, so I used zisofs.) The tarball also contained a file with a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
244 version string, and a file with an sha1sum of the concatenation of the other
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
245 four files.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
246
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
247 <p>Extracting a firmware tarball wrote these files into a new subdirectory
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
248 (The tar invocation extracted those specific names, so an attacker couldn't
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
249 write to arbitrary locations in the filesystem with a carefully crafted tarball;
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
250 yes I was paranoid while learning about security), and made use of the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
251 "lilo -R" option to switch to the new firmware. That sets the LILO command
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
252 line for the next boot only, so we left the default pointing to the old
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
253 firmware but told LILO that on the next boot it should use the new firmware.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
254 If the new firmware came up and its self-diagnostic checked out, it would
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
255 change the LILO default. If it didn't work, power cycle the box and the old
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
256 firmware would come up. (This greatly reduced the chances of turning the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
257 headless box into a brick, and you couldn't do that with grub.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
258
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
259 <p>At a technical level, there was a chicken and egg problem here: the root
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
260 filesystem was a loopback mount, but the file to loopback mount has to live
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
261 somewhere. So the system needed a writeable parition for logging and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
262 such anyway, so I made /dev/hda1 be ext3 and mounted it on /var, and put the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
263 firmware in that. So during the boot process the initrd needed to mount
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
264 /dev/hda1 onto a /temp directory, loopback mount the /temp/image file onto a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
265 /sub directory, and before doing the pivot_root into /sub it needed to move
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
266 the /temp mount into /sub/var. This turned out to be nontrivial.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
267
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
268 <p>Back under the 2.2 kernel you couldn't mount a partition in two places at
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
269 once, so mounting the same /dev/hda1 on both /tmp and /sub/var wasn't an
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
270 option. I had to use early (and buggy) 2.4 kernels to have any chance to make
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
271 this work (and also to make the VPN work, which required the undocumented
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
272 SO_ORIGINAL_DST getsockopt() existing in 2.4 but not 2.2).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
273
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
274 <p>The early 2.4 kernels sucked mightily. The memory management problems that
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
275 resulted in the rik->andrea switch in 2.4.10 hit the yellowbox project kind of
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
276 hard. I once drove the 2.4.7 kernel into a swap thrashing state, went to lunch
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
277 (instead of rebooting, just to see if it would recover), and it was still swap
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
278 thrashing and mostly paralyzed when I came back over an hour later. The disk
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
279 cache (especially the dentry cache) could get unbalanced until it grew to evict
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
280 all the anonymous pages and froze the system hard. (A big rsync would do that
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
281 fairly reliably. Trying to avoid this I studied the md4 algorithm and the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
282 rsync description file and spent a week writing most of my own rsync
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
283 implementation in python, but A) it maxed out at about 300k/second on the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
284 processor we were using, B) it also caused the hang because it was really
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
285 a kernel issue and not an application issue.) It was frustrating, but
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
286 we persevered.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
287
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
288 <p>Mounting a partition twice and leaking one of the mount points (the old
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
289 /temp was inaccessable after the pivot_root) was kind of unclean anyway, the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
290 clean thing for the boot to do was actually move the /tmp mount to /sub/var
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
291 after mounting /sub but before the pivot_root into /sub. But when I asked
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
292 on linux-kernel how to do that, I was told that "mount --move" didn't exist
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
293 yet. A couple releases later Al Viro added it, and I was one of the first
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
294 happy users.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
295
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
296 <p>I also wanted to put the kernel, initrd, and loopback mountable root
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
297 filesystem image together into a single file, so we didn't have to extract a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
298 tarball during a firmware upgrade but could actually _boot_ into the actual
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
299 file we'd downloaded, after verifying its signature. (This avoided the problem
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
300 of successfully downloading the tarball but not having enough space left to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
301 extract it. Since zisofs, zImage, and initrd were already gzipped, compressing
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
302 the firmware image for transport wasn't a priority. Keep in mind: headless box,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
303 self-administering. Even little things like this could turn into a big
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
304 problem in the field if you didn't handle them.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
305
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
306 <p>You could already use "losetup -o" to loopback mount a file at an
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
307 offset, and I made a "length" patch to LILO that let its config file tell it
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
308 to boot only the _start_ of the kernel file you fed it. But dealing with
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
309 the initrd in between was a pain, which is why I eventually became an early
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
310 avid follower of initramfs, and wound up writing documentation for it when I
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
311 couldn't find any and had to answer so many questions myself.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
312
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
313 <h2>The end at WebOffice</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
314
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
315 <p>The original promise that I could GPL the code I was working on (everything
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
316 except the python CGI) once it shipped never came true. Partly the founders
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
317 were ambivalent about this whole "open source" thing, wanting every competitive
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
318 advantage they could get. (They kept trying to patent obvious things I did.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
319 Their patent lawyer was a realy cool dude when he flew in from California.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
320
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
321 <p>Another contributing factor was that the founders were from Taiwan and had
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
322 no idea how to address the US market. Their marketer employee #3 hadn't
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
323 stayed very long (not much endorsement value for a tennis player trying
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
324 to sell servers), and they themselves only ever tried to sell the device
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
325 overseas (which made demonstrating the thing somewhat difficult, and this also
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
326 meant they were shipping a VPN with cryptographic checks on firmware upgrades
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
327 to places like Turkey, back in the days of cryptographic export
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
328 regulations).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
329
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
330 <p>But the biggest problem was unending feature creep: every time the founders
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
331 saw or heard of a product that did something, we had to do that too. I had
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
332 a shippable product ready a few months after I started, but they wouldn't
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
333 ship it. I designed the firmware upgrade mechanism so we could ship what we
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
334 had and add more later, but they felt that doing so would take focus away
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
335 from developing more features. (For about a while there they were trying to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
336 turn it into a video server. I made a python CGI
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
337 script for apache to cache large files, by downloading them from an upstream
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
338 server and sending them out as they came in as if it had been a local file all
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
339 along, while simultaneously writing them to the hard drive for other users.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
340 Of course, they tried to patent this too...)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
341
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
342 <p>The tendency towards feature creep left them vulnerable to their venture
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
343 capitalist changing their business model. Another of the VC's start-ups was
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
344 paying lots of money to license the RealVideo streaming server, so the VC
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
345 convinced WebOffice to waste six months trying to reverse engineer it.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
346 (After all, our idea of offering mp4 files though Samba or Apache made us a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
347 video server, right? This was just another kind of video server...) I wasn't
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
348 interested in this direction and left Austin for a while to spend time with
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
349 my mother (who was suffering from cancer and New Jersey) while they got this
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
350 out of their system. They hired over a half-dozen programmers to replace me
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
351 during this period, but progress on the yellow box ground to a halt anyway
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
352 (and even went backwards a bit with numerous regressions) until I came back.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
353 The quality of the new hires varied ("erratic", "mediocre", and "suck" were
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
354 all represented).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
355
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
356 <p>WebOffice ballooned to a dozen employees (over half of whom reported to me
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
357 when I came back, although I still had little say in hire/fire decisions).
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
358 The company bought itself back from the first VC by mortgaging itself to a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
359 second VC, and refocused on the original do-everything "swiss army server"
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
360 idea. But they still wouldn't just ship what they had as long as there were
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
361 more features we could add, and ultimately they burned through their venture
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
362 capital without ever sending more than a few prototypes to actual
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
363 customers.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
364
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
365 <p>WebOffice ran out of money in 2002, and instituted a round of layoffs.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
366 I continued on half-time (at half-pay) for several more months, hoping that
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
367 necessity would make them focus on shipping units and bringing in revenue, but
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
368 it didn't happen. I left in November and spent the last couple months of that
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
369 year in Florida watching my mother die of cancer, then driving around the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
370 country distributing her posessions to various relatives, and finally crashing
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
371 on Eric Raymond's couch for a few months doing an "editing pass" on The Art of
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
372 Unix Programming that expanded the book from 9 chapters to 20.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
373
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
374 <h1>FWL v1: Relaunch based on BusyBox and uClibc, and why it's called
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
375 Firmware Linux</h1>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
376
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
377 <p>When I returned to Austin in August 2003, I bought a condo near the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
378 University of Texas (and near Metro, my favorite 24 hour coffee shop with
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
379 wireless internet access), enrolled in grad school, and <a href=http://landley.livejournal.com/766.html>got back into poking at Linux From Scratch</a>.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
380
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
381 <p>Linux From Scratch had reorganized itself. My old weboffice scripts had
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
382 been based on LFS 3, which involved building enough of a system to chroot
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
383 into and complete the build under that. The potential downside was that
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
384 bits of the host system could leak into the final target system, such as
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
385 copied headers or tools build by the host's compiler.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
386
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
387 <p>In 2002 LFS 4 introduced an intermediate set of statically linked tools
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
388 in a "static" directory, which were deleted after the intermediate system
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
389 was built. In November 2003 LFS 5 renamed this temporary directory to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
390 "tools". This new approach added the temporary directory to the end of
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
391 the $PATH during the chroot, rebuilt itself using the temporary system,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
392 and then discarded the entire directory to eliminate leaks of host files.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
393 This was a big enough change that it was less work to start over
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
394 from scratch than try to adapt my existing scripts.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
395
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
396 <p>Starting over also seemed like a good idea because I was unsure of the IP
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
397 status of my old scripts. Although I'd been promised repeatedly I could GPL
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
398 everything but the python CGI when the yellowbox shipped, actual shipping had
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
399 never quite happened, and I didn't have that promise in writing. (I don't
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
400 remember if I lost it or if I'd been without a contract all along. You could
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
401 make an argument I owned all the code I'd done outright in the second case,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
402 certainly that's what the copyright notices on the individual files said, and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
403 I'd been working on early versions of those scripts before I brought them to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
404 weboffice in the first place and had never signed over those preexisting
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
405 copyrights. But I just didn't want to go there.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
406
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
407 <h2>New Goals</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
408
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
409 <p>I also wanted to take the project in new directions, further into the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
410 embedded space. WebOffice had focused on adding more and more features to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
411 a bigger and bigger image, while I personally had focused on trimming it
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
412 down and streamlining it (for example replacing the Postgresql database with
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
413 a few flat text files to store configuration and user information, thus
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
414 replacing 200 megabytes of disk usage with about 90k and speeding up the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
415 relevant code considerably).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
416
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
417 <p>For the new project I had two main goals: make the bootable single file
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
418 idea work, and make the result much smaller and simpler. (I also wanted to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
419 clean up the build so it didn't require root access, package and document
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
420 it all so anyone could use it, other similar tidying steps.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
421
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
422 <p>The firmware tarball I'd implemented for WebOffice had always been a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
423 stopgap, something they could ship with quickly while I got a better solution
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
424 ready. What I really wanted was a single bootable file containing kernel,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
425 initial ram disk, and root filesystem all in one. (Putting an entire
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
426 large root filesystem into a ramdisk consumed too much memory, the root
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
427 filesystem needed a backing store it could page files in from.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
428
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
429 <p>The name Firmware Linux came from the goal of packaging an entire OS image
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
430 in a single bootable file, which could run directly and be used to atomically
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
431 upgrade embedded systems.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
432
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
433 <p>My other goal for Firmware Linux started with the desire to replace as much
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
434 of the gnu tools as possible with something smaller and simpler. The old
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
435 yellowbox images from WebOffice had weighed in at almost 100 megabytes, most
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
436 of which was glibc, coreutils, diffutils, and so on. This was clearly
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
437 crazy, my first hard drive back in 1990 was only 120 megabytes, and back under
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
438 DOS that was enormous (and a huge step up from my friend Chip's system with a 32
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
439 megabyte hard drive, which I learned to program C on). When I looked at the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
440 gnu implementation of the "cat" command and found out its source file was 833
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
441 lines of C code (just to implement _cat_), I decided the FSF sucked at this
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
442 whole "software" thing. (Ok, I discovered that reading the gcc source
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
443 at Rutgers back in 1993, but at the time I thought only GCC was a horrible
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
444 bloated mass of conflicting #ifdefs, not everything the FSF had ever touched.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
445 Back then I didn't know that the "Cathedral" in the original Cathedral and the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
446 Bazaar paper was specifically referring to the GNU project.)</p>
70
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
447
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
448 <p>Searching for alternatives, I went back to take a closer look at busybox and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
449 uClibc. I was familiar with both from Tom's Root Boot (tomsrtbt), a popular
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
450 single floppy Linux system that packed an amazing amount of functionality into
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
451 a single specially formatted (1.7 megabyte) 3.5" floppy disk. I'd been using
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
452 tomsrtbt for years, I just hadn't tried to build anything like it myself.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
453 Compared to the tens of megabytes of gnu bloat the LFS project produced,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
454 busybox and uClibc seemed worth a look.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
455
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
456 <p><a href=http://uclibc.org/lists/uclibc/2002-September/004380.html>This
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
457 old message</a> was my first attempt at sniffing around at uClibc. I
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
458 didn't get time to seriously play with it (or BusyBox) until much later.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
459
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
460 <p>It also occurred to me that if the newly introduced /tools directory was
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
461 enough to build the final system, then all I needed for the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
462 system to be self-hosting was enough extra packages to rebuild /tools.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
463 If the prehistory stage had been about starting from a full distro and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
464 cutting it down, and the WebOffice version had been about starting from
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
465 ground zero and piling up lots of functionality into a 100 megabyte tarball,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
466 this new stage was about starting from an empty directory and adding as little
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
467 as possible to do what I wanted while staying small and simple.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
468
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
469 <p>So the real questions were:</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
470
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
471 <ul>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
472 <li><p>How small could I get /tools and still build the rest of LFS under it?</p></li>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
473 <li><p>What was the minimum functionality /tools needed in order to rebuild
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
474 itself from source _without_ first building a larger system?</p></li>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
475 </ul>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
476
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
477 <h2>Implementation</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
478
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
479 <p>I started by writing new scripts based on Linux From Scratch 4 (quickly
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
480 switching to LFS 5) to build a stock LFS system. I wrote a script to build
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
481 /tools, and another script run under a chroot to build a final LFS system
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
482 within tools. The second script acted as a test that the /tools created by
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
483 the first script was good enough. And once I had a known working system,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
484 I started doing a number of different things to it.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
485
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
486 <h2>Stripping down LFS 5.0</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
487
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
488 <p>The full list of Linux From Scratch 5.0 packages were: autoconf, automake,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
489 bash, binutils, bison, bzip2, coreutils, dejagnu, diffutils, e2fsprogs,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
490 ed, expect, file, findutils, flex, gawk, several fragments of gcc,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
491 gettext, glibc, grep, groff, grub, gzip, inetutils, kbd, less,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
492 libtool, the linux kernel, m4, make, MAKEDEV, man, man-pages, modutils,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
493 ncurses, net-tools, patch, perl, procinfo, procps, psmisc, sed, shadow,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
494 sysklogd, sysvinit, tar, tcl, texinfo, util-linux, vim, and zlib. There
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
495 were also two LFS-specific packages, providing boot scripts, config
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
496 files, and miscelaneous utilities.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
497
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
498 <p>I started by removing packages I didn't actually need. Tcl, expect, and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
499 dejagnu hadn't been in LFS 4, so obviously it was possible to do without them.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
500 (I was already starting to view newer versions of Linux From Scratch as
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
501 "bloated" compared to old versions. I could always build and run test
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
502 suites later, and rebuilding the system under itself to produce a working
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
503 result was already a fairly extensive test.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
504
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
505 <p>I could also eliminate ed (which patch can use for obsolete patch
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
506 formats, but who cares?), gettext (only needed for internationalization, which
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
507 is best done at the X11 level and not at the command line), libtool (which is
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
508 a NOP on ELF Linux systems and always has been, blame the FSF for trying to get
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
509 us to use it at all), and man (and man-pages, groff, and texinfo, which are
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
510 used to build/display documentation).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
511
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
512 <p>A bunch of development tools (autoconf, automake, binutils, bison, flex,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
513 gcc, make, and m4) wouldn't be needed on a stripped down system (such as a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
514 router) that never needed to compile anything. (Perl might be in this group as
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
515 well, since it was only included because glibc needed it to build. The linux
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
516 kernel and glibc both supplied files used by the compiler, such as
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
517 the headers in /usr/include, so this group depended on them even if they
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
518 had other more direct uses.) Similarly, the e2fsprogs package was used to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
519 create a filesystem, but mkisofs and such could substitute for it.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
520
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
521 <p>The kernel and grub were basic infrastructure, not really part of the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
522 root filesystem and easy to build separately. (I was still using my modified
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
523 LILO anyway.) The C library (glibc) was the next layer past that, every
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
524 userspace program had to link against it either statically or dynamically.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
525 The boot scripts, MAKEDEV, sysvinit, and modutils were all similarly low-level
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
526 infrastructure pieces to boot the system or talk to hardware. The shadow
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
527 package provided login and /etc/passwd support. The ncurses and zlib packages
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
528 were shared libraries I understood, but were both largely optional
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
529 (and gzip/zlib seemed somehow redundant). Bash was a command shell,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
530 bzip2 and gzip were compression programs, tar an archiver, vim a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
531 text editor, and sysklogd a logging daemon that wrote stuff to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
532 /var/messages.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
533
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
534 <p>That left coreutils, diffutils, file, findutils, gawk,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
535 grep, inetutils, kbd, less, net-tools, patch, procinfo, procps,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
536 psmisc, sed, and util-linux as "other stuff in the $PATH" which were only
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
537 really needed if some application (such as a package build) used them.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
538 After enough study, I felt comfortable I understood what they all did.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
539
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
540 <p>That's what chapter 6, which built the final Linux From Scratch system,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
541 contained. Chapter 5 had a much shorter list: binutils, gcc, linux (used just
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
542 for headers), glibc, tcl, expect, dejagnu, gawk, coreutils, bzip2, gzip,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
543 diffutils, findutils, make, grep, sed, gettext, ncurses, patch, tar, texinfo,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
544 bash, util-linux, and perl. And chapter 5 _had_ to contain enough to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
545 build chapter 6, and thus rebuild the entire system from source.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
546
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
547 <p>Again, tcl, expect, dejagnu, gettext, and texinfo could be discarded.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
548 (Most of those weren't even present in the earlier versions of Linux From
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
549 Scratch I'd used, they had to be optional.) That left just 19 packages.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
550 The compiler toolchain was just binutils, gcc, make, glibc, and the Linux
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
551 headers (all that autoconf, automake,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
552 lex, and bison stuff was obviously optional and could be added later from
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
553 within a working system). Perl was only used to build glibc, if that was
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
554 replaced or fixed then the need for perl (at least at this stage) could go
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
555 away. Busybox claimed to provide replacements for gawk, coreutils, bzip2,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
556 gzip, findutils, grep, sed, tar, bash, and util-linux. Since busybox didn't
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
557 use ncurses, it should be possible to build that at the start of chapter 6.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
558 And what was diffutils doing here at all? It turns out that the perl
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
559 configure stage uses "cmp" (which it provides), so if you didn't need
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
560 perl you didn't need this.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
561
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
562 <p>Since Linux From Scratch's "chapter 6" started by rebuilding binutils and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
563 gcc (which were the big, complicated, tough packages), those obviously didn't
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
564 need any more than was in chapter 5 to rebuild themselves.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
565
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
566 <p>All this analysis reduced Linux From Scratch's chapter 5 to four
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
567 functional groups:</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
568
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
569 <ul>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
570 <li><p>Compiler - binutils, gcc, make, and the linux headers copied into /usr/include/linux.</p></li>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
571 <li><p>C library - glibc or similar</p></li>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
572 <li><p>Lots of posix command line utilities - everything else</p></li>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
573 <li><p>Bootloader and kernel - Linux, Lilo, etc (not necessarily part of the root filesystem at all).</p></li>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
574 </ul>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
575
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
576 <h2>Replacing packages with BusyBox and uClibc</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
577
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
578 <p>Once I ran out of obvious packages to remove, I experimented with package
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
579 substitutions, swapping out the stock Linux From Scratch packages for other
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
580 (smaller) implementations of the same functionality. The two obvious goals
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
581 (again, pursued in parallel) were to swap glibc for uClibc, and to use busybox
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
582 in place of as many other commands it could replace.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
583
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
584 <p>In theory, a self-hosting LFS chapter 5 root filesystem that could rebuild
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
585 itself directly from source could be reduced to binutils, gcc, make, uClibc,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
586 linux-headers, and an _extensively_ upgraded busybox. (Of course such a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
587 modified chapter 5 should still be able to build the unmodified chapter 6.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
588 If it couldn't, there was something wrong with it, so that was a good test.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
589
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
590 <p>Both BusyBox and uClibc were maintained by a guy named Erik Andersen, who
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
591 had started them while working for a company called Lineo and continued them
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
592 after he left (a little like the way I was continuing Firmware Linux).
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
593 In both cases he'd found a long-stalled existing project to salvage and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
594 relaunch instead of starting from scratch, but in reality he'd taken dead
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
595 projects, replaced all their existing code, and built a community around
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
596 them.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
597
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
598 <h2>BusyBox</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
599
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
600 <p>Busybox was nice because I could introduce it piecemeal. I could replace
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
601 commands one at a time, swap an existing /tools/bin binary with its
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
602 busybox equivalent and run the build to see if it worked. If it didn't, I
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
603 could compare the two versions of the build against each other to see what
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
604 had changed, or try to replace a different (simpler) command.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
605
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
606 <p>The Linux From Scratch installation instructions also listed the files
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
607 installed by each package, so I could look through the lists (
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
608 <a href=http://archive.linuxfromscratch.org/lfs-museum/5.0/LFS-BOOK-5.0-HTML/chapter06/sed.html>sed</a> had just one,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
609 <a href=http://archive.linuxfromscratch.org/lfs-museum/5.0/LFS-BOOK-5.0-HTML/chapter06/gzip.html>gzip</a>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
610 installed a little over a dozen,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
611 http://archive.linuxfromscratch.org/lfs-museum/5.0/LFS-BOOK-5.0-HTML/chapter06/util-linux.html>util-linux</a> installed over 60) to see what
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
612 was actually needed ("sed" yes, "cal" not so much) and what busybox did
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
613 and didn't provide already and what would need to be added or upgraded.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
614
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
615 <p>I focused on eliminating packages, which meant I started by tackling
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
616 fairly complicated commands like "bunzip" and "sed", because getting those
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
617 to work would let me drop an entire package. I quickly sent in so many
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
618 bugfixes to sed I wound up maintaining the applet, and got distracted
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
619 rewriting bunzip entirely (but my new implementation compiled to only 7k).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
620
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
621 <p>Eventually, I wound up getting busybox to replace bzip2, coreutils,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
622 e2fsprogs, file, findutils, gawk, grep, inetutils, less, modutils, net-tools,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
623 patch, procps, sed, shadow, sysklogd, sysvinit, tar, util-linux, and vim.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
624
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
625 <p>To do that, I wound up extensively upggrading (or rewriting from scratch)
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
626 dozens of different busybox commands and adding several new ones from
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
627 scratch.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
628
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
629 <p>One new command was switch_root, for initramfs support. I wrote an
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
630 initramfs file for the kernel's Documentation directory because I investigated
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
631 it for FWL. (And later gave my first OLS presenation on the topic,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
632 and write an article series about it when I worked at TimeSys.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
633
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
634 <p>Another new command was mdev, which was a rewrite of
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
635 <a href=http://lkml.indiana.edu/hypermail/linux/kernel/0510.3/1732.html>a shell
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
636 script</a> I used to populate /dev, which Frank Sorenson
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
637 <a href=http://lists.busybox.net/pipermail/busybox/2005-December/051458.html>ported to C</a> and I extended (adding a config file based on irc conversations
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
638 with Gentoo's Solar).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
639
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
640 <h2>uClibc</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
641
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
642 <p>Replacing glibc with uClibc took some doing, but at the time the uClibc
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
643 project was quite heavily developed and rapidly improving (coming out with 8
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
644 releases in 2002 and 8 more in 2003) so there was always something new to try.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
645 If something didn't work, they were happy to fix it.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
646
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
647 <p>uClibc version 0.9.26 (January 2004) was the breakthrough version that went
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
648 from "here are the packages known to work, anything else probably won't" to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
649 "any package you try to build against this will most likely work, please
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
650 let us know about anything that doesn't". When uClibc did finally work, it
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
651 allowed me to remove perl from /tools (which was only need to build glibc,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
652 but not required by anything else in LFS).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
653
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
654 <p>I also experimented with dynamically linking /tools, as another way to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
655 get the size down. Linux From Scratch statically linked chapter 5 for
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
656 simplicity sake, I tried to get the existing compiler to link against
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
657 the C library I just built. This was quite a learning experience. Everything
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
658 from changing the library loader path to making sure gcc could find crt0.o
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
659 at a nonstandard location was all new, and fiddly, and cryptic, and didn't
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
660 work. And thus began the long war between me and gcc's path logic. (Since I
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
661 had static linking to fall back on, I could poke at this in parallel with
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
662 my other work on the project, and didn't get it to actually _work_ for quite
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
663 some time.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
664
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
665 <p>At the time, programs were normally built against uClibc by using a wrapper
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
666 around gcc that rewrote its command line arguments to link against a different
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
667 C library. Of course I
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
668 <a href=http://www.uclibc.org/lists/uclibc/2003-August/006795.html>took the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
669 wrapper apart</a> to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
670 <a href=http://lists.uclibc.org/pipermail/uclibc/2003-September/027714.html>see
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
671 how it worked</a> and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
672 <a href=http://www.uclibc.org/lists/uclibc/2003-September/006875.html>how to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
673 make gcc link against uClibc without it</a>. What I wanted was a compiler that naturally linked
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
674 against uClibc, not an existing glibc compiler repurposed to do so.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
675
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
676 <p>Based on what the wrapper was doing and a lot of tweaking and questions
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
677 on the mailing list (which Erik graciously answered),
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
678 <a href=http://lists.uclibc.org/pipermail/uclibc/2003-August/027643.html>I
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
679 got it working</a> around the middle of 2003.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
680
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
681 <h2>User Mode Linux</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
682
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
683 <p>The Linux From Scratch build assumed you had root access, in order to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
684 mknod devices, chroot into the temporary system (chapter 5) directory to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
685 build the final system (the chapter 6 packages), and to loopback mount files
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
686 to create system images.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
687
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
688 <p>Asking people to download random code and run it as root seemed kind
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
689 of impolite at best, and since the end result was just a file (a tarball
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
690 or a filesystem image), there was no real excuse for requiring root access.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
691 The packages built as a normal user already, in theory that was the hard
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
692 part.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
693
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
694 <p>My solution was User Mode Linux. (Of course I wrote a quick
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
695 <a href=http://landley.net/writing/docs/UML.html>User Mode Linux HOWTO</a>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
696 containing everything I needed to know to do what I was doing with it.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
697
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
698 <p>User Mode Linux was essentially an emulator, which could give me simulated
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
699 root access (enough for my needs), but without extensive setup thanks to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
700 the "hostfs", and without requiring a new source package (I already had
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
701 the Linux kernel sources, this was just another way of building them).
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
702 I first got it working in the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
703 <a href=http://landley.livejournal.com/10201.html>first got it working in
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
704 a patched 2.6.9 kernel</a>, and later integrated it into the build when I got
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
705 <a href=http://landley.livejournal.com/2005/01/21/>unpatched 2.6.11</a>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
706 to build a usable User Mode Linux image (although I had to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
707 <a href=http://landley.livejournal.com/12578.html>patch it a bit</a> myself
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
708 later). I could then use that to chroot (via UML's "hostfs") and loopback
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
709 mount as a normal user, and then mknod within that loopback
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
710 mount, and run the chapter 5 environment within UML to build chapter 6.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
711 Of course I wrote a quick <a href=http://landley.net/writing/docs/UML.html>User
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
712 Mode Linux HOWTO</a>.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
713
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
714 <p>Using UML was optional, and the scripts autodetected if you were running
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
715 as root and would chroot directly instead of firing up what amounted to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
716 an emulator, but
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
717
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
718 <h1>Why 2006 was a lost year</h1>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
719
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
720 <h2>The rise of buildroot</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
721
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
722 <p>Shortly after I figured out how the uClibc wrapper (and gcc in general)
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
723 worked under the covers, the uClibc developers abandoned the wrapper in favor
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
724 of a new project called "buildroot".</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
725
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
726 I also took buildroot apart to see how
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
727 it worked, and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
728 <a href=http://www.uclibc.org/lists/uclibc/2003-August/006674.html>wrote the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
729 first buildroot HOWTO</a> (because I tend to document everything I didn't
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
730 initially understand), made a number of
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
731 <a href=http://lists.uclibc.org/pipermail/uclibc/2003-August/027542.html>design
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
732 suggestions</a>,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
733 and even <a href=http://lists.uclibc.org/pipermail/uclibc/2003-August/027559.html>oftered patches</a>.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
734
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
735 <p>But I didn't really like the design of buildroot
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
736 (nested makefiles aren't the most straightforward approach to anything,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
737 its need to run as root meant that early versions
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
738 <a href=http://lists.uclibc.org/pipermail/uclibc/2003-August/027558.html>ate my
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
739 laptop</a>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
740 (<a href=http://lists.uclibc.org/pipermail/uclibc/2003-November/028413.html>twice</a>),
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
741 and it <a href=http://lists.uclibc.org/pipermail/uclibc/2003-November/028389.html>couldn't rebuild itself under itself</a>,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
742 and in general was a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
743 <a href=http://lists.uclibc.org/pipermail/uclibc/2003-December/028610.html>constantly broken</a>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
744 moving target with no stable releases.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
745
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
746 <p>The buildroot project was the response to fresh gcc bloat: around
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
747 gcc 3.0 a new shared library called libgcc_s.so showed up, more or less
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
748 a dynamic version of the old libgcc.a. It contained various gcc internal
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
749 functions (such as 64 bit division on 32 bit platforms), which most nontrivial
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
750 programs wound up linking against. Unfortunately, shared libraries can link
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
751 against other shared libraries, and libgcc_s.so linked against libc.so.6.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
752 So any program that linked against this library snuck in a reference to glibc
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
753 and wouldn't load without it, even if it was otherwise linked against
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
754 uClibc.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
755
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
756 <p>This meant the gcc wraper was no longer sufficient, but since libgcc_s.so was
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
757 part of gcc, the only way to get a new version of libgcc_s.so that linked
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
758 against uClibc (instead of glibc) was to download the gcc source code and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
759 build gcc itself against uClibc.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
760
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
761 <p>And that's exactly what buildroot did: built uClibc and a new compiler
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
762 out of the four source packages uClibc, binutils, gcc, and the linux
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
763 kernel for the kernel headers, hooking the whole mess together with
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
764 several ./configure options and source patches. Then it used the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
765 new uClibc compiler to build Erik's other project, BusyBox, as a test case
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
766 that it was all working correctly.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
767
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
768 <p>In order to test both static and dynamic linking, buildroot created
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
769 a new uClibc root filesystem directory containing the uClibc shared libraries,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
770 and a second instance of busybox dynamically linked against those,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
771 which you could chroot and test out the uClibc version of busybox.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
772 Since he already had the kernel source lying aorund, Eric even taught it to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
773 build a User Mode Linux binary that could do the chroot for you.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
774
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
775 <h2>Problems with buildroot</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
776
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
777 <p>Right at the start I took buildroot apart to see how it worked, and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
778 <a href=http://www.uclibc.org/lists/uclibc/2003-August/006674.html>wrote the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
779 first buildroot HOWTO</a> (because I tend to document everything I didn't
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
780 initially understand), made a number of
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
781 <a href=http://lists.uclibc.org/pipermail/uclibc/2003-August/027542.html>design
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
782 suggestions</a>,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
783 and even <a href=http://lists.uclibc.org/pipermail/uclibc/2003-August/027559.html>oftered patches</a>.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
784
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
785 <p>But I didn't really like the design of buildroot
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
786 (nested makefiles aren't the most straightforward approach to anything,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
787 its need to run as root meant that early versions
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
788 <a href=http://lists.uclibc.org/pipermail/uclibc/2003-August/027558.html>ate my
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
789 laptop</a>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
790 (<a href=http://lists.uclibc.org/pipermail/uclibc/2003-November/028413.html>twice</a>),
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
791 and it <a href=http://lists.uclibc.org/pipermail/uclibc/2003-November/028389.html>couldn't rebuild itself under itself</a>,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
792 and in general was a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
793 <a href=http://lists.uclibc.org/pipermail/uclibc/2003-December/028610.html>constantly broken</a>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
794 moving target with no stable releases.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
795
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
796 <p>So I continued to work on my existing build project instead (which was
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
797 several years old by that point). Buildroot was an instructive counterexample
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
798 on many fronts: my project should not require root access to build,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
799 shell scripts were more readable than nested makefiles, releases were
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
800 important, and it's vital to have boundaries so youc an clearly state
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
801 what your project DOESN'T do.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
802
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
803 <p>I also checked in with buildroot from time to time to see what it was doing
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
804 (several patches to make various packages work with uClibc were only ever
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
805 documented by being checked into the buildroot repository, and then the uClibc
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
806 developers acted shocked I hadn't heard of them).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
807
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
808 <p>The biggest problem with buildroot was the impact it had on BusyBox and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
809 uClibc development. Although buildroot started out as just a test harness for
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
810 uClibc and busybox, it quickly grew out of hand. Since the easy way to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
811 regression test that a package worked against uClibc was to add it to the test
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
812 suite and build it as part of the test root filesystem, lots of packages
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
813 got added fairly quickly. People packaged up and shipped the root filesystem
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
814 created by buildroot when they wanted a simple uClibc+busybox root filesystem,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
815 and then complained when it didn't build some package they needed.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
816
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
817 <p>Within a few months, buildroot had exploded from a simple test harness into
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
818 a half-assed Linux distribution. Erik <a href=http://lists.uclibc.org/pipermail/uclibc/2003-August/027567.html>tried to avoid this</a> (he'd previously
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
819 built a <a href=http://lists.uclibc.org/pipermail/uclibc/2003-November/028364.html>uClibc-native version of Debian Woody</a> and knew perfectly well
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
820 what a real distro looked like), but buildroot
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
821 turned into a distro anyway because the project had no clear boundaries that
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
822 allowed him to say "no, this new feature is not within the project's scope".</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
823
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
824 <p>As a distro, buildroot was a deeply flawed. It had no package management
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
825 tools (such as rpm or deb or portage), nor did it have the tens of thousands of
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
826 packages build descriptions in the large and carefully maintained repository
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
827 of Red Hat, Ubuntu, Gentoo, or even Slackware. For the project's first five
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
828 years, buildroot never even had a release, instead insisting users grab a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
829 random source control snapshot and hope for the best. But a build
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
830 system, it was the focus of the development efforts of the BusyBox and uClibc
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
831 communities, and became their standard repository of knowledge about how
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
832 to build packages for all sorts of embedded environments.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
833
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
834 <h2>The fall of uClibc and BusyBox</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
835
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
836 <p>With no clear dividing line between "how to build" and "what to build",
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
837 buildroot's scope and complexity exploded, and despite its limitations as
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
838 a distro what buildroot could do was suck away an endless amount of
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
839 development time from the BusyBox and uClibc developers. By 2005, both
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
840 uClibc and BusyBox development were clearly suffering.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
841
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
842 <p>Erik started by abandoning busybox after the 1.0 release, both because
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
843 1.0 seemed like a good stopping point (since it was "done" now), and because
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
844 he just didn't have time for it anymore. Other developers (including
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
845 myself) still did new development, found bugs and fixed them, but there
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
846 was no prospect of a new release.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
847
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
848 <p>Over on the uClibc side of things, Erik held on longer but the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
849 release frequency slowed, from seven releases in 2003 (0.9.17 through 0.9.24)
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
850 to two in 2004, one in 2005, and none at all in the whole year 2006.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
851
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
852 <hr>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
853
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
854 <h1>UNFINISHED BELOW HERE</h1>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
855
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
856 <pre>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
857 and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
858 continued to work on the project with bugfixes kept accumulating, and I collected them together until
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
859 I had enough to make a bugfix release which became the official 1.01 when
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
860 Erik approved it. It turns out "he who cuts releases is the maintainer",
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
861
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
862 I stepped in cutting a 1.01 bugfix release and eventually
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
863 becoming the project's official new maintainer (because he who cuts releases is
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
864 maintainer).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
865
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
866 <p>Over on the uClibc side of things, Erik held on longer but the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
867 release frequency slowed, from seven releases in 2003 (0.9.17 through 0.9.24)
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
868 to two in 2004, one in 2005, and none at all in the whole year 2006.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
869
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
870 <p>I didn't have time to take on </p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
871
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
872 --------
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
873
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
874 Buildroot traffic
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
875 <a href=http://lists.uclibc.org/pipermail/uclibc/2003-November/028342.html>slowly</a>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
876 <a href=http://lists.uclibc.org/pipermail/uclibc/2005-October/033720.html>strangled</a> uClibc development discussion on the uClibc list until I gave up
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
877 and <a href=http://lists.uclibc.org/pipermail/uclibc/2006-July/036836.html>created
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
878 a new list</a> and politely kicked the buildroot traffic over there.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
879
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
880
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
881
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
882
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
883 Cake
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
884
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
885 Me suggesting new buildroot list:
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
886 http://lists.uclibc.org/pipermail/uclibc/2003-November/028342.html
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
887
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
888 Instead buildroot set off to reinvent the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
889 wheel, maintaining their repository in
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
890
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
891 Debian's repository contained over 45,000
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
892 packages
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
893
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
894 <h2>BusyBox</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
895
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
896 Mention of FWL relaunch in 2004
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
897 http://landley.livejournal.com/766.html
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
898
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
899 ----------------------------
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
900
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
901 - tcc spawns qemu
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
902 - Busybox maintainership, timesys, relaunch to current version.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
903
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
904 </pre>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
905
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
906 <h3>Busybox maintainership</h3>
70
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
907
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
908 <p>When the Firmware Linux project started, busybox applets like sed and sort
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
909 weren't powerful enough to handle the "./configure; make; make install" of
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
910 packages like binutils or gcc. Busybox was usable in an embedded router or
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
911 rescue floppy, but trying to get real work done with it revealed numerous
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
912 bugs and limitations. (It hung, it segfaulted, produced the wrong output,
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
913 refused to run due to unrecognized command line options... You name it.)</p>
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
914
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
915 <p>So I spent about 3 years improving Busybox (and pestering other people into
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
916 improving their bits), and along the way accidentally become the BusyBox
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
917 maintainer (at least until the project's crazy-uncle founder showed up and
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
918 <a href=http://lwn.net/Articles/202106/>drove me away again</a>). The result
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
919 is that in Firmware Linux, Busybox now functions as an effective replacement
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
920 for bzip2, coreutils, diffutils, e2fsprogs, file, findutils, gawk, grep,
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
921 inetutils, less, modutils, net-tools, patch, procps, sed, shadow, sysklogd,
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
922 sysvinit, tar, util-linux, and vim. I was in the process of writing a new
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
923 shell to replace bash with when I left.</p>
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
924
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
925 <p>Firmware Linux stalled while I was BusyBox maintainer (2005-2006) due to
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
926 lack of time, and since that ended most of my spare programming time has gone
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
927 into launching toybox. But one of the main goals of toybox is to replace
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
928 BusyBox in Firmware Linux, so as toybox matures it'll naturally lead to more
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
929 of my time spent working on FWL.</p>
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
930
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
931 <p>The server behind this website does not currently run on Firmware Linux.
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
932 Making it do so is a TODO item. After that, I'd like to get it to the point
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
933 where I can use it on my laptop. :)</p>
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
934
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
935 <p>A snapshot of the old website is <a href=old>available here</a>.</p>
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
936
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
937
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
938
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
939 <p>I <a href=http://landley.livejournal.com/22566.html>started playing around
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
940 with QEMU in novemeber 2005</a>, about the same time I started keeping
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
941 a more detailed <a href=http://landley.net/notes-2005.html>technical
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
942 blog</a> on my own website, and shortly before I
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
943 <a href=http://landley.livejournal.com/24021.html>went to work for
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
944 TimeSys</a>.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
945
72
478178b9337b SSI #include needs file=
Rob Landley <rob@landley.net>
parents: 70
diff changeset
946 <!--#include file="footer.html" -->