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

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

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>

