<!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="http://busybox.net/">BusyBox</a> web site.</b>
    <hr>

    <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="http://busybox.net/downloads/Changelog">changelog</a> for
	     complete details.  BusyBox 0.51 can be downloaded from 
	     <a href="http://busybox.net/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=
    "http://busybox.net/downloads/busybox.floppy.img"> Busybox boot floppy
    image</a>. Here's how you use it:

    <ol>

	    <li> <a href= "http://busybox.net/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="http://busybox.net/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="http://busybox.net/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="http://busybox.net/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="http://busybox.net/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="http://busybox.net/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="http://busybox.net/downloads/Changelog">changelog</a> for
	     details).
	     <p>
	     Also, some exciting infrastructure news!  Busybox now has its own 
	     <a href="http://busybox.net/lists/busybox/">mailing list</a>, 
	     publically browsable
	     <a href="http://busybox.net/cgi-bin/cvsweb/busybox/">CVS tree</a>,  
	     anonymous
	     <a href="http://busybox.net/cvs_anon.html">CVS access</a>, and
	     for those that are actively contributing there is even 
	     <a href="http://busybox.net/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 
	<a href="ftp://busybox.net/pub/busybox/busybox-0.43-syslog_patch">fix for the problem</a>.
	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="ftp://busybox.net/pub/busybox/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="ftp://busybox.net/pub/busybox/">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="ftp://busybox.net/pub/busybox/">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="ftp://busybox.net/pub/busybox/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="ftp://busybox.net/pub/busybox/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="ftp://busybox.net/pub/busybox/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="ftp://busybox.net/pub/busybox/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="http://busybox.net/">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>

    <li> <a href="http://busybox.net/software.html">Cool embedded software</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,2000,2001 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>

