<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 

<HTML>
<HEAD>
<TITLE>BusyBox</TITLE>
</HEAD>

<body text="#000000" alink="#660000" link="#660000" bgcolor="#dee2de" vlink="#660000">

<basefont face="lucida, helvetica, arial" size="3">


<CENTER>
      <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2>
	    <TR>
		<td bgcolor="#000000">
		  <FONT FACE="lucida, helvetica" COLOR="#ccccc0">
		      <B>B&nbsp;u&nbsp;s&nbsp;y&nbsp;B&nbsp;o&nbsp;x</B>
		  </FONT>
		</TD>
	    </TR>
      </TABLE>
      <a href="/"><IMG SRC="images/busybox2.jpg" alt="BusyBox" border="0" width="360" height="230"</a><BR>


<TABLE WIDTH=95% CELLSPACING=1 CELLPADDING=4 BORDER=1>

<!-- Begin Older News section -->

<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
    <A NAME="news">
    <BIG><B>
    Older BusyBox News</A> 
    </B></BIG>
    </A>
</TD></TR>
<TR><TD BGCOLOR="#eeeee0">

<ul>

    <p> <li> <b>Take me back to the <a href="/">BusyBox</a> web site.</b>
    <hr>


      <li>
	<b>3 January 2002 -- Welcome to busybox.net!</b> 

	<p>Thanks to the generosity of a number of busybox
	users, we have been able to purchase busybox.net
	(which is where you are probably reading this).
	Right now, busybox.net and uclibc.org are both
	living on my home system (at the end of my DSL
	line). I apologize for the abrupt move off of
	busybox.lineo.com. Unfortunately, I no longer have
	the access needed to keep that system updated (for
	example, you might notice the daily snapshots there
	stopped some time ago).</p>

	<p>Busybox.net is currently hosted on my home
	server, at the end of a DSL line. Unfortunately,
	the load on them is quite heavy. To address this,
	I'm trying to make arrangements to get busybox.net
	co-located directly at an ISP. To assist in the
	co-location effort, <a href=
	"http://www.codepoet.org/~markw">Mark Whitley</a>
	(author of busybox sed, cut, and grep) has donated
	his <a href=
	"http://www.netwinder.org/">NetWinder</a> computer
	for hosting busybox.net and uclibc.org. Once this
	system is co-located, the current speed problems
	should be completely eliminated. Hopefully, too,
	some of you will volunteer to set up some mirror
	sites, to help to distribute the load a bit.</p>

	<p><!-- 
	    <center>
	    Click here to help support busybox.net!
	    <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
	    <input type="hidden" name="cmd" value="_xclick">
	    <input type="hidden" name="business" value="andersen@codepoet.org">
	    <input type="hidden" name="item_name" value="Support Busybox">
	    <input type="hidden" name="image_url" value="https://codepoet-consulting.com/images/busybox2.jpg">
	    <input type="hidden" name="no_shipping" value="1">
	    <input type="image" src="images/donate.png" border="0" name="submit" alt="Make donation using PayPal">
	    </form>
	    </center>
	    -->
	 Since some people expressed concern over BusyBox
	donations, let me assure you that no one is getting
	rich here. All BusyBox and uClibc donations will be
	spent paying for bandwidth and needed hardware
	upgrades. For example, Mark's NetWinder currently
	has just 64Meg of memory. As demonstrated when
	google spidered the site the other day, 64 Megs in
	not enough, so I'm going to be ordering 256Megs of
	ram and a larger hard drive for the box today. So
	far, donations received have been sufficient to
	cover almost all expenses. In the future, we may
	have co-location fees to worry about, but for now
	we are ok. A <b>HUGE thank-you</b> goes out to
	everyone that has contributed!<br>
	 -Erik</p>
      </li>

      <li>
	<b>20 November 2001 -- BusyBox 0.60.2 released</b> 

	<p>We am very pleased to announce that the BusyBox
	0.60.2 (stable) is now released to the world. This
	one is primarily a bugfix release for the stable
	series, and it should take care of most everyone's
	needs till we can get the nice new stuff we have
	been working on in CVS ready to release (with the
	wonderful new buildsystem). The biggest change in
	this release (beyond bugfixes) is the fact that msh
	(the minix shell) has been re-worked by Vladimir N.
	Oleynik (vodz) and so it no longer crashes when
	told to do complex things with backticks.</p>

	<p>This release has been tested on x86, ARM, and
	powerpc using glibc 2.2.4, libc5, and uClibc, so it
	should work with just about any Linux system you
	throw it at. See the <a href=
	"downloads/Changelog">changelog</a> for <small>most
	of</small> the details. The last release was
	<em>very</em> solid for people, and this one should
	be even better.</p>

	<p>As usual BusyBox 0.60.2 can be downloaded from
	<a href=
	"downloads">http://www.busybox.net/downloads</a>.</p>

	<p>Have Fun.<br>
	 -Erik</p>
      </li>

    <li> <b>18 November 2001 -- Help us buy busybox.net!</b>
    
    <!-- Begin PayPal Logo -->
    <center>
    Click here to help buy busybox.net!
    <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
	<input type="hidden" name="cmd" value="_xclick">
	<input type="hidden" name="business" value="andersen@codepoet.org">
	<input type="hidden" name="item_name" value="Support Busybox">
	<input type="hidden" name="image_url" value="https://busybox.net/images/busybox2.jpg">
	<input type="hidden" name="no_shipping" value="1">
	<input type="image" src="images/donate.png" border="0" name="submit" alt="Make donation using PayPal">
    </form>
    </center>
    <!-- End PayPal Logo -->

    I've contacted the current owner of busybox.net and he is willing
    to sell the domain name -- for $250.  He also owns busybox.org but
    will not part with it...  I will then need to pay the registry fee
    for a couple of years and start paying for bandwidth, so this will
    initially cost about $300.  I would like to host busybox.net on my
    home machine (codepoet.org) so I have full control over the system,
    but to do that would require that I increase the level of bandwidth 
    I am paying for.  Did you know that so far this month, there
    have been over 1.4 Gigabytes of busybox ftp downloads?  I don't
    even <em>know</em> how much CVS bandwidth it requires.  For the
    time being, Lineo has continued to graciously provide this
    bandwidth, despite the fact that I no longer work for them.  If I 
    start running this all on my home machine, paying for the needed bandwidth 
    will start costing some money.
    <p>

    I was going to pay it all myself, but my wife didn't like that
    idea at all (big surprise).   It turns out &lt;insert argument
    where she wins and I don't&gt; she has better ideas 
    about what we should spend our money on that don't involve
    busybox.  She suggested I should ask for contributions on the
    mailing list and web page.  So...
    <p>

    I am hoping that if everyone could contribute a bit, we could pick
    up the busybox.net domain name and cover the bandwidth costs.  I
    know that busybox is being used by a lot of companies as well as
    individuals -- hopefully people and companies that are willing to 
    contribute back a bit.  So if everyone could please help out, that 
    would be wonderful!
    <p>


    <li> <b>23 August 2001 -- BusyBox 0.60.1 released</b>
    <br>

	     This is a relatively minor bug fixing release that fixes
	     up the bugs that have shown up in the stable release in
	     the last few weeks.  Fortunately, nothing <em>too</em>
	     serious has shown up.  This release only fixes bugs -- no
	     new features, no new applets.  So without further ado,
	     here it is.  Come and get it.
	     <p>
	     The 
	     <a href="downloads/Changelog">changelog</a> has all
	     the details.  As usual BusyBox 0.60.1 can be downloaded from 
	     <a href="downloads">http://busybox.net/downloads</a>.
	     <p>Have Fun!
	     <p>


    <li> <b>2 August 2001 -- BusyBox 0.60.0 released</b>
    <br>
	     I am very pleased to announce the immediate availability of
	     BusyBox 0.60.0.  I have personally tested this release with libc5, glibc,
	     and <a href="http://uclibc.org/">uClibc</a> on
	     x86, ARM, and powerpc using linux 2.2 and 2.4, and I know a number
	     of people using it on everything from ia64 to m68k with great success.
	     Everything seems to be working very nicely now, so getting a nice
	     stable bug-free(tm) release out seems to be in order.   This releases fixes
	     a memory leak in syslogd, a number of bugs in the ash and msh shells, and
	     cleans up a number of things.
	     
	     <p>

	     Those wanting an easy way to test the 0.60.0 release with uClibc can 
	     use <a href="http://user-mode-linux.sourceforge.net/">User-Mode Linux</a>
	     to give it a try by downloading and compiling 
	     <a href="ftp://busybox.net/buildroot.tar.gz">buildroot.tar.gz</a>.
	     You don't have to be root or reboot your machine to run test this way.
	     Preconfigured User-Mode Linux kernel source is also on busybox.net.
	     <p>
	     Another cool thing is the nifty <a href="downloads/tutorial/index.html">
	     BusyBox Tutorial</a> contributed by K Computing.  This requires 
	     a ShockWave plugin (or standalone viewer), so you may want to grab the 
	     the GPLed shockwave viewer from <a href="http://www.swift-tools.com/Flash/flash-0.4.10.tgz">here</a>
	     to view the tutorial.
	     <p>
	     
	     Finally, In case you didn't notice anything odd about the
	     version number of this release, let me point out that this release
	     is <em>not</em> 0.53, because I bumped the version number up a
	     bit.  This reflects the fact that this release is intended to form
	     a new stable BusyBox release series.  If you need to rely on a
	     stable version of BusyBox, you should plan on using the stable
	     0.60.x series.  If bugs show up then I will release 0.60.1, then
	     0.60.2, etc...  This is also intended to deal with the fact that
	     the BusyBox build system will be getting a major overhaul for the
	     next release and I don't want that to break products that people
	     are shipping.  To avoid that, the new build system will be
	     released as part of a new BusyBox development series that will
	     have some not-yet-decided-on odd version number.  Once things
	     stabilize and the new build system is working for everyone, then
	     I will release that as a new stable release series. 

	     <p>
	     The 
	     <a href="downloads/Changelog">changelog</a> has all
	     the details.  As usual BusyBox 0.60.0 can be downloaded from 
	     <a href="downloads">http://busybox.net/downloads</a>.
	     <p>Have Fun!
	     <p>


    <li> <b>7 July 2001 -- BusyBox 0.52 released</b>
    <br>

	     I am very pleased to announce the immediate availability of
	     BusyBox 0.52 (the "new-and-improved rock-solid release").  This
	     release is the result of <em>many</em> hours of work and has tons
	     of bugfixes, optimizations, and cleanups.  This release adds
	     several new applets, including several new shells (such as hush, msh,
	     and ash).

	     <p>
	     The 
	     <a href="downloads/Changelog">changelog</a> covers 
	     some of the more obvious details, but there are many many things that
	     are not mentioned, but have been improved in subtle ways.  As usual,
	     BusyBox 0.52 can be downloaded from 
	     <a href="downloads">http://busybox.net/downloads</a>.
	     <p>Have Fun!
	     <p>


	<li> <b>10 April 2001 - Graph of Busybox Growth </b>
	<br> 
	The illustrious Larry Doolittle has made a PostScript chart of the growth
	of the Busybox tarball size over time. It is available for downloading /
	viewing <a href= "busybox-growth.ps"> right here</a>.

	<p> (Note that while the number of applets in Busybox has increased, you
	can still configure Busybox to be as small as you want by selectively
	turning off whichever applets you don't need.)
	<p>


    <li> <b>10 April 2001 -- BusyBox 0.51 released</b>
    <br>

	     BusyBox 0.51 (the "rock-solid release") is now out there.  This
	     release adds only 2 new applets: env and vi.  The vi applet,
	     contributed by Sterling Huxley, is very functional, and is only
	     22k.  This release fixes 3 critical bugs in the 0.50 release.
	     There were 2 potential segfaults in lash (the busybox shell) in
	     the 0.50 release which are now fixed.  Another critical bug in
	     0.50 which is now fixed: syslogd from 0.50 could potentially
	     deadlock the init process and thereby break your entire system.
	     <p>

	     There are a number of improvements in this release as well.  For
	     one thing, the wget applet is greatly improved.  Dmitry Zakharov
	     added FTP support, and Laurence Anderson make wget fully RFC
	     compliant for HTTP 1.1.  The mechanism for including utility
	     functions in previous releases was clumsy and error prone.  Now
	     all utility functions are part of a new libbb library, which makes
	     maintaining utility functions much simpler.  And BusyBox now
	     compiles on itanium systems (thanks to the Debian itanium porters
	     for letting me use their system!).
	     <p>
	     You can read the 
	     <a href="downloads/Changelog">changelog</a> for
	     complete details.  BusyBox 0.51 can be downloaded from 
	     <a href="downloads">http://busybox.net/downloads</a>.
	     <p>Have Fun!
	     <p>

    <li> <b>Busybox Boot-Floppy Image</b>

    <p>Because you asked for it, we have made available a <a href=
    "downloads/busybox.floppy.img"> Busybox boot floppy
    image</a>. Here's how you use it:

    <ol>

	    <li> <a href= "downloads/busybox.floppy.img">
	    Download the image</a>

	    <li> dd it onto a floppy like so: <tt> dd if=busybox.floppy.img
	    of=/dev/fd0 ; sync </tt>

	    <li> Pop it in a machine and boot up.

    </ol>

    <p> If you want to look at the contents of the initrd image, do this:

    <pre>
	    mount ./busybox.floppy.img /mnt -o loop -t msdos        
	    cp /mnt/initrd.gz /tmp                          
	    umount /mnt           
	    gunzip /tmp/initrd.gz
	    mount /tmp/initrd /mnt -o loop -t minix
    </pre>


    <li> <b>15 March 2001 -- BusyBox 0.50 released</b>
    <br>

	     This release adds several new applets including ifconfig, route, pivot_root, stty,
	     and tftp, and also fixes tons of bugs.  Tab completion in the
	     shell is now working very well, and the shell's environment variable
	     expansion was fixed.   Tons of other things were fixed or made
	     smaller.  For a fairly complete overview, see the 
	     <a href="downloads/Changelog">changelog</a>.
	     <p>
	     lash (the busybox shell) is still with us, fixed up a bit so it
	     now behaves itself quite nicely.  It really is quite usable as
	     long as you don't expect it to provide Bourne shell grammer.
	     Standard things like pipes, redirects, command line editing, and
	     environment variable expansion work great.  But we have found that
	     this shell, while very usable, does not provide an extensible
	     framework for adding in full Bourne shell behavior.  So the first order of
	     business as we begin working on the next BusyBox release will be to merge in the new shell
	     currently in progress at 
	     <a href="http://doolittle.faludi.com/~larry/parser.html">Larry Doolittle's website</a>.   
	     <p>


    <li> <b>27 January 2001 -- BusyBox 0.49 released</b>
    <br>

	     Several new applets, lots of bug fixes, cleanups, and many smaller 
	     things made nicer.  Several cleanups and improvements to the shell.
	     For a list of the most interesting changes 
	     you might want to look at the <a href="downloads/Changelog">changelog</a>. 
	     <p>
	     Special thanks go out to Matt Kraai and Larry Doolittle for all their
	     work on this release, and for keeping on top of things while I've been 
	     out of town.
	     <p>
	     <em>Special Note</em><br>

	     BusyBox 0.49 was supposed to have replaced lash, the BusyBox
	     shell, with a new shell that understands full Bourne shell/Posix shell grammer.
	     Well, that simply didn't happen in time for this release.  A new
	     shell that will eventually replace lash is already under
	     construction.  This new shell is being developed by Larry
	     Doolittle, and could use all of our help.  Please see the work in
	     progress on <a href="http://doolittle.faludi.com/~larry/parser.html">Larry's website</a> 
	     and help out if you can.  This shell will be included in the next 
	     release of BusyBox.
	     <p>

    <li> <b>13 December 2000 -- BusyBox 0.48 released</b>
    <br>

	     This release fixes lots and lots of bugs.  This has had some very
	     rigorous testing, and looks very, very clean.  The usual tar
	     update of course: tar no longer breaks hardlinks, tar -xzf is
	     optionally supported, and the LRP folks will be pleased to know
	     that 'tar -X' and 'tar --exclude' are both now in.  Applets are
	     now looked up using a binary search making lash (the busybox
	     shell) much faster.  For the new debian-installer (for Debian
	     woody) a .udeb can now be generated.  
	     <p>
	     The curious can get a list of some of the more interesting changes by reading 
	     the <a href="downloads/Changelog">changelog</a>. 
	     <p>
	     Many thanks go out to the many many people that have contributed to 
	     this release, especially Matt Kraai, Larry Doolittle, and Kent Robotti.
	     <p>
    <p> <li> <b>26 September 2000 -- BusyBox 0.47 released</b>
    <br>

	     This release fixes lots of bugs (including an ugly bug in 0.46
	     syslogd that could fork-bomb your system).  Added several new
	     apps: rdate, wget, getopt, dos2unix, unix2dos, reset, unrpm, 
	     renice, xargs, and expr.  syslogd now supports network logging.
	     There are the usual tar updates.  Most apps now use getopt for
	     more correct option parsing.
	     See the <a href="downloads/Changelog">changelog</a> 
	     for complete details.


    <p> <li> <b>11 July 2000 -- BusyBox 0.46 released</b>
    <br>

	     This release fixes several bugs (including a ugly bug in tar,
	     and fixes for NFSv3 mount support).  Added a dumpkmap to allow 
	     people to dump a binary keymaps for use with 'loadkmap', and a
	     completely reworked 'grep' and 'sed' which should behave better.
	     BusyBox shell can now also be used as a login shell.
	     See the <a href="downloads/Changelog">changelog</a> 
	     for complete details.


    <p> <li> <b>21 June 2000 -- BusyBox 0.45 released</b>
    <br>

	     This release has been slow in coming, but is very solid at this
	     point.  BusyBox now supports libc5 as well as GNU libc.  This
	     release provides the following new apps: cut, tr, insmod, ar,
	     mktemp, setkeycodes, md5sum, uuencode, uudecode, which, and
	     telnet.  There are bug fixes for just about every app as well (see
	     the <a href="downloads/Changelog">changelog</a> for
	     details).
	     <p>
	     Also, some exciting infrastructure news!  Busybox now has its own 
	     <a href="lists/busybox/">mailing list</a>, 
	     publically browsable
	     <a href="/cgi-bin/cvsweb/busybox/">CVS tree</a>,  
	     anonymous
	     <a href="cvs_anon.html">CVS access</a>, and
	     for those that are actively contributing there is even 
	     <a href="cvs_write.html">CVS write access</a>.
	     I think this will be a huge help to the ongoing development of BusyBox.
	     <p>
	     Also, for the curious, there is no 0.44 release.  Somehow 0.44 got announced
	     a few weeks ago prior to its actually being released.  To avoid any confusion
	     we are just skipping 0.44.
	     <p>
	     Many thanks go out to the many people that have contributed to this release
	     of BusyBox (esp. Pavel Roskin)!


    <p> <li> <b>19 April 2000 -- syslogd bugfix</b>
    <br>
        Turns out that there was still a bug in busybox syslogd.
	For example, with the following test app:
<pre>
	#include &lt;syslog.h&gt;

	int do_log(char* msg, int delay)
	{
	    openlog("testlog", LOG_PID, LOG_DAEMON);
	    while(1) {
	        syslog(LOG_ERR, "%s: testing one, two, three\n", msg);
	        sleep(delay);
	    }
	    closelog();
	    return(0);
	};

	int main(void)
	{
	    if (fork()==0)
	        do_log("A", 2);
	    do_log("B", 3);
	}
</pre>
	it should be logging stuff from both "A" and "B".  As released in 0.43 only stuff
	from "A" would have been logged.  This means that if init tries to log something
	while say ppp has the syslog open, init would block (which is bad, bad, bad).
	<p>
	Karl M. Hegbloom has created a fix for the problem. 
	Thanks Karl!


    <p> <li> <b>18 April 2000 -- BusyBox 0.43 released (finally!)</b>
    <br>
        I have finally gotten everything into a state where I feel pretty
	good about things.  This is definitely the most stable, solid release
	so far.  A lot of bugs have been fixed, and the following new apps
	have been added: sh, basename, dirname, killall, uptime, 
	freeramdisk, tr, echo, test, and usleep.  Tar has been completely
	rewritten from scratch.  Bss size has also been greatly reduced.
	More details are available in the 
	<a href="downloads/Changelog">changelog</a>.
	Oh, and as a special bonus, I wrote some fairly comprehensive
	<em>documentation</em>, complete with examples and full usage information.

	<p>
	Many thanks go out to the fine people that have helped by submitting patches
	and bug reports; particularly instrumental in helping for this release were 
	Karl Hegbloom, Pavel Roskin, Friedrich Vedder, Emanuele Caratti,
	Bob Tinsley, Nicolas Pitre, Avery Pennarun, Arne Bernin, John Beppu, and Jim Gleason.
	There were others so if I somehow forgot to mention you, I'm very sorry.
	<p>

	You can grab BusyBox 0.43 tarballs <a href="downloads">here</a>.

    <p> <li> <b>9 April 2000 -- BusyBox 0.43 pre release</b>
    <br>
        Unfortunately, I have not yet finished all the things I want to
        do for BusyBox 0.43, so I am posting this pre-release for people
        to poke at.  This contains my complete rewrite of tar, which now weighs in at
        5k (7k with all options turned on) and works for reading and writing
        tarballs (which it does correctly for everything I have been able to throw
        at it).  Tar also (optionally) supports the "--exclude" option (mainly because
        the Linux Router Project folks asked for it).  This also has a pre-release
        of the micro shell I have been writing.  This pre-release should be stable
        enough for production use -- it just isn't a release since I have some structural
        changes I still want to make.
        <p>
	The pre-release can be found <a href="downloads">here</a>.
	Please let me know ASAP if you find <em>any</em> bugs.
    
    <p> <li> <b>28 March 2000 -- Andersen Baby Boy release</b>
    <br>
	I am pleased to announce that on Tuesday March 28th at 5:48pm, weighing in at 7
	lbs. 12 oz, Micah Erik Andersen was born at LDS Hospital here in Salt Lake City.
	He was born in the emergency room less then 5 minutes after we arrived -- and
	it was such a relief that we even made it to the hospital at all.  Despite the
	fact that I was driving at an amazingly unlawful speed and honking at everybody
	and thinking decidedly unkind thoughts about the people in our way, my wife
	(inconsiderate of my feelings and complete lack of medical training) was lying
	down in the back seat saying things like "I think I need to start pushing now"
	(which she then proceeded to do despite my best encouraging statements to the
	contrary).
	<p>
	Anyway, I'm glad to note that despite the much-faster-than-we-were-expecting
	labor, both Shaunalei and our new baby boy are doing wonderfully.
	<p>
	So now that I am done with my excuse for the slow release cycle...
	Progress on the next release of BusyBox has been slow but steady.  I expect
	to have a release sometime during the first week of April.  This release will
	include a number of important changes, including the addition of a shell, a 
	re-write of tar (to accommodate the Linux Router Project), and syslogd can now
	accept multiple concurrent connections, fixing lots of unexpected blocking 
	problems.


    <p> <li> <b>11 February 2000 -- BusyBox 0.42 released</b>
    <br>

	     This is the most solid BusyBox release so far.  Many, many
		bugs have been fixed.   See the 
		<a href="downloads/Changelog">changelog</a> for details.

		Of particular interest, init will now cleanly unmount 
		filesystems on reboot, cp and mv have been rewritten and 
		behave much better, and mount and umount no longer leak 
		loop devices.  Many thanks go out to Randolph Chung, 
		Karl M. Hegbloom, Taketoshi Sano, and Pavel Roskin for 
		their hard work on this release of BusyBox.  Please pound 
		on it and let me know if you find any bugs.

    <p> <li> <b>19 January 2000 -- BusyBox 0.41 released</b>
    <br>

	     This release includes bugfixes to cp, mv, logger, true, false,
		mkdir, syslogd, and init.  New apps include wc, hostid, 
		logname, tty, whoami, and yes.  New features include loop device
		support in mount and umount, and better TERM handling by init.
		The changelog can be found <a href="downloads/Changelog">here</a>.

    <p> <li> <b>7 January 2000 -- BusyBox 0.40 released</b>
    <br>

	     This release includes bugfixes to init (now includes inittab support),
	     syslogd, head, logger, du, grep, cp, mv, sed, dmesg, ls, kill, gunzip, and mknod.
	     New apps include sort, uniq, lsmod, rmmod, fbset, and loadacm.
	     In particular, this release fixes an important bug in tar which 
	     in some cases produced serious security problems.
	     As always, the changelog can be found <a href="downloads/Changelog">here</a>.

    <p> <li> <b>11 December 1999 -- BusyBox Website</b>
    <br>
	     I have received permission from Bruce Perens (the original author of BusyBox)
		to set up this site as the new primary website for BusyBox.  This website
		will always contain pointers to the latest and greatest, and will also 
		contain the latest documentation on how to use BusyBox, what it can do,
		what arguments its apps support, etc.

    <p> <li> <b>10 December 1999 -- BusyBox 0.39 released</b>
    <br>
	     This release includes fixes to init, reboot, halt, kill, and ls, and contains 
	     the new apps ping, hostname, mkfifo, free, tail, du, tee, and head.  A full
	     changelog can be found <a href="downloads/Changelog">here</a>.
    <p> <li> <b>5 December 1999 -- BusyBox 0.38 released</b>
    <br>
	     This release includes fixes to tar, cat, ls, dd, rm, umount, find, df, 
		and make install, and includes new apps syslogd/klogd and logger. 
</ul>


<!-- Begin Links section -->

<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
    <A NAME="links">
    <BIG><B>
    Important Links</A> 
    </B></BIG>
    </A>
</TD></TR>
<TR><TD BGCOLOR="#eeeee0">

<ul> 

    <li> <a href="/">Take me back to http://busybox.net/</a>.
    <p>

    <li>  <A HREF="http://perens.com/FreeSoftware/">
    Free Software from Bruce Perens</A><br>
    The original idea for BusyBox, and all versions up to 0.26 were written 
    by <A HREF="mailto:bruce@perens.com">Bruce Perens</a>.  This is his BusyBox website.
    <p>

    <li>  <A HREF="http://freshmeat.net/appindex/1999/04/11/923859921.html">
    Freshmeat AppIndex record for BusyBox</A>
    <p>

</ul>


<!-- End of Table -->

</TD></TR>
</TABLE>
</P>



<!-- Footer -->
<HR>
<TABLE WIDTH="100%">
    <TR>
	<TD>
	    <font size="-1" face="arial, helvetica, sans-serif">
	    Mail all comments, insults, suggestions and bribes to 
	    <a href="mailto:andersen@codepoet.org">Erik Andersen</a><BR>
	    The Busybox logo is copyright 1999-2002, Erik Andersen.
	    </font>
	</TD>

	<TD>
	    <a href="http://www.vim.org"><img border=0 width=88 height=32
	    src="images/anim.written.in.vi.gif" 
	    alt="This site created with the vi editor"></a>
	</TD>

	<TD>
	    <a href="http://www.gimp.org/"><img border=0 width=88 height=38
	    src="images/gfx_by_gimp.gif" alt="Graphics by GIMP"></a>
	</TD>

	<TD>
	    <a href="http://www.linuxtoday.com"><img width=90 height=36
	    src="images/ltbutton2.jpg" alt="Linux Today"></a>
	</TD>

	<TD>
	    <p><a href="http://slashdot.org"><img width=90 height=36
	    src="images/sdsmall.gif" alt="Slashdot"></a>
	</TD>

	<TD>
	    <a href="http://freshmeat.net"><img width=90 height=36
	    src="images/fm.mini.jpg" alt="Freshmeat"></a>
	</TD>

    </TR>
</TABLE>


</BODY>
</HTML>

