<!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>


<!-- Begin Introduction section -->


<TABLE WIDTH="95%" CELLSPACING=1 CELLPADDING=4 BORDER=1>
<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
    <A NAME="intro"> <BIG><B>
    The Swiss Army Knife of Embedded Linux
    </B></BIG></A>
</TD></TR>
<TR><TD BGCOLOR="#eeeee0">

BusyBox combines tiny versions of many common UNIX utilities into a single
small executable. It provides minimalist replacements for most of the utilities
you usually find in fileutils, shellutils, findutils, textutils, grep, gzip,
tar, etc. BusyBox provides a fairly complete POSIX environment for any small or
embedded system. The utilities in BusyBox generally have fewer options than
their full featured GNU cousins; however, the options that are included provide
the expected functionality and behave very much like their GNU counterparts.
<p>
BusyBox has been written with size-optimization and limited resources in mind.
It is also extremely modular so you can easily include or exclude commands (or
features) at compile time. This makes it easy to customize your embedded
systems. To create a working system, just add /dev, a kernel, and a shell.
For a really minimal system, you can even use the busybox shell (not Bourne compatible, but very small and quite usable), and the busybox vi editor.
<p>

BusyBox is now maintained by 
<a href="http://codepoet.org/andersen/erik/erik.html">
Erik Andersen</a>, and its ongoing development is being sponsored by 
<a href="http://www.lineo.com/">Lineo</a>. 
<p>
BusyBox is licensed under the 
<a href="http://www.gnu.org/copyleft/gpl.html">GNU GENERAL PUBLIC LICENSE</a>
<p>


<h3> Screenshot </h3>

<p> Because everybody loves screenshots, a screenshot of BusyBox 
is now available <a href="screenshot.html"> right here</a>


<H3>Mailing List Information</h3>
BusyBox now has a <a href="http://opensource.lineo.com/lists/busybox/">mailing list</a>!
To subscribe, go and visit <a href="http://opensource.lineo.com/mailman/listinfo/busybox">this page</a>.

<!-- Begin Latest News section -->

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

<ul>

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

    <ol>

	    <li> <a href= "ftp://opensource.lineo.com/busybox/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="ftp://oss.lineo.com/busybox/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="ftp://oss.lineo.com/busybox/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="ftp://oss.lineo.com/busybox/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>


    <li> <b>Old News</b>
    <br>
	     For the old news, visit <a href="http://busybox.lineo.com/oldnews.html">the old news page</a>.
</ul>


<!-- Begin Download section -->

<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
    <A NAME="download"><BIG><B>
    Download
    </B></BIG></A>
</TD></TR>
<TR><TD BGCOLOR="#eeeee0">
<ul>

	<li> Source for the latest release can always be downloaded from 
	<a href="ftp://oss.lineo.com/busybox">ftp://oss.lineo.com/busybox</a>.

	<li> A new snapshot of the source is made daily and is available as a GNU
	gzipped tarball <a href="busybox.tar.gz"> right here</a>.

	<li> BusyBox now has its own publically browsable
	<a href="http://opensource.lineo.com/cgi-bin/cvsweb/busybox/">CVS tree</a>,  
	anonymous
	<a href="http://opensource.lineo.com/cvs_anon.html">CVS access</a>, and
	for those that are actively contributing there is even 
	<a href="http://opensource.lineo.com/cvs_write.html">CVS write access</a>.

</ul>


<!-- Begin Docs section -->

<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
    <A NAME="docs"><BIG><B>
    Documentation
    </B></BIG></A>
</TD></TR>
<TR><TD BGCOLOR="#eeeee0">
Current documentation for BusyBox includes: 
<ul>
    <li> <a href="ftp://oss.lineo.com/busybox/BusyBox.html">BusyBox.html</a>.
		This is a list of the all the available commands in BusyBox with 
		complete usage information and examples of how to use each app.  I 
		have spent a <em>lot</em> of time updating these docs and trying to 
		make them fairly comprehensive.  If you find any errors (factual, 
		grammatical, whatever) please let me know.
    <li> <a href="ftp://oss.lineo.com/busybox/README">README</a>.
		This is the README file included in the busybox source release.
    <li> <a href="http://bugs.lineo.com/db/pa/lbusybox.html">BusyBox Bugs</a>.
		Need to report a bug?  Need to check if a bug has been filed?
    <li> If you need more help, the BusyBox
    <a href="http://opensource.lineo.com/lists/busybox/">mailing list</a> is
    a good place to start.
