annotate www/history.html @ 1509:c8fac8498b66

Revert debug code accidentally checked in.
author Rob Landley <rob@landley.net>
date Wed, 21 Mar 2012 17:45:39 -0500
parents 09c39f1a9d59
children
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
1050
333c8f799302 Update lots and lots of web pages for the project name change to Aboriginal Linux.
Rob Landley <rob@landley.net>
parents: 881
diff changeset
5 <h1>Where did "Aboriginal Linux" come from? Our story so far...</h1>
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
6
1050
333c8f799302 Update lots and lots of web pages for the project name change to Aboriginal Linux.
Rob Landley <rob@landley.net>
parents: 881
diff changeset
7 <p>My name is Rob Landley, and I've been working on Aboriginal Linux on and off
867
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
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
15 autobiography as technical history of the project. A big blog entry,
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
16 really.) But just for the record:</p>
867
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
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
22 involved removing as many packages as possible from the base install, both to
867
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
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
91 <h1>Version 0: The WebOffice version ("Yellowbox")</h1>
867
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
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
183 <p>WebOffice's original prototype device ran a stock Red Hat 7 install (the one
867
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
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
261 somewhere. So the system needed a writeable partition for logging and
867
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
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
289 /temp was inaccessible after the pivot_root) was kind of unclean anyway, the
867
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.
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
319 Their patent lawyer was a really cool dude when he flew in from California.)</p>
867
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
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
370 country distributing her possessions to various relatives, and finally crashing
867
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
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
374 <h1>Version 1: Relaunch based on BusyBox and uClibc ("Firmware Linux")</h1>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
375
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
376 <p>The code discussed here is <a href=/aboriginal/old>still online</a> (if
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
377 abandoned since 2005).</p>
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
378
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
379 <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
380 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
381 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
382
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
383 <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
384 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
385 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
386 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
387 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
388
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
389 <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
390 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
391 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
392 "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
393 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
394 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
395 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
396 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
397
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
398 <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
399 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
400 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
401 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
402 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
403 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
404 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
405 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
406 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
407 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
408
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
409 <h2>New Goals</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
410
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
411 <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
412 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
413 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
414 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
415 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
416 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
417 relevant code considerably).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
418
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
419 <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
420 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
421 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
422 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
423
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
424 <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
425 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
426 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
427 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
428 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
429 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
430
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
431 <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
432 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
433 upgrade embedded systems.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
434
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
435 <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
436 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
437 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
438 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
439 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
440 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
441 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
442 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
443 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
444 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
445 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
446 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
447 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
448 Bazaar paper was specifically referring to the GNU project.)</p>
70
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
449
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
450 <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
451 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
452 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
453 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
454 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
455 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
456 busybox and uClibc seemed worth a look.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
457
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
458 <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
459 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
460 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
461
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
462 <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
463 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
464 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
465 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
466 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
467 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
468 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
469 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
470
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
471 <p>So the real questions were:</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
472
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
473 <ul>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
474 <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
475 <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
476 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
477 </ul>
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 <h2>Implementation</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
480
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
481 <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
482 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
483 /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
484 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
485 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
486 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
487
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
488 <h2>Stripping down LFS 5.0</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
489
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
490 <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
491 bash, binutils, bison, bzip2, coreutils, dejagnu, diffutils, e2fsprogs,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
492 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
493 gettext, glibc, grep, groff, grub, gzip, inetutils, kbd, less,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
494 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
495 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
496 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
497 were also two LFS-specific packages, providing boot scripts, config
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
498 files, and miscellaneous utilities.</p>
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
499
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
500 <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
501 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
502 (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
503 "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
504 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
505 result was already a fairly extensive test.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
506
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
507 <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
508 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
509 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
510 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
511 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
512 used to build/display documentation).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
513
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
514 <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
515 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
516 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
517 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
518 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
519 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
520 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
521 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
522
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
523 <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
524 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
525 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
526 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
527 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
528 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
529 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
530 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
531 (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
532 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
533 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
534 /var/messages.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
535
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
536 <p>That left coreutils, diffutils, file, findutils, gawk,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
537 grep, inetutils, kbd, less, net-tools, patch, procinfo, procps,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
538 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
539 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
540 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
541
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
542 <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
543 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
544 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
545 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
546 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
547 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
548
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
549 <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
550 (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
551 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
552 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
553 headers (all that autoconf, automake,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
554 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
555 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
556 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
557 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
558 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
559 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
560 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
561 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
562 perl you didn't need this.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
563
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
564 <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
565 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
566 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
567
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
568 <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
569 functional groups:</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
570
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
571 <ul>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
572 <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
573 <li><p>C library - glibc or similar</p></li>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
574 <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
575 <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
576 </ul>
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 <h2>Replacing packages with BusyBox and uClibc</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
579
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
580 <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
581 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
582 (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
583 (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
584 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
585
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
586 <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
587 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
588 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
589 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
590 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
591
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
592 <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
593 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
594 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
595 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
596 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
597 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
598 them.</p>
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 <h2>BusyBox</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
601
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
602 <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
603 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
604 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
605 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
606 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
607
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
608 <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
609 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
610 <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
611 <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
612 installed a little over a dozen,
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
613 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
614 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
615 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
616
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
617 <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
618 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
619 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
620 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
621 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
622
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
623 <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
624 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
625 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
626
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
627 <p>To do that, I wound up extensively upgrading (or rewriting from scratch)
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
628 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
629 scratch.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
630
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
631 <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
632 initramfs file for the kernel's Documentation directory because I investigated
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
633 it for Firmware Linux. (And later gave my first OLS presentation on the topic,
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
634 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
635
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
636 <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
637 <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
638 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
639 <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
640 with Gentoo's Solar).</p>
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 <h2>uClibc</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
643
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
644 <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
645 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
646 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
647 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
648
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
649 <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
650 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
651 "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
652 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
653 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
654 but not required by anything else in LFS).</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
655
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
656 <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
657 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
658 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
659 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
660 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
661 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
662 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
663 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
664 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
665 some time.)</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
666
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
667 <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
668 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
669 C library. Of course I
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
670 <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
671 wrapper apart</a> to
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
672 <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
673 how it worked</a> and
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
674 <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
675 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
676 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
677
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
678 <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
679 on the mailing list (which Erik graciously answered),
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
680 <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
681 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
682
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
683 <h2>User Mode Linux</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
684
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
685 <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
686 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
687 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
688 to create system images.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
689
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
690 <p>Asking people to download random code and run it as root seemed kind
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
691 of impolite at best, and actively dangerous at worst. (When buildroot first
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
692 came out I ran "make uninstall" in it. The resulting host/target confusion
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
693 it suffered deleted things like gzip off my host. Back then I was still using
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
694 a Red Hat system which meant "pam", and when the security theatre modules
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
695 suffered an auto-immune response to my attempts to patch the system back
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
696 together with busybox, I had to reinstall the OS in order to be able to launch
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
697 X11 again.)</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
698
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
699 <p>Since the end result of my system builds was just a file (a tarball
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
700 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
701 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
702 part.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
703
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
704 <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
705 <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
706 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
707
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
708 <p>User Mode Linux was an early virtual machine, which could give me simulated
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
709 root access (enough for my needs), but without extensive setup thanks to
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
710 the "hostfs" (a bit like qemu's virtfs), and without requiring a new source
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
711 package (I already had the Linux kernel sources, this was just another way of
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
712 building them).</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
713
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
714 <p>I <a href=http://landley.livejournal.com/10201.html>first got UML working in
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
715 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
716 <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
717 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
718 <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
719 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
720 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
721 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
722 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
723 Mode Linux HOWTO</a>.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
724
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
725 <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
726 as root and would chroot directly instead of firing up what amounted to
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
727 an emulator, but running as root was not recommended.</p>
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
728
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
729 <h1>Why 2006 was a lost year</h1>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
730
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
731 <h2>The rise of buildroot</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
732
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
733 <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
734 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
735 of a new project called "buildroot".</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
736
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
737 <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
738 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
739 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
740 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
741 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
742 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
743 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
744 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
745 uClibc.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
746
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
747 <p>This meant the gcc wrapper was no longer sufficient, but since libgcc_s.so was
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
748 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
749 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
750 build gcc itself against uClibc.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
751
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
752 <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
753 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
754 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
755 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
756 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
757 that it was all working correctly.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
758
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
759 <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
760 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
761 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
762 which you could chroot and test out the uClibc version of busybox.
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
763 Since he already had the kernel source lying around, Eric even taught it to
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
764 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
765
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
766 <h2>Problems with buildroot</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
767
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
768 <p>Of course I took buildroot apart to see how it worked,
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
769 <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
770 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
771 initially understand), made a number of
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
772 <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
773 suggestions</a>,
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
774 and even <a href=http://lists.uclibc.org/pipermail/uclibc/2003-August/027559.html>offered patches</a>.</p>
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
775
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
776 <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
777 (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
778 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
779 <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
780 laptop</a>
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
781 (<a href=http://lists.uclibc.org/pipermail/uclibc/2003-November/028413.html>twice</a>, contributing strongly to my conviction that builds should never run
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
782 as root),
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
783 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
784 and in general was a
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
785 <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
786 moving target with no stable releases.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
787
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
788 <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
789 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
790 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
791 shell scripts were more readable than nested makefiles, releases were
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
792 important, and it's vital to have boundaries so you can clearly state
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
793 what your project DOESN'T do.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
794
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
795 <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
796 (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
797 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
798 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
799
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
800 <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
801 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
802 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
803 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
804 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
805 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
806 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
807 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
808
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
809 <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
810 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
811 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
812 what a real distro looked like), but buildroot
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
813 turned into a distro anyway because the project had no clear boundaries that
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
814 allowed him to say "no, this new feature is not within the project's scope".
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
815 He never drew a line in the sand that allowed him to say "no", and thus over
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
816 time steady feature creep buried him.</p>
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
817
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
818 <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
819 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
820 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
821 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
822 years, buildroot never even had a release, instead insisting users grab a
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
823 random source control snapshot du jour and hope for the best. Despite this,
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
824 buildroot was the focus of the development efforts of the BusyBox and uClibc
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
825 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
826 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
827
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
828 <h2>Buildroot derails uClibc and BusyBox development</h2>
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
829
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
830 <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
831 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
832 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
833 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
834 uClibc and BusyBox development were clearly suffering.</p>
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>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
837 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
838 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
839 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
840 was no prospect of a new release.</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>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
843 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
844 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
845
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
846 <p>The uClibc 0.9.26 release (in January 2004) was the point at which Erik
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
847 stopped maintaining a supported application list, because most things just
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
848 worked now. That was the point at which uClibc became generally useful,
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
849 and could have been the basis for a 1.0 release similar to BusyBox's.
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
850 But due to buildroot diverting the development community, a uClibc 1.0
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
851 release became a more and more distant possibility as development lost
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
852 focus: by the end of the decade, uClibc still had no clear plan to produce
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
853 a 1.0 release.</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
854
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
855 <h1>BusyBox takes over my life</h1>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
856
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
857 <p>By 2005, Firmware Linux built a system that could rebuild itself, but
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
858 it still used a lot of gnu packages. I continued to replace more of these
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
859 executables with busybox, making BusyBox supply more of my development
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
860 environment and submitting numerous patches, everything from minor bugfixes
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
861 and complete ground-up applet rewrites. I also pestered other people (such as
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
862 the awk maintainer) into repeatedly fixing their parts of the code when some
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
863 package build failed and I narrowed it down to a reproducible test case.</p.
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
864
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
865 <p>At this point, Firmware Linux wasn't held back by my build infrastructure
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
866 (which was just a pile of shell scripts anyway), but by deficiencies in
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
867 BusyBox. I became one of the most active BusyBox developers, using Firmware
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
868 Linux as a test environment for my busybox changes, and gradually began
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
869 spending more time working on BusyBox than the rest of Firmware Linux
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
870 combined.</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
871
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
872 <p>After the BusyBox 1.0 release gave Erik an excuse to step back,
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
873 I continued to work intensely on the project, and the bugfixes I needed
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
874 (and that other developers supplied) kept accumulating. I eventually
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
875 collected enough together to make a bugfix-only release, which became the
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
876 official 1.01 when Erik approved it. And it turns out "he who cuts
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
877 releases is the maintainer". Erik officially handed over maintainership
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
878 a few months later, when I cut my first new development release (busybox
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
879 1.1.0).</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
880
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
881 <h2>Tinycc, QEMU, and TimeSys.</h2>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
882
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
883 <p>I was introduced to Fabrice Bellard's "tinycc" by the October 27, 2004
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
884 slashdot story about <a href=http://bellard.org/tcc/tccboot.html>tccboot</a>,
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
885 an ISO image that booted Linux _from_source_code_, booting into a compiler
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
886 that compiled the linux kernel and a simple userspace in a matter of seconds,
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
887 and then ran the resulting kernel.</p>
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
888
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
889 <p>Afterwards I kept track of tinycc with an eye towards replacing gcc and
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
890 binutils, thus producing a gnu-free development environment. (And then I'd
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
891 ask Richard Stallman if a system without a line of gnu code anywhere in it
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
892 was still Gnu/Linux/Dammit and mock him when he said yes.)</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
893
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
894 <p>Tinycc was a small and simple C compiler, fitting a complete
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
895 combined compiler and linker into a single 100k executable. It compiled code
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
896 so quickly that its most common use was turning C into a scripting language:
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
897 by starting C source files with "#!/usr/bin/tinycc -run" and setting the
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
898 executable bit on the source file, tcc could compile and launch it in a
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
899 small fraction of a second.</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
900
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
901 <p>When I encountered it, tinycc couldn't build an unmodified Linux kernel
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
902 (the tccboot kernel was a hacked up subset of Linux 2.4), but was only the
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
903 third compiler ever (after gcc and Intel's x86-only closed source icc) that
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
904 had ever built a working Linux kernel, and the tinycc developers were working
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
905 towards full C99 compliance and the ability to build Linux 2.6.</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
906
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
907 <p>Alas Tinycc got derailed the same way uClibc did: it spawned a side project
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
908 that sucked its developers away. In this case, the side project was the
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
909 emulator QEMU. Inspired by the speed of tinycc, Fabrice came up with
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
910 another compiler that took pages of foriegn binary code as its input,
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
911 <a href=http://www.usenix.org/publications/library/proceedings/usenix05/tech/freenix/bellard.html>translating them on the fly</a> a page at a time into
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
912 equivalent binary code the current machine
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
913 could run. As he explained in the <a href=http://www.winehq.org/pipermail/wine-devel/2003-March/015577.html>QEMU 0.1 announcement</a>, the purpose was
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
914 to allow Wine to run on non-x86 machines, but QEMU quickly turned into
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
915 a very fast general purpose emulator.</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
916
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
917 <p>Towards the end of 2005 I <a href=http://landley.net/notes-2005.html#27-10-2005>started playing with QEMU</a>,
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
918 as a potential replacement for User Mode Linux. When I <a href=http://landley.livejournal.com/22566.html>got it to work</a>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
919 I decided that Firmware Linux should support every target QEMU did, meaning
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
920 I had to learn cross compiling.</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
921
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
922 <p>When I mentioned this on the #uClibc channel on Freenode, one of the
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
923 regulars asked if I wanted to come work at his company, TimeSys.</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
924
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
925 <h2>My time at TimeSys</h2>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
926
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
927 <p>TimeSys did embedded development, via extensive cross compiling. They
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
928 had a couple dozen extremely talented engineers and masses of accumulated
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
929 expertise. It was such an interesting job and a great group of guys I was
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
930 willing to move to Pittsburgh (with my fiancee). I started there January 15,
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
931 2006.</p>
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
932
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
933 <p>At TimeSys I worked on BusyBox (having become the project's official
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
934 maintainer with the 1.1.0 release). I also poked at uClibc a bit and
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
935 <a href=http://landley.net/pictures/uclibc-cake-2005-1.jpg>encouraged</a>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
936 its <a href=http://landley.net/pictures/uclibc-cake-2005-2.jpg>development</a>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
937 however
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
938 <a href=http://lists.busybox.net/pipermail/uclibc/2006-July/016032.html>I
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
939 could</a>. (There was another cake for the next release, that one made and
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
940 delivered by Howard Tayler of Schlock Mercenary. I asked him on the theory
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
941 that if he's truly mercenary, and lives in the same town as Erik, I just have
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
942 to pay him enough. I note his price has probably gone up since then.)</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
943
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
944 <p>But the reason I took the job was to learn stuff I didn't already know.
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
945 There were a bunch of guys doing cross compiling, and I learned everything
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
946 I could from them. What were the various hardware targets, and what was
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
947 each good for? How do you make a cross compiler, and how do you use it?
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
948 I spent the whole of 2006 learning stuff from a bunch of great guys.
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
949 (I've never worked with a better team of engineers than TimeSys had in
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
950 mid-2006.)</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
951
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
952 <p>Unfortunately, it couldn't last. Shortly before I arrived at TimeSys
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
953 they completed a cross compiling build system (based on "TSRPM", a giant
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
954 Rube Goldberg set of Perl wrappers and LD_PRELOAD library intercepts that
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
955 cross compiled RPM source packages), and used it to cross compile the whole
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
956 of Fedora Core 2 to several different hardware platforms. This was a popular
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
957 product that sold well, and the CEO of the company decided that engineering
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
958 had completed its task and the company's emphasis would now shift to
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
959 marketing. This decision destroyed the engineering department.</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
960
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
961 <p>Engineering's task was NOT done. New Fedora releases came out every 6
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
962 months, and Red Hat only supported 3 releases back (18 months).
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
963 The TSRPM build system was extremely brittle and only ran on a specific
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
964 set of carefully crafted servers in our build room: machines running
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
965 32-bit Red Hat 9 (already obsolete even then). Timesys was selling other
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
966 companies access to these machines ("TimeSys LinuxLink"), so their engineers
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
967 could log into them through the network and run their builds on them. This
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
968 didn't scale.</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
969
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
970 <p>Nevertheless, the CEO froze the engineering budget transferred the
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
971 resources to sales and marketing. Laurie, the head of marketing, took this as
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
972 her cue to try to take over the company, diverting engineers to report to
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
973 her (starting with the webmaster, who quit, and then the system administrator,
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
974 who quit...)</p>
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
975
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
976 <p>We discovered an interesting Corrolary to Brooks' Law (adding more manpower
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
977 to a late project makes it later, because your existing productive people get
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
978 distracted training the new ones). The corollary is that shrinking teams get
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
979 paralyzed by knowledge transfers: everybody spends all their time trying to
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
980 learn what the departing engineers know, as you try to preserve a minimal
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
981 level of necessary expertise within the team.</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
982
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
983 <p>Through heroic effort the understaffed engineers managed to rebase
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
984 LinuxLink to Fedora Core 5 just as Fedora Core 2 was end-of-lifed by Red
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
985 Hat (since everything was cross compiled, this was an enormous undertaking
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
986 requiring almost as much work as porting Fedora Core 2 had in the first
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
987 place). And this burned them all out. A few people had quit during
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
988 this: the ones transferred to report to Marketing, and a few instances of
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
989 natural attrition as their friends launched start-ups they wanted in on.
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
990 But those people weren't replaced. The engineers realized that senior
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
991 management did not value them, and that they'd never get the resources
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
992 to turn their prototype build farm into a real sustainable production
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
993 system, not when those dollars could go to cold-call salesman selling
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
994 shares in the prototype.</p>
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
995
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
996 <p>Timesys had been expanding engineering when I came onboard, but a few
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
997 months later it had a reorg where the boss who'd hired me (Manas Saksena)
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
998 was "promoted into a closet" with nobody reporting to him anymore. He quit
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
999 and went to work at Red Hat, where he launched the Fedora for Arm project
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1000 (thus eliminating a significant part of TimeSys' customer base for their
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1001 ported Fedora versions). His successor (and the last new hire before
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1002 the freeze, when Manas was attempting to expand engineering to keep up with
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1003 the success of the LinuxLink subscriptions) was David Mandala. David
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1004 struggled mightily to keep the department together and shield us from the
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1005 insanity of the CEO and marketing head, but he eventually confronted the
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1006 CEO with a "do this or the company is doomed" presentation that the CEO didn't
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1007 even listen to the first page of. David resigned and went to work for Ubuntu,
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1008 where he became the head of Ubuntu Mobile and Embedded (and later Ubuntu
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1009 for Arm).</p>
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1010
1369
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1011 <p>David's resignation was like a bomb going off in engineering,
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1012 and everybody started sending out their resumes. Perhaps a fifth of
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1013 engineering had already left (and not been replaced), but now the floodgates
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1014 opened and the team of two dozen engineers I'd been hired into, with a
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1015 sattelite office in california and telecommuters in New England and Germany,
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1016 rapidly collapsed down to a dozen, then a half-dozen engineers.</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1017
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1018 <p>We stopped doing knowledge transfers, and began speculating about
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1019 a replacement build system given the now absolute necessity of throwing the old
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1020 one out, since we could no longer reproduce it, let alone maintain it.</p>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1021
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1022 <h3>The design of Aboriginal LInux</a>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1023 <p>I returned to my Firmware Linux
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1024
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1025 <blockquote><pre>
09c39f1a9d59 Check in some more project history I wrote. (Nobody should care but me, sort of blog-ish.)
Rob Landley <rob@landley.net>
parents: 1341
diff changeset
1026 UNFINISHED AFTER THIS POINT.
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1027 --------
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1028
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1029 Buildroot traffic
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1030 <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
1031 <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
1032 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
1033 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
1034
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1035
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1036
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1037
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1038 Cake
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1039
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1040 Me suggesting new buildroot list:
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1041 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
1042
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1043 Instead buildroot set off to reinvent the
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1044 wheel, maintaining their repository in
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1045
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1046 Debian's repository contained over 45,000
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1047 packages
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1048
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1049 <h2>BusyBox</h2>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1050
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1051 Mention of FWL relaunch in 2004
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1052 http://landley.livejournal.com/766.html
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1053
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1054 ----------------------------
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1055
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1056 - tcc spawns qemu
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1057 - Busybox maintainership, timesys, relaunch to current version.
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1058
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1059 </pre>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1060
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1061 <h3>Busybox maintainership</h3>
70
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1062
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1063 <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
1064 weren't powerful enough to handle the "./configure; make; make install" of
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1065 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
1066 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
1067 bugs and limitations. (It hung, it segfaulted, produced the wrong output,
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1068 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
1069
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1070 <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
1071 improving their bits), and along the way accidentally become the BusyBox
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1072 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
1073 <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
1074 is that in Firmware Linux, Busybox now functions as an effective replacement
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1075 for bzip2, coreutils, diffutils, e2fsprogs, file, findutils, gawk, grep,
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1076 inetutils, less, modutils, net-tools, patch, procps, sed, shadow, sysklogd,
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1077 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
1078 shell to replace bash with when I left.</p>
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1079
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1080 <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
1081 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
1082 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
1083 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
1084 of my time spent working on FWL.</p>
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1085
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1086 <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
1087 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
1088 where I can use it on my laptop. :)</p>
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1089
2b66e5d3ae79 More website updates.
Rob Landley <rob@landley.net>
parents:
diff changeset
1090 <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
1091
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1092
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1093
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1094 <p>I <a href=http://landley.livejournal.com/22566.html>started playing around
1341
d4eb237dcc6f Many typos, spotted by Alan Post.
Rob Landley <rob@landley.net>
parents: 1050
diff changeset
1095 with QEMU in november 2005</a>, about the same time I started keeping
867
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1096 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
1097 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
1098 <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
1099 TimeSys</a>.</p>
fc7d646d1ebf Unfinished update of history.html.
Rob Landley <rob@landley.net>
parents: 178
diff changeset
1100
72
478178b9337b SSI #include needs file=
Rob Landley <rob@landley.net>
parents: 70
diff changeset
1101 <!--#include file="footer.html" -->