Start 1.33.0 development cycle
[oweals/busybox.git] / README
diff --git a/README b/README
index 2d156e1b5291213d139ae55145ed8665a142d47b..ada5935b9a48db8192461cb9f3803aca8b7e3f82 100644 (file)
--- a/README
+++ b/README
 Please see the LICENSE file for details on copying and usage.
-    
-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 was originally written to support the Debian Rescue/Install disks, but
-it also makes an excellent environment for any small or embedded system.
-
-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.
-
-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. Run 'make config' or 'make menuconfig'
-for select the functionality that you wish to enable.
-
-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')
-
-If you wish to install hardlinks, rather than symlinks, you can use 
-'make install-hardlinks' instead.
+Please refer to the INSTALL file for instructions on how to build.
+
+What is busybox:
+
+  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 bzip2, coreutils, dhcp, diffutils, e2fsprogs,
+  file, findutils, gawk, grep, inetutils, less, modutils, net-tools, procps,
+  sed, shadow, sysklogd, sysvinit, tar, util-linux, and vim.  The utilities
+  in BusyBox often have fewer options than their full-featured cousins;
+  however, the options that are included provide the expected functionality
+  and behave very much like their larger counterparts.
+
+  BusyBox has been written with size-optimization and limited resources in
+  mind, both to produce small binaries and to reduce run-time memory usage.
+  Busybox is also extremely modular so you can easily include or exclude
+  commands (or features) at compile time.  This makes it easy to customize
+  embedded systems; to create a working system, just add /dev, /etc, and a
+  Linux kernel.  Busybox (usually together with uClibc) has also been used as
+  a component of "thin client" desktop systems, live-CD distributions, rescue
+  disks, installers, and so on.
+
+  BusyBox provides a fairly complete POSIX environment for any small system,
+  both embedded environments and more full featured systems concerned about
+  space.  Busybox is slowly working towards implementing the full Single Unix
+  Specification V3 (http://www.opengroup.org/onlinepubs/009695399/), but isn't
+  there yet (and for size reasons will probably support at most UTF-8 for
+  internationalization).  We are also interested in passing the Linux Test
+  Project (http://ltp.sourceforge.net).
 
 ----------------
-    
-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, 
-   MIPS, and v850e.
+Using busybox:
 
-Supported libcs:
+  BusyBox is extremely configurable.  This allows you to include only the
+  components and options you need, thereby reducing binary size.  Run 'make
+  config' or 'make menuconfig' to select the functionality that you wish to
+  enable.  (See 'make help' for more commands.)
 
-   glibc-2.0.x, glibc-2.1.x, glibc-2.2.x, glibc-2.3.x, uClibc.  People
-   are looking at newlib and diet-libc, but consider them unsupported,
-   untested, or worse.  Linux-libc5 is no longer supported -- you
-   should probably use uClibc instead if you want a small C library.
+  The behavior of busybox is determined by the name it's called under: as
+  "cp" it behaves like cp, as "sed" it behaves like sed, and so on.  Called
+  as "busybox" it takes the second argument as the name of the applet to
+  run (I.E. "./busybox ls -l /proc").
 
-Supported kernels:
+  The "standalone shell" mode is an easy way to try out busybox; this is a
+  command shell that calls the built-in applets without needing them to be
+  installed in the path.  (Note that this requires /proc to be mounted, if
+  testing from a boot floppy or in a chroot environment.)
 
-   Full functionality requires Linux 2.2.x or better.  A large fraction of the
-   code should run on just about anything.  While the current code is fairly
-   Linux specific, it should be fairly easy to port the majority of the code
-   to, say, FreeBSD or Solaris, or MacOsX, or even Windows (if you are into that
-   sortof thing).
+  The build automatically generates a file "busybox.links", which is used by
+  'make install' to create symlinks to the BusyBox binary for all compiled in
+  commands.  This uses the CONFIG_PREFIX environment variable to specify
+  where to install, and installs hardlinks or symlinks depending
+  on the configuration preferences.  (You can also manually run
+  the install script at "applets/install.sh").
+
+----------------
+
+Downloading the current source code:
+
+  Source for the latest released version, as well as daily snapshots, can always
+  be downloaded from
+
+    http://busybox.net/downloads/
+
+  You can browse the up to the minute source code and change history online.
+
+    http://git.busybox.net/busybox/
+
+  Anonymous GIT access is available.  For instructions, check out:
+
+    http://www.busybox.net/source.html
+
+  For those that are actively contributing and would like to check files in,
+  see:
+
+    http://busybox.net/developer.html
+
+  The developers also have a bug and patch tracking system
+  (https://bugs.busybox.net) although posting a bug/patch to the mailing list
+  is generally a faster way of getting it fixed, and the complete archive of
+  what happened is the git changelog.
+
+  Note: if you want to compile busybox in a busybox environment you must
+  select CONFIG_DESKTOP.
 
 ----------------
 
 Getting help:
 
-When you find you need help, you can check out the BusyBox mailing list
-archives at http://busybox.net/lists/busybox/ or even join
-the mailing list if you are interested.
+  when you find you need help, you can check out the busybox mailing list
+  archives at http://busybox.net/lists/busybox/ or even join
+  the mailing list if you are interested.
 
 ----------------
 
 Bugs:
 
-If you find bugs, please submit a detailed bug report to the busybox mailing
-list at busybox@busybox.net.  A well-written bug report should include a
-transcript of a shell session that demonstrates the bad behavior and enables
-anyone else to duplicate the bug on their own machine. The following is such 
-an example:
+  if you find bugs, please submit a detailed bug report to the busybox mailing
+  list at busybox@busybox.net.  a well-written bug report should include a
+  transcript of a shell session that demonstrates the bad behavior and enables
+  anyone else to duplicate the bug on their own machine. the following is such
+  an example:
 
-    To: busybox@busybox.net
-    From: diligent@testing.linux.org
-    Subject: /bin/date doesn't work
+    to: busybox@busybox.net
+    from: diligent@testing.linux.org
+    subject: /bin/date doesn't work
 
-    Package: busybox
-    Version: 1.00
+    package: busybox
+    version: 1.00
 
-    When I execute Busybox 'date' it produces unexpected results.
-    With GNU date I get the following output:
+    when i execute busybox 'date' it produces unexpected results.
+    with gnu date i get the following output:
 
        $ date
-       Wed Mar 21 14:19:41 MST 2001
+       fri oct  8 14:19:41 mdt 2004
 
-    But when I use BusyBox date I get this instead:
+    but when i use busybox date i get this instead:
 
        $ date
-       llegal instruction
+       illegal instruction
 
-    I am using Debian unstable, kernel version 2.4.19-rmk1 on an Netwinder, 
-    and the latest uClibc from CVS.  Thanks for the wonderful program!
+    i am using debian unstable, kernel version 2.4.25-vrs2 on a netwinder,
+    and the latest uclibc from cvs.
 
-       -Diligent
+       -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 never be fixed...  Thanks for understanding.
+  note the careful description and use of examples showing not only what
+  busybox does, but also a counter example showing what an equivalent app
+  does (or pointing to the text of a relevant standard).  Bug reports lacking
+  such detail may never be fixed...  Thanks for understanding.
 
 ----------------
 
-FTP:
-
-Source for the latest released version, as well as daily snapshots, can always 
-be downloaded from 
-    http://busybox.net/downloads/
+Portability:
+
+  Busybox is developed and tested on Linux 2.4 and 2.6 kernels, compiled
+  with gcc (the unit-at-a-time optimizations in version 3.4 and later are
+  worth upgrading to get, but older versions should work), and linked against
+  uClibc (0.9.27 or greater) or glibc (2.2 or greater).  In such an
+  environment, the full set of busybox features should work, and if
+  anything doesn't we want to know about it so we can fix it.
+
+  There are many other environments out there, in which busybox may build
+  and run just fine.  We just don't test them.  Since busybox consists of a
+  large number of more or less independent applets, portability is a question
+  of which features work where.  Some busybox applets (such as cat and rm) are
+  highly portable and likely to work just about anywhere, while others (such as
+  insmod and losetup) require recent Linux kernels with recent C libraries.
+
+  Earlier versions of Linux and glibc may or may not work, for any given
+  configuration.  Linux 2.2 or earlier should mostly work (there's still
+  some support code in things like mount.c) but this is no longer regularly
+  tested, and inherently won't support certain features (such as long files
+  and --bind mounts).  The same is true for glibc 2.0 and 2.1: expect a higher
+  testing and debugging burden using such old infrastructure.  (The busybox
+  developers are not very interested in supporting these older versions, but
+  will probably accept small self-contained patches to fix simple problems.)
+
+  Some environments are not recommended.  Early versions of uClibc were buggy
+  and missing many features: upgrade.  Linking against libc5 or dietlibc is
+  not supported and not interesting to the busybox developers.  (The first is
+  obsolete and has no known size or feature advantages over uClibc, the second
+  has known bugs that its developers have actively refused to fix.)  Ancient
+  Linux kernels (2.0.x and earlier) are similarly uninteresting.
+
+  In theory it's possible to use Busybox under other operating systems (such as
+  MacOS X, Solaris, Cygwin, or the BSD Fork Du Jour).  This generally involves
+  a different kernel and a different C library at the same time.  While it
+  should be possible to port the majority of the code to work in one of
+  these environments, don't be surprised if it doesn't work out of the box.  If
+  you're into that sort of thing, start small (selecting just a few applets)
+  and work your way up.
+
+  In 2005 Shaun Jackman has ported busybox to a combination of newlib
+  and libgloss, and some of his patches have been integrated.
+
+Supported hardware:
+
+  BusyBox in general will build on any architecture supported by gcc.  We
+  support both 32 and 64 bit platforms, and both big and little endian
+  systems.
+
+  Under 2.4 Linux kernels, kernel module loading was implemented in a
+  platform-specific manner.  Busybox's insmod utility has been reported to
+  work under ARM, CRIS, H8/300, x86, ia64, x86_64, m68k, MIPS, PowerPC, S390,
+  SH3/4/5, Sparc, and v850e.  Anything else probably won't work.
+
+  The module loading mechanism for the 2.6 kernel is much more generic, and
+  we believe 2.6.x kernel module loading support should work on all
+  architectures supported by the kernel.
 
 ----------------
 
-CVS:
-
-BusyBox now has its own publicly browsable CVS tree at:
-    http://busybox.net/cgi-bin/cvsweb/busybox/
-
-Anonymous CVS access is available.  For instructions, check out:
-    http://busybox.net/cvs_anon.html
+Please feed suggestions, bug reports, insults, and bribes back to the busybox
+mailing list:
 
-For those that are actively contributing there is even CVS write access:
-    http://busybox.net/cvs_write.html
-
-----------------
+       busybox@busybox.net
 
-Please feed suggestions, bug reports, insults, and bribes back to:
-       Erik Andersen 
-       <andersen@codepoet.org>
-       <andersen@codepoet.org>
+and/or maintainer:
 
+       Denys Vlasenko
+       <vda.linux@googlemail.com>