Please see the LICENSE file for copyright information.
    
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.

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, /etc, and a kernel.

BusyBox was originally written to support the Debian Rescue/Install disks, but
it also makes an excellent environment for any small or embedded system.

As of version 0.20 there is now a version number. : ) Also as of version 0.20,
BusyBox is now modularized to easily allow you to build only the components you
need, thereby reducing binary size. To turn off unwanted BusyBox components,
simply edit the file "Config.h" and comment out the components you do not need
using C++ style (//) comments.

After the build is complete, a busybox.links file is generated.  This is
used by 'make install' to create symlinks to the busybox binary for all
compiled in functions.  By default, 'make install' will place the symlink
forest into `pwd`/_install unless you have defined the PREFIX environment
variable (i.e., 'make PREFIX=/tmp/foo install')

----------------
    
Supported architectures:

   Busybox in general will build on any architecture supported by gcc.  It has
   a few specialized features added for __sparc__ and __alpha__.  insmod
   functionality is currently limited to x86, ARM, SH3/4, powerpc, m68k, 
   and MIPS.

Supported libcs:

   glibc-2.0.x, glibc-2.1.x, Linux-libc5, uClibc.  People are looking at
   newlib and diet-libc, but consider them unsupported, untested, or worse.

Supported kernels:

   Full functionality requires Linux 2.0.x, 2.2.x, or 2.4.x.  A large fraction
   of the code should run on just about anything.

----------------

Shells:

lash is the very smallest shell (adds just 10k) and it is quite usable as 
a command prompt, but it is not suitable for any but the most trivial
scripting (such as an initrd that calls insmod a few times) since it does
not understand Bourne shell grammer.  It does handle pipes, redirects, and
job control though.  Adding in command editing makes it a very nice
lightweight command prompt.

hush is also quite small (just 18k) and it has very complete Bourne shell
grammer.  It handles if/then/else/fi just fine, but doesn't handle loops
like for/do/done or case/esac and such.  It also currently has a problem
with job control.  Using hush is not yet recommended.

msh: The minix shell (adds just 30k) is quite complete and handles things
like for/do/done, case/esac and all the things you expect a Bourne shell to
do.  It is not always pedantically correct about Bourne shell grammer (try
running the shell testscript "tests/sh.testcases" on it and compare vs bash)
but for most things it works quite well.  It also uses only vfork, so it can
be used on uClinux systems.  This was only recently added, so there is still
room to shrink it further...

ash: This adds about 60k in the default configuration and is the most
complete and most pedantically correct shell included with busybox.  This
shell was also recently added, and several people (mainly Vladimir and Erik)
have been working on it.  There are a number of configurable things at the
top of ash.c as well, so check those out if you want to tweak things.

----------------

Getting help:

When you find you need help, you can check out the BusyBox mailing list
archives at http://oss.lineo.com/lists/busybox/ or even join
the mailing list if you are interested.

----------------

Bugs:

If you find bugs, please submit a bug report.  Full instructions on how to
report a bug are found at http://bugs.lineo.com/Reporting.html.

For the impatient: To submit a bug, simply send an email describing the problem
to submit@bugs.lineo.com.  Bug reports should look something like this:

    To: submit@bugs.lineo.com
    From: diligent@testing.linux.org
    Subject: /bin/true doesn't work

    Package: busybox
    Version: 0.51

    When I invoke '/bin/true' it doesn't work.  I expected it to return 
    a "0" but it returned a "1" instead.  Here is the transcript:
	$ /bin/true ; echo $?
	1
    With GNU /bin/true, I get the following output:
	$ /bin/true ; echo $?
	0
    I am using Debian 2.2r2, kernel version 2.2.18, and the latest
    uClibc from CVS.  Thanks for the wonderful program!
	-Diligent

Note the careful description and use of examples showing not only what BusyBox
does, but also a counter example showing what an equivalent GNU app does.  Bug
reports lacking such detail may take a _long_ time to be fixed...  Thanks for
understanding.

----------------

FTP:

Source for the latest released version can always be downloaded from 
    ftp://ftp.lineo.com/pub/busybox. 

----------------

CVS:

BusyBox now has its own publicly browsable CVS tree at:
    http://oss.lineo.com/cgi-bin/cvsweb/busybox/

Anonymous CVS access is available.  For instructions, check out:
    http://oss.lineo.com/cvs_anon.html

For those that are actively contributing there is even CVS write access:
    http://oss.lineo.com/cvs_write.html

----------------

Please feed suggestions, bug reports, insults, and bribes back to:
	Erik Andersen 
	<andersen@codepoet.org>
	<andersee@debian.org>

