changeset 388:3eeb77934265

Add project summary page to website, moving news to its own page.
author Rob Landley <rob@landley.net>
date Tue, 12 Aug 2008 18:53:09 -0500
parents f0ceae67ebd0
children becb1084a427
files www/header.html www/index.html www/news.html
diffstat 3 files changed, 304 insertions(+), 222 deletions(-) [+]
line wrap: on
line diff
--- a/www/header.html	Tue Aug 12 02:33:29 2008 -0500
+++ b/www/header.html	Tue Aug 12 18:53:09 2008 -0500
@@ -13,7 +13,8 @@
 <tr><td valign=top>
   <b>About</b>
   <ul>
-    <li><a href="index.html">News</a></li>
+    <li><a href="index.html">Intro</a></li>
+    <li><a href="news.html">News</a></li>
     <li><a href="about.html">What is it?</a></li>
     <li><a href="design.html">Design Docs</a></li>
     <li><a href="new_platform.html">Porting</a></li>
--- a/www/index.html	Tue Aug 12 02:33:29 2008 -0500
+++ b/www/index.html	Tue Aug 12 18:53:09 2008 -0500
@@ -1,240 +1,81 @@
 <!--#include file="header.html" -->
-<b><h1>News</h1></b>
+
+
+<b><h1><a href=about.html>What is Firmware Linux?</a></h1></b>
 
