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

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, 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.

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

Getting help:

When you find you need help, you can check out the BusyBox mailing list
archives at http://opensource.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://opensource.lineo.com/cgi-bin/cvsweb/busybox/

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

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

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

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

<blatant plug>
Many thanks to go to Lineo for paying me to work on busybox. 
</blatant plug>