</ul>


<!-- Begin Links section -->

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

<ul> 

    <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/projects/busybox/">
    Freshmeat AppIndex record for BusyBox</A>
    <p>
    <li><a href="http://tinylogin.lineo.com/">TinyLogin</a>
        is a nice embedded tool for handling authentication, changing passwords,
	and similar tasks which nicely complements BusyBox.
    <p>

    <li><a href="http://cvs.uclinux.org/uClibc.html">uClibc</a>
	is a C library for embedded systems.  You can actually statically link
	a "Hello World" application under x86 that only takes 4k (as opposed to
	200k under GNU libc).  It can do dynamic linking too and works nicely with
	BusyBox to create very small embedded systems.
    <p>

    <li> <a href="http://opensource.lineo.com/software.html">Other cool embedded software</a>.
    <p>

    <li> <a href="http://opensource.lineo.com/">opensource.lineo.com</a>.
    <p>

    <li> <A HREF="http://www.lineo.com/">Lineo</A> is sponsoring BusyBox development.
    <p>

</ul>


<!-- Begin Projects section -->

<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
    <A NAME="projects"><BIG><B>
    Products/Projects Using BusyBox
    </B></BIG></A>
</TD></TR>
<TR><TD BGCOLOR="#eeeee0">

<p> I know of the following products and/or projects that use BusyBox --
listed in the order I happen to add them to the web page:

<ul>
    <li> <a href="http://www.lineo.com/products/embedix_linux/">Lineo Embedix Linux</a>
    <li> <a href="http://cvs.debian.org/boot-floppies/">Debian installer (boot floppies) project</a>
    <li> <a href="http://www.linuxrouter.org/">Linux Router Project </a>
    <li> <a href="http://linux-embedded.org/">LEM</a>
    <li> <a href="http://www.toms.net/rb/">tomsrtbt</a>
    <li> <a href="http://www.stormix.com/">Stormix Installer</a>
    <li> <a href="http://www.emacinc.com/linux2_sbc.htm">EMAC Linux 2.0 SBC</a>
    <li> <a href="http://www.trinux.org/">Trinux</a>
    <li> <a href="http://oddas.sourceforge.net/">ODDAS project</a>
    <li> <a href="http://www.kerbango.com/">The Kerbango Internet Radio</a>
    <li> <a href="http://www.linuxmagic.com/vpn/">LinuxMagic VPN Firewall</a>
    <li> <a href="http://byld.sourceforge.net/">Build Your Linux Disk</a>
    <li> <a href="http://homepages.ihug.co.nz/~ichi/baslinux.html">BasicLinux</a>
    <li> <a href="http://ibiblio.org/pub/Linux/system/recovery">Zdisk</a>
    <li> <a href="http://www.adtran.com">AdTran - VPN/firewall VPN Linux Distribution</a> 
    <li> <a href="http://mkcdrec.ota.be/">mkCDrec - make CD-ROM recovery</a>
    <li> <a href="http://recycle.lbl.gov/~ldoolitt/bse/">Linux on nanoEngine</a>
    <li> <a href="http://www.zelow.no/floppyfw/"> Floppyfw</a>

    <li> <a href="http://midori.transmeta.com/"> Midori Linux</a> - <a href=
	"http://www.wired.com/news/technology/0,1282,42399,00.html"> Article on
	Midori Linux</a> on <a href= "http://www.wired.com"> Wired</a>. Quote from
	Erik at the top of <a href=
	"http://www.wired.com/news/technology/0,1282,42399-2,00.html"> this
	page</a>

</ul>

<p> Do you use BusyBox?  I'd love to know about it and I'd be happy to link to
you.



<!-- End of Table -->

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



<!-- 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@lineo.com">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>


</CENTER>
</BODY>
</HTML>