-<h2>August 6, 2008</h2>
-<p><a href=downloads/firmware-0.9.0.tar.bz2>Version 0.9.0</a> is out
-(<a href=http://landley.net/hg/firmware/shortlog/378>changeset 378</a>)
-and can rebuild itself under itself.  (The packaging step still requires User
-Mode Linux to create ext2 images, which only works on x86 and x86-64 hosts.
-The next release should replace that with something more portable.)
-The root filesystem is now based on BusyBox 1.11.1 (plus a few bug fixes).</p>
+<blockquote>
+<p>Firmware Linux is an embedded Linux build system, designed to eliminate
+the need for cross compiling.</p>
+
+<p>The build system is a series of bash scripts which create a small native
+Linux development environment for each target, runnable on real hardware or
+under emulators such as <a href=http://qemu.org>QEMU</a>.</p>
+
+<p>Currently supported targets include arm, mips, powerpc, and x86, x86-64.
+Partial support is available for sparc, sh4, and m68k.</p>
 
-<p>The prebuilt binary images have been moved into their own
-<a href=downloads/binaries>binaries</a> directory.
-The prebuilt binary <a href=downloads/binaries/cross-compiler>cross
-compilers</a> are statically linked against uClibc for better portability.
-Updated the <a href=downloads/README>README</a> to better describe the
-contents of the <a href=downloads/binaries/system-image>system-image
-tarballs</a>.</p>
+<p>For more information, see <a href=about.html>the about page</a>.</p>
+</blockquote>
+
+<b><h1><a href=downloads>Downloading Firmware Linux</a></h1></b>
 
-<p>The forkbomb.sh script can now take a number of parallel targets to
-launch, for example "./forkbomb.sh --fork 3".  (The resulting display is kind
-of horrible but the out-$ARCH.txt files are still legible.)  Leaving off the
-number still builds all targets in parallel, with the original display.</p>
+<blockquote>
+<b><h2><a href=downloads>Source Code</a></h2></b>
+<p>The current source tarball is
+<a href=downloads/firmware-0.9.0.tar.bz2>Firmware Linux version 0.9.0</a>.
+This is the series of shell scripts you run to create the various binary
+images.  See the <a href=downloads/README>README</a> for usage instructions,
+and the <a href=news.html>release notes</a>.</p>
 
-<p>The include.sh script was reorganized so that interesting environment
-variables the user might want to export for themselves are set near the top
-of the script.  Currently this includes:</p>
+<p>Several <a href=downloads/binaries>prebuilt binary images</a>
+are available, based on the current Firmware Linux release.</p>
+
+<b><h2><a href=downloads/binaries/system-image>System Images</a></h2></b>
+
+<p>System images provide a complete native development environment, based
+on the following packages:</p>
 
 <ul>
-<li><p><b>BUILD_SHORT</b> - Makes the mini-native.sh stage skip building
-development tools.  The resulting mini-native root filesystem contains uClibc
-and busybox, but nothing else.  (Export "BUILD_SHORT=headers" to put back the
-toolchain headers for use by another compiler, such as tinycc.)</p>
-
-<li><p><b>BUILD_STATIC</b> - Tell cross-compiler.sh to create static
-binaries, for a more portable cross compiler toolchain.  (If you want them
-linked against uClibc, build a mini-native for your host, chroot into it, and
-then rebuild under that.)</li>
-
-<li><p><b>PREFERRED_MIRROR</b> - Tell download.sh to fetch packages from a
-non-default location (falling back to the standard mirror list if it can't get
-one from there).</p></li>
-
-<li><p><b>RECORD_COMMANDS</b> - Record a list of all command lines used during
-each build stage log files named "cmdlines.$STAGE.$PACKAGE" under the build
-directory.  Each file can be turned into a list of the command names used via
-"awk '{print $1}' build/cmdlines* | sort -u".  The script
-sources/toys/report_recorded_commands.sh gives a report of all commands
-used by each package after a call to "RECORD_COMMANDS=1 ./forkbomb.sh".
-(This is an easy way to find out exactly what environmental dependencies a
-package needs to build, or at least what it uses out of $PATH).</p></li>
+<li>Linux 2.6.26.2</li>
+<li>uClibc 0.9.29</li>
+<li>BusyBox 1.11.1</li>
+<li>binutils 2.18</li>
+<li>gcc 4.1.2</li>
+<li>make 3.8.1</li>
+<li>bash 2.05b</li>
 </ul>
 
-<p>Updated documentation is in progress...</p>
-
-<h2>June 6, 2008</h2>
-<p><a href=downloads/firmware-0.4.0.tar.bz2>Version 0.4.0</a> is out
-(<a href=http://landley.net/hg/firmware/shortlog/345>changeset 345</a>),
-with kernel 2.6.25.4 and the "distcc trick" working out of the box.</p>
-
-<p>The distcc trick accelerates a native build by calling out to the
-cross compiler.  To use it, download the appropriate cross-compiler-$ARCH and
-system-image-$ARCH tarballs, run the "run-with-distcc.sh" from the system image
-directory with the path to the cross compiler directory as its first argument.
-(You need to have distcc installed on the host system.)</p>
-
-<p>After building from source, the cross-compiler and system-image directories
-remain in the build directory.  The "emulator-build.sh" runs these with
-distcc acceration set up.  The script "smoketest.sh" is a wrapper
-around emulator-build.sh which feeds a script into qemu's stdin to compile
-and run a multi-threaded "hello world" under the emulator, using distcc and
-the cross compiler.</p>
-
-<p>If smoketest.sh works for a platform, it means a lot of stuff worked to get
-that far.  The cross compiler worked to build the system, and the emulated
-system booted so QEMU, the uClibc config, and the kernel config agreed.
-The emulated system has a working virtual hard drive and serial port, and for
-distcc to work it has a working virtual network connection.  Running "make"
-would also require a working realtime clock.</p>
-
-<p>The seven commands missing in order to run the FWL build under itself
-are bzip2, sort, diff, wget, install, od, and find.  (The busybox versions,
-where available, had a bug, and they're not in toybox yet.)  I'm trying to
-get those in for the next release in September.</p>
-
-<p>Sorry I missed a release back in April.  Shouldn't happen again.</p>
-
-<h2>January 29, 2008</h2>
-<p><a href=downloads/firmware-0.3.1.tar.bz2>Version 0.3.1</a> is out
-(<a href=http://landley.net/hg/firmware/shortlog/275>changeset 275</a>), with
-kernel 2.6.24.  The <a href=downloads/images>images</a>
-are now tarballs each containing the ext2, zImage, and run script files.
-The run scripts now run qemu-setup.sh by default so /proc, /sys, /dev
-and the virtual network are initialized, and the default shell is busybox
-ash (so cursor keys and history work).</p>
+<p>(The build also uses the toybox 0.0.6 and distcc 2.18.3 packages, but does
+not depend on them.)</p>
 
-<p>Sparc is still broken (tracked it down to a dynamic linking bug, I think,
-haven't fixed it yet) and m68k is failing to build with an internal compiler
-error (next release I should upgrade the compiler).  All the other targets
-have a working virtual network, and all but powerpc exit qemu when you
-exit the PID 1 command shell.</p>
-
-<p>Building on an x86-64 host< should no longer be insanely slow (the
-gcc-min-heapsize arguments that allow 32-bit hosts to build in
-128 megs of ram do very impolite things to 64-bit hosts), and the resulting
-x86-64 cross compiler should now be properly relocatable.</p>
-
-<p>Better build dependency tracking: the host-tools script is now
-populating a single directory with all the commands needed by the build, and
-restricting $PATH to that directory (so it can't accidentally call any
-commands that aren't explicitly listed).  It's building toybox and busybox to
-provide most of these commands (the remaining ones are listed towards the end
-of include.sh), and creating symlinks to the remaining ones out
-of the original $PATH.  This allows it to build on a wider range of host
-distributions.</p>
+<p>System image tarballs contain an ext2 root filesystem image and a kernel
+configured to boot under the emulator QEMU.  Use the "./run-emulator.sh"
+script to use qemu to emulate the appropriate target system, giving you a
+shell prompt within the native development environment.  (Type "exit" when
+finished.)</p>
 
-<h2>November 2, 2007</h2>
-<p><a href=downloads/firmware-0.3.0.tar.bz2>Version 0.3.0</a> is out
-(changeset 242), with kernel 2.6.23.  PowerPC finally works under
-qemu (network and everything), and it's building a m68k target
-(although I have no emulator to run that).  That means there are
-ten targets, of which eight run under qemu.  (Sparc is still
-broken, let me know if anybody actually cares.)</p>
+<b><h2><a href=downloads/binaries/mini-native>Root filesystem tarballs</a></h2></b>
 
-<p>The new "./forkbomb.sh --fork" script builds all the targets in
-parallel, or use --nofork if you haven't got the memory for that
-(and --watch to watch and existing build if you ctrl-c out of
-the display before it's done).</p>
+<p>If you prefer to package your own filesystem images, or use QEMU's
+application emulation mode, you can download each target's root filesystem
+packaged in a tarball.</p>
 
-<p>The build is now smarter about extracting only one copy of the
-source code (in build/sources) and re-using it for multiple builds,
-building out of tree (via cp -rs to create a tree full of symlinks
-so the package doesn't need native out-of-tree support).</p>
-
-<h2>September 2, 2007</h2>
-<p>Added <a href=new_platform.html>a porting guide</a>.  I'm working on
-m68k, ppc, big endian arm, and maybe blackfin targets for the next release,
-and thought other people might be interested in the process.  (The vast
-majority of it is fiddly debugging.  These are the other steps.)</p>
+<b><h2><a href=downloads/binaries/cross-compiler>Cross compilers</h2></a></b>
 
-<h2>June 27, 2007</h2>
-<p><a href=downloads/firmware-0.2.2.tar.bz2>Version 0.2.2</a> is out
-(changeset 185).  Using uClibc 0.9.29 release, several small bugfixes,
-new mips big-endian config, actually work when /bin/sh->dash (mostly
-by explicitly saying /bin/bash everywhere), automatically detect
-the number of CPUs in the machine to feed -j to make, and better
-diagnostic output.</p>
+<p>Prebuilt binary cross compilers for use on <a href=downloads/binaries/cross-compiler/host-i686>i686</a> or <a href=downloads/binaries/cross-compiler/host-x86_64>x86-64</a> hosts.</p>
+</blockquote>
 
-<h2>April 9, 2007</h2>
-<p><a href=downloads/firmware-0.2.1.tar.bz2>Version 0.2.1</a> is out
-(changeset 156).  Significant upgrades to armv4l: the native compiler works
-now, and it's using soft-float.  Added armv5l and i586 targets to show how
-to do that kind of variant.  Added preliminary powerpc support (although
-qemu can't run it yet).  Reorganized the download directory and rewrote
-the <a href=downloads/README>README</a>.  Added squashfs back (the kernel
-supports it, but it's not using it yet).  Moved uClibc to miniconfig.
-(Yes, the patch for this is huge, and yes I need to push it all upstream into
-the Linux kernel.  On the bright side, this one builds on a host that doesn't
-have curses installed.)  Stopped trying to build qemu (at least until they
-get the gcc 3.x dependencies cleaned out), now just warn if it's not there
-(so far the build only uses it to sanity-test the cross compiler, which is
-now skipped automatically if it's not there).</p>
-
-<p>I note that some versions of Ubuntu (Edgy and up) are pushing a political
-agenda.  They install bash, but point /bin/sh to dash instead.  (So why
-install bash if you're not going to use it?)  This breaks all sorts of things,
-and if somebody can tell me how to force make to run "/bin/bash" instead of
-"/bin/sh", I'll consider trying to deal with the mess.  Until then, I suggest
-"rm /bin/sh; ln -s bash /bin/sh" to get a working system.  (I'm no fan of
-bash, but dash is just broken.)</p>
-
-<p>(Those of you who use vi and want to be able to use the cursor keys while
-in insert mode might want to do something similar with vi->vim.  Ubuntu seems
-to be trying to train users to change their habits.  Dog biscuits would be a
-more honest approach.)</p>
+<b><h1><a href=/hg/firmware>Development</a></h1></b>
 
-<p>Update: I've been pointed at
-<a href=https://wiki.ubuntu.com/DashAsBinSh>this</a> as evidence Ubuntu isn't
-pushing a political agenda.  Ok, maybe it's just really bad technical judgement.
-Are they honestly saying that people write shell scripts for the speed?  And
-how do you make a size argument and then install bash by default in ADDITION
-to the other shell?  Boggle.  In 1991 after Linus Torvalds taught his term
-program to understand the minix filesystem so he could upload and download
-without rebooting, he taught it to handle the system calls of bash so he could
-rm/mv/mkdir without rebooting.  That's where Linux 0.0.1
-came from.  Bash was the default Linux shell _before_ 0.0.1.  Be very
-careful messing with that kind of a de-facto standard, guys.  Dash is
-garbage.  Background a process with &amp; and then hit ctrl-c: it'll kill it.
-It doesn't understand blah/{blah,blah} file list syntax.  It can't do
-"source file.sh" (just ". file.sh", which is unreadable).  I repeat: I'm not a
-fan of bash (yeah, the bloat's getting crazy), but dash is broken.</p>
-
-<p>And that still doesn't explain why "vi" can't use the cursor keys in
-insert mode, but "vim" can...</p>
-
-<h2>March 6, 2007</h2>
-<p>Version 0.2.0 is out.  This one builds ext2 images which can boot up to a
-shell prompt under qemu.  This works on i686, armv4l, x86_64, and mipsel.
-(Sparc's broken.  Anyone who cares about sparc is welcome to debug it.)</p>
-
-<p>There are now prebuilt ext2 image files in the download directory.
-The kernels are in the mini-native tarballs.  (Yeah, I should repackage that
-next release.)  The system emulator invocation for each platform is
-the appropriate sources/configs file, and run-mini-native.sh invokes 'em.</p>
-
-<p>The mailing list is in the usual place if you have any questions.</p>
+<p>The project maintains a <a href=/hg/firmware>development repository</a>
+using the Mercurial source control system.  This includes RSS feeds for
+<a href=http://127.0.0.1/hg/hgwebdir.cgi/firmware/rss-log>each checkin</a>
+and for <a href=http://127.0.0.1/hg/hgwebdir.cgi/firmware/rss-tags>new releases</a>.</p>
 
-<h2>January 14, 2007</h2>
-<p>There's a new irc channel for the project, #firmware on freenode.</p>
-
-<p><a href=http://landley.net/hg/firmware?cl=88>Changeset 88</a> builds
-i686, x86_64, armv4l, mips, and sparc.  I've made a release tarball of
-that (<a href=downloads/firmware-0.1.1.tar.bz2>firmware 0.1.1</a>, "It works
-for me"), and updated the prebuilt cross-compiler tarballs in the
-<a href=downloads>downloads</a> directory.  I've added a big README and
-prebuilt mini-native tarballs for each platform (although packing them up into
-something qemu can boot is currently left as an exercise for the reader).</p>
-
-<p>Speaking of which, I'm currently working on adding ext2 packaging
-(via <a href=http://landley.net/code/toybox>toybox</a>) to the build scripts,
-so qemu system emulation can boot the result and then run the next stage
-automatically.</p>
+<p>Questions about Firmware Linux should be addressed to the project's
+<a href=http://www2.them.com:8080/cgi-bin/mailman/listinfo/firmware>mailing
+list</a>, the IRC channel #firmware on irc.freenode.org.  The project
+maintainer's <a href=/notes.html>blog</a> often includes notes about
+ongoing Firmware Linux development.</p>
 
-<h2>December 28, 2006</h2>
-<p><a href=http://landley.net/hg/firmware?cl=68>Changeset 68</a> builds
-a native build environment with a working toolchain.  And in celebration, I've
-revamped the website with an actual navigation bar and content and such.</p>
-
-<p>I should put out a release soon.</p>
-
-<h2>December 5, 2006</h2>
-<p><a href=http://landley.net/hg/firmware?cl=27>Changeset 27</a> builds
-a relocatable armv4l cross-compile toolchain!  Download the tarball,
-run ./download.sh, then run ./build.sh, then grab the "build/cross-compiler"
-directory and use "bin/armv4l-unknown-linux-gnu-gcc" out of that (which
-I admit is a bit of a mouthful, for which I blame the FSF).</p>
-
-<h2>August 6, 2006</h2>
-<p>Mecurial repository created.  Nothing to see yet, move along...</p>
 <!--#include file="footer.html" -->
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/www/news.html	Tue Aug 12 18:53:09 2008 -0500
@@ -0,0 +1,240 @@
+<!--#include file="header.html" -->
+<b><h1>News</h1></b>
+
+<h2>August 6, 2008</h2>
+<p><a href=downloads/firmware-0.9.0.tar.bz2>Version 0.9.0</a> is out
+(<a href=http://landley.net/hg/firmware/shortlog/378>changeset 378</a>)
+and can rebuild itself under itself.  (The packaging step still requires User
+Mode Linux to create ext2 images, which only works on x86 and x86-64 hosts.
+The next release should replace that with something more portable.)
+The root filesystem is now based on BusyBox 1.11.1 (plus a few bug fixes).</p>
+
+<p>The prebuilt binary images have been moved into their own
+<a href=downloads/binaries>binaries</a> directory.
+The prebuilt binary <a href=downloads/binaries/cross-compiler>cross
+compilers</a> are statically linked against uClibc for better portability.
+Updated the <a href=downloads/README>README</a> to better describe the
+contents of the <a href=downloads/binaries/system-image>system-image
+tarballs</a>.</p>
+
+<p>The forkbomb.sh script can now take a number of parallel targets to
+launch, for example "./forkbomb.sh --fork 3".  (The resulting display is kind
+of horrible but the out-$ARCH.txt files are still legible.)  Leaving off the
+number still builds all targets in parallel, with the original display.</p>
+
+<p>The include.sh script was reorganized so that interesting environment
+variables the user might want to export for themselves are set near the top
+of the script.  Currently this includes:</p>
+
+<ul>
+<li><p><b>BUILD_SHORT</b> - Makes the mini-native.sh stage skip building
+development tools.  The resulting mini-native root filesystem contains uClibc
+and busybox, but nothing else.  (Export "BUILD_SHORT=headers" to put back the
+toolchain headers for use by another compiler, such as tinycc.)</p>
+
+<li><p><b>BUILD_STATIC</b> - Tell cross-compiler.sh to create static
+binaries, for a more portable cross compiler toolchain.  (If you want them
+linked against uClibc, build a mini-native for your host, chroot into it, and
+then rebuild under that.)</li>
+
+<li><p><b>PREFERRED_MIRROR</b> - Tell download.sh to fetch packages from a
+non-default location (falling back to the standard mirror list if it can't get
+one from there).</p></li>
+
+<li><p><b>RECORD_COMMANDS</b> - Record a list of all command lines used during
+each build stage log files named "cmdlines.$STAGE.$PACKAGE" under the build
+directory.  Each file can be turned into a list of the command names used via
+"awk '{print $1}' build/cmdlines* | sort -u".  The script
+sources/toys/report_recorded_commands.sh gives a report of all commands
+used by each package after a call to "RECORD_COMMANDS=1 ./forkbomb.sh".
+(This is an easy way to find out exactly what environmental dependencies a
+package needs to build, or at least what it uses out of $PATH).</p></li>
+</ul>
+
+<p>Updated documentation is in progress...</p>
+
+<h2>June 6, 2008</h2>
+<p><a href=downloads/firmware-0.4.0.tar.bz2>Version 0.4.0</a> is out
+(<a href=http://landley.net/hg/firmware/shortlog/345>changeset 345</a>),
+with kernel 2.6.25.4 and the "distcc trick" working out of the box.</p>
+
+<p>The distcc trick accelerates a native build by calling out to the
+cross compiler.  To use it, download the appropriate cross-compiler-$ARCH and
+system-image-$ARCH tarballs, run the "run-with-distcc.sh" from the system image
+directory with the path to the cross compiler directory as its first argument.
+(You need to have distcc installed on the host system.)</p>
+
+<p>After building from source, the cross-compiler and system-image directories
+remain in the build directory.  The "emulator-build.sh" runs these with
+distcc acceration set up.  The script "smoketest.sh" is a wrapper
+around emulator-build.sh which feeds a script into qemu's stdin to compile
+and run a multi-threaded "hello world" under the emulator, using distcc and
+the cross compiler.</p>
+
+<p>If smoketest.sh works for a platform, it means a lot of stuff worked to get
+that far.  The cross compiler worked to build the system, and the emulated
+system booted so QEMU, the uClibc config, and the kernel config agreed.
+The emulated system has a working virtual hard drive and serial port, and for
+distcc to work it has a working virtual network connection.  Running "make"
+would also require a working realtime clock.</p>
+
+<p>The seven commands missing in order to run the FWL build under itself
+are bzip2, sort, diff, wget, install, od, and find.  (The busybox versions,
+where available, had a bug, and they're not in toybox yet.)  I'm trying to
+get those in for the next release in September.</p>
+
+<p>Sorry I missed a release back in April.  Shouldn't happen again.</p>
+
+<h2>January 29, 2008</h2>
+<p><a href=downloads/firmware-0.3.1.tar.bz2>Version 0.3.1</a> is out
+(<a href=http://landley.net/hg/firmware/shortlog/275>changeset 275</a>), with
+kernel 2.6.24.  The <a href=downloads/images>images</a>
+are now tarballs each containing the ext2, zImage, and run script files.
+The run scripts now run qemu-setup.sh by default so /proc, /sys, /dev
+and the virtual network are initialized, and the default shell is busybox
+ash (so cursor keys and history work).</p>
+
+<p>Sparc is still broken (tracked it down to a dynamic linking bug, I think,
+haven't fixed it yet) and m68k is failing to build with an internal compiler
+error (next release I should upgrade the compiler).  All the other targets
+have a working virtual network, and all but powerpc exit qemu when you
+exit the PID 1 command shell.</p>
+
+<p>Building on an x86-64 host< should no longer be insanely slow (the
+gcc-min-heapsize arguments that allow 32-bit hosts to build in
+128 megs of ram do very impolite things to 64-bit hosts), and the resulting
+x86-64 cross compiler should now be properly relocatable.</p>
+
+<p>Better build dependency tracking: the host-tools script is now
+populating a single directory with all the commands needed by the build, and
+restricting $PATH to that directory (so it can't accidentally call any
+commands that aren't explicitly listed).  It's building toybox and busybox to
+provide most of these commands (the remaining ones are listed towards the end
+of include.sh), and creating symlinks to the remaining ones out
+of the original $PATH.  This allows it to build on a wider range of host
+distributions.</p>
+
+<h2>November 2, 2007</h2>
+<p><a href=downloads/firmware-0.3.0.tar.bz2>Version 0.3.0</a> is out
+(changeset 242), with kernel 2.6.23.  PowerPC finally works under
+qemu (network and everything), and it's building a m68k target
+(although I have no emulator to run that).  That means there are
+ten targets, of which eight run under qemu.  (Sparc is still
+broken, let me know if anybody actually cares.)</p>
+
+<p>The new "./forkbomb.sh --fork" script builds all the targets in
+parallel, or use --nofork if you haven't got the memory for that
+(and --watch to watch and existing build if you ctrl-c out of
+the display before it's done).</p>
+
+<p>The build is now smarter about extracting only one copy of the
+source code (in build/sources) and re-using it for multiple builds,
+building out of tree (via cp -rs to create a tree full of symlinks
+so the package doesn't need native out-of-tree support).</p>
+
+<h2>September 2, 2007</h2>
+<p>Added <a href=new_platform.html>a porting guide</a>.  I'm working on
+m68k, ppc, big endian arm, and maybe blackfin targets for the next release,
+and thought other people might be interested in the process.  (The vast
+majority of it is fiddly debugging.  These are the other steps.)</p>
+
+<h2>June 27, 2007</h2>
+<p><a href=downloads/firmware-0.2.2.tar.bz2>Version 0.2.2</a> is out
+(changeset 185).  Using uClibc 0.9.29 release, several small bugfixes,
+new mips big-endian config, actually work when /bin/sh->dash (mostly
+by explicitly saying /bin/bash everywhere), automatically detect
+the number of CPUs in the machine to feed -j to make, and better
+diagnostic output.</p>
+
+<h2>April 9, 2007</h2>
+<p><a href=downloads/firmware-0.2.1.tar.bz2>Version 0.2.1</a> is out
+(changeset 156).  Significant upgrades to armv4l: the native compiler works
+now, and it's using soft-float.  Added armv5l and i586 targets to show how
+to do that kind of variant.  Added preliminary powerpc support (although
+qemu can't run it yet).  Reorganized the download directory and rewrote
+the <a href=downloads/README>README</a>.  Added squashfs back (the kernel
+supports it, but it's not using it yet).  Moved uClibc to miniconfig.
+(Yes, the patch for this is huge, and yes I need to push it all upstream into
+the Linux kernel.  On the bright side, this one builds on a host that doesn't
+have curses installed.)  Stopped trying to build qemu (at least until they
+get the gcc 3.x dependencies cleaned out), now just warn if it's not there
+(so far the build only uses it to sanity-test the cross compiler, which is
+now skipped automatically if it's not there).</p>
+
+<p>I note that some versions of Ubuntu (Edgy and up) are pushing a political
+agenda.  They install bash, but point /bin/sh to dash instead.  (So why
+install bash if you're not going to use it?)  This breaks all sorts of things,
+and if somebody can tell me how to force make to run "/bin/bash" instead of
+"/bin/sh", I'll consider trying to deal with the mess.  Until then, I suggest
+"rm /bin/sh; ln -s bash /bin/sh" to get a working system.  (I'm no fan of
+bash, but dash is just broken.)</p>
+
+<p>(Those of you who use vi and want to be able to use the cursor keys while
+in insert mode might want to do something similar with vi->vim.  Ubuntu seems
+to be trying to train users to change their habits.  Dog biscuits would be a
+more honest approach.)</p>
+
+<p>Update: I've been pointed at
+<a href=https://wiki.ubuntu.com/DashAsBinSh>this</a> as evidence Ubuntu isn't
+pushing a political agenda.  Ok, maybe it's just really bad technical judgement.
+Are they honestly saying that people write shell scripts for the speed?  And
+how do you make a size argument and then install bash by default in ADDITION
+to the other shell?  Boggle.  In 1991 after Linus Torvalds taught his term
+program to understand the minix filesystem so he could upload and download
+without rebooting, he taught it to handle the system calls of bash so he could
+rm/mv/mkdir without rebooting.  That's where Linux 0.0.1
+came from.  Bash was the default Linux shell _before_ 0.0.1.  Be very
+careful messing with that kind of a de-facto standard, guys.  Dash is
+garbage.  Background a process with &amp; and then hit ctrl-c: it'll kill it.
+It doesn't understand blah/{blah,blah} file list syntax.  It can't do
+"source file.sh" (just ". file.sh", which is unreadable).  I repeat: I'm not a
+fan of bash (yeah, the bloat's getting crazy), but dash is broken.</p>
+
+<p>And that still doesn't explain why "vi" can't use the cursor keys in
+insert mode, but "vim" can...</p>
+
+<h2>March 6, 2007</h2>
+<p>Version 0.2.0 is out.  This one builds ext2 images which can boot up to a
+shell prompt under qemu.  This works on i686, armv4l, x86_64, and mipsel.
+(Sparc's broken.  Anyone who cares about sparc is welcome to debug it.)</p>
+
+<p>There are now prebuilt ext2 image files in the download directory.
+The kernels are in the mini-native tarballs.  (Yeah, I should repackage that
+next release.)  The system emulator invocation for each platform is
+the appropriate sources/configs file, and run-mini-native.sh invokes 'em.</p>
+
+<p>The mailing list is in the usual place if you have any questions.</p>
+
+<h2>January 14, 2007</h2>
+<p>There's a new irc channel for the project, #firmware on freenode.</p>
+
+<p><a href=http://landley.net/hg/firmware?cl=88>Changeset 88</a> builds
+i686, x86_64, armv4l, mips, and sparc.  I've made a release tarball of
+that (<a href=downloads/firmware-0.1.1.tar.bz2>firmware 0.1.1</a>, "It works
+for me"), and updated the prebuilt cross-compiler tarballs in the
+<a href=downloads>downloads</a> directory.  I've added a big README and
+prebuilt mini-native tarballs for each platform (although packing them up into
+something qemu can boot is currently left as an exercise for the reader).</p>
+
+<p>Speaking of which, I'm currently working on adding ext2 packaging
+(via <a href=http://landley.net/code/toybox>toybox</a>) to the build scripts,
+so qemu system emulation can boot the result and then run the next stage
+automatically.</p>
+
+<h2>December 28, 2006</h2>
+<p><a href=http://landley.net/hg/firmware?cl=68>Changeset 68</a> builds
+a native build environment with a working toolchain.  And in celebration, I've
+revamped the website with an actual navigation bar and content and such.</p>
+
+<p>I should put out a release soon.</p>
+
+<h2>December 5, 2006</h2>
+<p><a href=http://landley.net/hg/firmware?cl=27>Changeset 27</a> builds
+a relocatable armv4l cross-compile toolchain!  Download the tarball,
+run ./download.sh, then run ./build.sh, then grab the "build/cross-compiler"
+directory and use "bin/armv4l-unknown-linux-gnu-gcc" out of that (which
+I admit is a bit of a mouthful, for which I blame the FSF).</p>
+
+<h2>August 6, 2006</h2>
+<p>Mecurial repository created.  Nothing to see yet, move along...</p>
+<!--#include file="footer.html" -->