Mercurial > hg > aboriginal
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 |
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 &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 | 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 | 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 | 1062 |
1063 <p>When the Firmware Linux project started, busybox applets like sed and sort | |
1064 weren't powerful enough to handle the "./configure; make; make install" of | |
1065 packages like binutils or gcc. Busybox was usable in an embedded router or | |
1066 rescue floppy, but trying to get real work done with it revealed numerous | |
1067 bugs and limitations. (It hung, it segfaulted, produced the wrong output, | |
1068 refused to run due to unrecognized command line options... You name it.)</p> | |
1069 | |
1070 <p>So I spent about 3 years improving Busybox (and pestering other people into | |
1071 improving their bits), and along the way accidentally become the BusyBox | |
1072 maintainer (at least until the project's crazy-uncle founder showed up and | |
1073 <a href=http://lwn.net/Articles/202106/>drove me away again</a>). The result | |
1074 is that in Firmware Linux, Busybox now functions as an effective replacement | |
1075 for bzip2, coreutils, diffutils, e2fsprogs, file, findutils, gawk, grep, | |
1076 inetutils, less, modutils, net-tools, patch, procps, sed, shadow, sysklogd, | |
1077 sysvinit, tar, util-linux, and vim. I was in the process of writing a new | |
1078 shell to replace bash with when I left.</p> | |
1079 | |
1080 <p>Firmware Linux stalled while I was BusyBox maintainer (2005-2006) due to | |
1081 lack of time, and since that ended most of my spare programming time has gone | |
1082 into launching toybox. But one of the main goals of toybox is to replace | |
1083 BusyBox in Firmware Linux, so as toybox matures it'll naturally lead to more | |
1084 of my time spent working on FWL.</p> | |
1085 | |
1086 <p>The server behind this website does not currently run on Firmware Linux. | |
1087 Making it do so is a TODO item. After that, I'd like to get it to the point | |
1088 where I can use it on my laptop. :)</p> | |
1089 | |
1090 <p>A snapshot of the old website is <a href=old>available here</a>.</p> | |
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 | 1101 <!--#include file="footer.html" --> |