summaryrefslogtreecommitdiff
path: root/busybox/docs
diff options
context:
space:
mode:
Diffstat (limited to 'busybox/docs')
-rw-r--r--busybox/docs/.cvsignore8
-rwxr-xr-xbusybox/docs/autodocifier.pl274
-rw-r--r--busybox/docs/busybox.net/.cvsignore2
-rw-r--r--busybox/docs/busybox.net/FAQ.html324
-rw-r--r--busybox/docs/busybox.net/about.html63
-rw-r--r--busybox/docs/busybox.net/busybox-growth.ps404
-rw-r--r--busybox/docs/busybox.net/copyright.txt29
-rw-r--r--busybox/docs/busybox.net/cvs_anon.html57
-rw-r--r--busybox/docs/busybox.net/cvs_howto.html44
-rw-r--r--busybox/docs/busybox.net/cvs_write.html32
-rw-r--r--busybox/docs/busybox.net/docs.html27
-rw-r--r--busybox/docs/busybox.net/download.html38
-rw-r--r--busybox/docs/busybox.net/footer.html20
-rw-r--r--busybox/docs/busybox.net/header.html81
-rw-r--r--busybox/docs/busybox.net/images/back.pngbin0 -> 322 bytes
-rw-r--r--busybox/docs/busybox.net/images/busybox.jpegbin0 -> 9023 bytes
-rw-r--r--busybox/docs/busybox.net/images/busybox.pngbin0 -> 34014 bytes
-rw-r--r--busybox/docs/busybox.net/images/busybox1.pngbin0 -> 10913 bytes
-rw-r--r--busybox/docs/busybox.net/images/busybox2.jpgbin0 -> 8204 bytes
-rw-r--r--busybox/docs/busybox.net/images/busybox3.jpgbin0 -> 3292 bytes
-rw-r--r--busybox/docs/busybox.net/images/dir.pngbin0 -> 309 bytes
-rw-r--r--busybox/docs/busybox.net/images/donate.pngbin0 -> 807 bytes
-rw-r--r--busybox/docs/busybox.net/images/fm.mini.pngbin0 -> 7708 bytes
-rw-r--r--busybox/docs/busybox.net/images/gfx_by_gimp.pngbin0 -> 3955 bytes
-rw-r--r--busybox/docs/busybox.net/images/ltbutton2.pngbin0 -> 6798 bytes
-rw-r--r--busybox/docs/busybox.net/images/sdsmall.pngbin0 -> 1593 bytes
-rw-r--r--busybox/docs/busybox.net/images/text.pngbin0 -> 307 bytes
-rw-r--r--busybox/docs/busybox.net/images/vh40.gifbin0 -> 906 bytes
-rw-r--r--busybox/docs/busybox.net/images/written.in.vi.pngbin0 -> 4394 bytes
-rw-r--r--busybox/docs/busybox.net/index.html1
-rw-r--r--busybox/docs/busybox.net/license.html135
-rw-r--r--busybox/docs/busybox.net/lists.html45
-rw-r--r--busybox/docs/busybox.net/news.html52
-rw-r--r--busybox/docs/busybox.net/oldnews.html1060
-rw-r--r--busybox/docs/busybox.net/products.html166
-rw-r--r--busybox/docs/busybox.net/screenshot.html57
-rw-r--r--busybox/docs/busybox.net/shame.html77
-rw-r--r--busybox/docs/busybox_footer.pod258
-rw-r--r--busybox/docs/busybox_header.pod111
-rw-r--r--busybox/docs/contributing.txt449
-rw-r--r--busybox/docs/new-applet-HOWTO.txt163
-rw-r--r--busybox/docs/style-guide.txt680
42 files changed, 4657 insertions, 0 deletions
diff --git a/busybox/docs/.cvsignore b/busybox/docs/.cvsignore
new file mode 100644
index 0000000..ec9e94b
--- /dev/null
+++ b/busybox/docs/.cvsignore
@@ -0,0 +1,8 @@
+BusyBox.txt
+BusyBox.1
+BusyBox.html
+busybox.txt
+busybox.ps
+busybox.pdf
+busybox
+busybox.pod
diff --git a/busybox/docs/autodocifier.pl b/busybox/docs/autodocifier.pl
new file mode 100755
index 0000000..eee67cf
--- /dev/null
+++ b/busybox/docs/autodocifier.pl
@@ -0,0 +1,274 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Getopt::Long;
+
+# collect lines continued with a '\' into an array
+sub continuation {
+ my $fh = shift;
+ my @line;
+
+ while (<$fh>) {
+ my $s = $_;
+ $s =~ s/\\\s*$//;
+ #$s =~ s/#.*$//;
+ push @line, $s;
+ last unless (/\\\s*$/);
+ }
+ return @line;
+}
+
+# regex && eval away unwanted strings from documentation
+sub beautify {
+ my $text = shift;
+ $text =~ s/USAGE_NOT\w+\(.*?"\s*\)//sxg;
+ $text =~ s/USAGE_\w+\(\s*?(.*?)"\s*\)/$1"/sxg;
+ $text =~ s/"\s*"//sg;
+ my @line = split("\n", $text);
+ $text = join('',
+ map {
+ s/^\s*"//;
+ s/"\s*$//;
+ s/%/%%/g;
+ s/\$/\\\$/g;
+ eval qq[ sprintf(qq{$_}) ]
+ } @line
+ );
+ return $text;
+}
+
+# generate POD for an applet
+sub pod_for_usage {
+ my $name = shift;
+ my $usage = shift;
+
+ # Sigh. Fixup the known odd-name applets.
+ $name =~ s/dpkg_deb/dpkg-deb/g;
+ $name =~ s/fsck_minix/fsck.minix/g;
+ $name =~ s/mkfs_minix/mkfs.minix/g;
+ $name =~ s/run_parts/run-parts/g;
+ $name =~ s/start_stop_daemon/start-stop-daemon/g;
+
+ # make options bold
+ my $trivial = $usage->{trivial};
+ $trivial =~ s/(?<!\w)(-\w+)/B<$1>/sxg;
+ my @f0 =
+ map { $_ !~ /^\s/ && s/(?<!\w)(-\w+)/B<$1>/g; $_ }
+ split("\n", $usage->{full});
+
+ # add "\n" prior to certain lines to make indented
+ # lines look right
+ my @f1;
+ my $len = @f0;
+ for (my $i = 0; $i < $len; $i++) {
+ push @f1, $f0[$i];
+ if (($i+1) != $len && $f0[$i] !~ /^\s/ && $f0[$i+1] =~ /^\s/) {
+ next if ($f0[$i] =~ /^$/);
+ push(@f1, "") unless ($f0[$i+1] =~ /^\s*$/s);
+ }
+ }
+ my $full = join("\n", @f1);
+
+ # prepare notes if they exist
+ my $notes = (defined $usage->{notes})
+ ? "$usage->{notes}\n\n"
+ : "";
+
+ # prepare examples if they exist
+ my $example = (defined $usage->{example})
+ ?
+ "Example:\n\n" .
+ join ("\n",
+ map { "\t$_" }
+ split("\n", $usage->{example})) . "\n\n"
+ : "";
+
+ return
+ "=item B<$name>".
+ "\n\n$name $trivial\n\n".
+ "$full\n\n" .
+ "$notes" .
+ "$example" .
+ "-------------------------------".
+ "\n\n"
+ ;
+}
+
+# the keys are applet names, and
+# the values will contain hashrefs of the form:
+#
+# {
+# trivial => "...",
+# full => "...",
+# notes => "...",
+# example => "...",
+# }
+my %docs;
+
+
+# get command-line options
+
+my %opt;
+
+GetOptions(
+ \%opt,
+ "help|h",
+ "pod|p",
+ "verbose|v",
+);
+
+if (defined $opt{help}) {
+ print
+ "$0 [OPTION]... [FILE]...\n",
+ "\t--help\n",
+ "\t--pod\n",
+ "\t--verbose\n",
+ ;
+ exit 1;
+}
+
+
+# collect documenation into %docs
+
+foreach (@ARGV) {
+ open(USAGE, $_) || die("$0: $_: $!");
+ my $fh = *USAGE;
+ my ($applet, $type, @line);
+ while (<$fh>) {
+ if (/^#define (\w+)_(\w+)_usage/) {
+ $applet = $1;
+ $type = $2;
+ @line = continuation($fh);
+ my $doc = $docs{$applet} ||= { };
+ my $text = join("\n", @line);
+ $doc->{$type} = beautify($text);
+ }
+ }
+}
+
+
+# generate structured documentation
+
+my $generator = \&pod_for_usage;
+foreach my $applet (sort keys %docs) {
+ print $generator->($applet, $docs{$applet});
+}
+
+exit 0;
+
+__END__
+
+=head1 NAME
+
+autodocifier.pl - generate docs for busybox based on usage.h
+
+=head1 SYNOPSIS
+
+autodocifier.pl [OPTION]... [FILE]...
+
+Example:
+
+ ( cat docs/busybox_header.pod; \
+ docs/autodocifier.pl usage.h; \
+ cat docs/busybox_footer.pod ) > docs/busybox.pod
+
+=head1 DESCRIPTION
+
+The purpose of this script is to automagically generate
+documentation for busybox using its usage.h as the original source
+for content. It used to be that same content has to be duplicated
+in 3 places in slightly different formats -- F<usage.h>,
+F<docs/busybox.pod>. This was tedious and error-prone, so it was
+decided that F<usage.h> would contain all the text in a
+machine-readable form, and scripts could be used to transform this
+text into other forms if necessary.
+
+F<autodocifier.pl> is one such script. It is based on a script by
+Erik Andersen <andersen@codepoet.org> which was in turn based on a
+script by Mark Whitley <markw@codepoet.org>
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<--help>
+
+This displays the help message.
+
+=item B<--pod>
+
+Generate POD (this is the default)
+
+=item B<--verbose>
+
+Be verbose (not implemented)
+
+=back
+
+=head1 FORMAT
+
+The following is an example of some data this script might parse.
+
+ #define length_trivial_usage \
+ "STRING"
+ #define length_full_usage \
+ "Prints out the length of the specified STRING."
+ #define length_example_usage \
+ "$ length Hello\n" \
+ "5\n"
+
+Each entry is a cpp macro that defines a string. The macros are
+named systematically in the form:
+
+ $name_$type_usage
+
+$name is the name of the applet. $type can be "trivial", "full", "notes",
+or "example". Every documentation macro must end with "_usage".
+
+The definition of the types is as follows:
+
+=over 4
+
+=item B<trivial>
+
+This should be a brief, one-line description of parameters that
+the command expects. This will be displayed when B<-h> is issued to
+a command. I<REQUIRED>
+
+=item B<full>
+
+This should contain descriptions of each option. This will also
+be displayed along with the trivial help if CONFIG_FEATURE_TRIVIAL_HELP
+is disabled. I<REQUIRED>
+
+=item B<notes>
+
+This is documentation that is intended to go in the POD or SGML, but
+not be printed when a B<-h> is given to a command. To see an example
+of notes being used, see init_notes_usage in F<usage.h>. I<OPTIONAL>
+
+=item B<example>
+
+This should be an example of how the command is actually used.
+This will not be printed when a B<-h> is given to a command -- it
+will only be included in the POD or SGML documentation. I<OPTIONAL>
+
+=back
+
+=head1 FILES
+
+F<usage.h>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2001 John BEPPU. All rights reserved. This program is
+free software; you can redistribute it and/or modify it under the same
+terms as Perl itself.
+
+=head1 AUTHOR
+
+John BEPPU <b@ax9.org>
+
+=cut
+
+# $Id: autodocifier.pl,v 1.26 2004/04/06 15:26:25 andersen Exp $
diff --git a/busybox/docs/busybox.net/.cvsignore b/busybox/docs/busybox.net/.cvsignore
new file mode 100644
index 0000000..393b002
--- /dev/null
+++ b/busybox/docs/busybox.net/.cvsignore
@@ -0,0 +1,2 @@
+BusyBox.html
+busybox.tar.gz
diff --git a/busybox/docs/busybox.net/FAQ.html b/busybox/docs/busybox.net/FAQ.html
new file mode 100644
index 0000000..a9324ae
--- /dev/null
+++ b/busybox/docs/busybox.net/FAQ.html
@@ -0,0 +1,324 @@
+<!--#include file="header.html" -->
+
+
+<h3>Frequently Asked Questions</h3>
+
+This is a collection of some of the more frequently asked questions
+about BusyBox. Some of the questions even have answers. If you
+have additions to this FAQ document, we would love to add them,
+
+<ol>
+<li><a href="#kernel">Which Linux kernel versions are supported?</a>
+<li><a href="#arch">Which architectures does BusyBox run on?</a>
+<li><a href="#libc">Which C libraries are supported?</a>
+<li><a href="#commercial">Can I include BusyBox as part of the software on my device?</a>
+<li><a href="#bugs">I think I found a bug in BusyBox! What should I do?!</a>
+<li><a href="#job_control">Why do I keep getting "sh: can't access tty; job control
+ turned off" errors? Why doesn't Control-C work within my shell?</a>
+<li><a href="#demanding">I demand that you to add &lt;favorite feature&gt; right now! How come
+ you don't answer all my questions on the mailing list instantly? I demand
+ that you help me with all of my problems <em>Right Now</em>!</a>
+<li><a href="#getting_started">How can I get started using BusyBox?</a>
+<li><a href="#helpme">I need help with BusyBox! What should I do?</a>
+<li><a href="#contracts">I need you to add &lt;favorite feature&gt;! Are the BusyBox developers willing to
+ be paid in order to fix bugs or add in &lt;favorite feature&gt;? Are you willing to provide
+ support contracts?</a>
+<li><a href="#support">I think you guys are great and I want to help support your work!</a>
+
+
+</ol>
+
+
+<hr />
+<p>
+<h2><a name="kernel">Which Linux kernel versions are supported?</a></h2>
+<p>
+
+
+ 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 support, say, FreeBSD or Solaris, or Mac OS X, or even Windows (if you
+ are into that sort of thing).
+
+
+<hr />
+<p>
+<h2><a name="arch">Which architectures does BusyBox run on?</a></h2>
+<p>
+
+
+ BusyBox in general will build on any architecture supported by gcc.
+ Kernel module loading for 2.2 and 2.4 Linux kernels is currently
+ limited to ARM, CRIS, H8/300, x86, ia64, x86_64, m68k, MIPS, PowerPC,
+ S390, SH3/4/5, Sparc, v850e, and x86_64 for 2.4.x kernels.
+
+ With 2.6.x kernels, module loading support should work on all architectures.
+
+
+<hr />
+<p>
+<h2><a name="libc">Which C libraries are supported?</a></h2>
+<p>
+
+
+ uClibc and glibc are supported. People have been looking at newlib and
+ dietlibc, but they are currently considered unsupported, untested, or
+ worse. Linux-libc5 is no longer supported. If you require a small C
+ library, you should probably use uClibc.
+
+
+<hr />
+<p>
+<h2><a name="commercial">Can I include BusyBox as part of the software on my device?</h2>
+
+ Yes. As long as you <a href="http://busybox.net/license.html">fully comply
+ with the generous terms of the GPL BusyBox license</a> you can ship BusyBox
+ as part of the software on your device.
+
+ <a href="#support">Please consider sharing some of the money you make.</a>
+
+
+<hr />
+<p>
+<h2><a name="bugs">I think I found a bug in BusyBox! What should I do?</h2>
+<p>
+
+ If you find a problem with BusyBox, please submit a detailed bug report to
+ the BusyBox mailing list at <a href="mailto:busybox@mail.busybox.net">
+ busybox@mail.busybox.net</a>. Please do not send private email to Erik
+ (the maintainer of BusyBox) asking for private help unless you are planning
+ on paying for consulting services. When we answer questions on the BusyBox
+ mailing list, it helps everyone, while private answers help only you...
+
+ <p>
+
+ If you find bugs, please submit a detailed bug report to the BusyBox mailing
+ list at busybox@mail.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:
+
+<pre>
+ To: busybox@mail.busybox.net
+ From: diligent@testing.linux.org
+ Subject: /bin/date doesn't work
+
+ Package: BusyBox
+ Version: 1.00
+
+ When I execute BusyBox 'date' it produces unexpected results.
+ With GNU date I get the following output:
+
+ $ date
+ Fri Oct 8 14:19:41 MDT 2004
+
+ But when I use BusyBox date I get this instead:
+
+ $ date
+ illegal instruction
+
+ I am using Debian unstable, kernel version 2.4.27 on a x86 system,
+ and the latest uClibc from CVS. Thanks for the wonderful program!
+
+ -Diligent
+</pre>
+
+ 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 proper detail may never be fixed... Thanks for understanding.
+
+<hr />
+<p>
+<h2><a name="job_control">Why do I keep getting "sh: can't access tty; job control
+ turned off" errors? Why doesn't Control-C work within my shell?</a></h2>
+<p>
+
+ Job control will be turned off since your shell can not obtain a controlling
+ terminal. This typically happens when you run your shell on /dev/console.
+ The kernel will not provide a controlling terminal on the /dev/console
+ device. Your should run your shell on a normal tty such as tty1 or ttyS0
+ and everything will work perfectly. If you <em>REALLY</em> want your shell
+ to run on /dev/console, then you can hack your kernel (if you are into that
+ sortof thing) by changing drivers/char/tty_io.c to change the lines where
+ it sets "noctty = 1;" to instead set it to "0". I recommend you instead
+ run your shell on a real console...
+
+
+<hr />
+<p>
+<h2><a name="getting_started">How can I get started using BusyBox?</a></h2>
+<p>
+
+ An easy method to build your own basic BusyBox based system, is to
+ follow these simple steps:
+ <ul>
+ <li> Point your web browser <a href="/cgi-bin/cvsweb/buildroot/">here</a>
+ <li> Click on "Download tarball"
+ <li> Unpack the tarball on your Linux system somewhere
+ <li> run 'make' and configure things to taste.
+ <li> run 'unset CC'. Some Linux systems (i.e. Gentoo) set 'CC'
+ in the system environment which messes up cross compiles.
+ <li> run 'make'
+ <li> go have lunch, drink a pop, call a friend, play a video game, etc
+ till it finishes downloading software and compiling things.
+ <li> You should now have a shiny new BusyBox based system.
+ </ul>
+
+
+<hr />
+<p>
+<h2><a name="demanding">I demand that you to add &lt;favorite feature&gt; right now! How come
+ you don't answer all my questions on the mailing list instantly? I demand
+ that you help me with all of my problems <em>Right Now</em>!</a></h2>
+<p>
+
+ You have not paid us a single cent and yet you still have the product of
+ many years of our work. We are not your slaves! We work on BusyBox
+ because we find it useful and interesting. If you go off flaming us, we
+ will ignore you.
+
+
+<hr />
+<p>
+<h2><a name="helpme">I need help with BusyBox! What should I do?</a></h2>
+<p>
+
+ If you find that you need help with BusyBox, you can ask for help on the
+ BusyBox mailing list at busybox@mail.busybox.net. In addition to the BusyBox
+ mailing list, Erik (andersee), Manuel (mjn3) and others are known to hang out
+ on the uClibc IRC channel: #uclibc on irc.freenode.net.
+
+ <p>
+
+ <b>Please do not send private email to Erik, Manuel, or the other BusyBox
+ contributors asking for private help unless you are planning on paying for
+ consulting services.</b>
+
+ <p>
+
+ When we answer questions on the BusyBox mailing list, it helps everyone
+ since people with similar problems in the future will be able to get help
+ by searching the mailing list archives. Private help is reserved as a paid
+ service. If you need to use private communication, or if you are serious
+ about getting timely assistance with BusyBox, you should seriously consider
+ paying for consulting services.
+
+ <p>
+
+
+
+<hr />
+<p>
+<h2><a name="contracts">I need you to add &lt;favorite feature&gt;! Are the BusyBox
+ developers willing to be paid in order to fix bugs or add in &lt;favorite feature&gt;?
+ Are you willing to provide support contracts?</a></h2>
+<p>
+
+ Sure! Now you have our attention! What you should do is contact <a
+ href="mailto:andersen@codepoet.org">Erik Andersen</a> of <a
+ href="http://codepoet-consulting.com/">CodePoet Consulting</a> to bid
+ on your project. If Erik is too busy to personally add your feature, there
+ are many other active BusyBox contributors who will almost certainly be able
+ to help you out. Erik can contact them privatly, and may even let you to
+ post your request for services on the mailing list.
+
+
+<hr />
+<p>
+<h2><a name="support">I think you guys are great and I want to help support your work!</a></h2>
+<p>
+
+ Wow, that would be great! Erik personally pays for all the bandwidth, and
+ all servers used for busybox.net out of his own pocket. If you would like
+ to make a donation to help support BusyBox, and/or request features, you
+ can click here:
+
+ <!-- Begin PayPal Logo -->
+ <center>
+ <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
+ <input type="hidden" name="cmd" value="_xclick">
+ <input type="hidden" name="business" value="andersen@codepoet.org">
+ <input type="hidden" name="item_name" value="Support BusyBox">
+ <input type="hidden" name="image_url" value="http://codepoet-consulting.com/images/codepoet.png">
+ <input type="hidden" name="no_shipping" value="1">
+ <input type="image" src="images/donate.png" name="submit" alt="Make donation using PayPal">
+ </form>
+ </center>
+ <!-- End PayPal Logo -->
+
+ If you prefer to contact Erik directly to make a donation, donate hardware,
+ request support, etc, you can contact
+ <a href="http://codepoet-consulting.com/">CodePoet Consulting</a> here.
+ CodePoet Consulting can accept both Visa and MasterCard for those that do not
+ trust PayPal...
+
+<hr />
+
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+
+<!--#include file="footer.html" -->
+
diff --git a/busybox/docs/busybox.net/about.html b/busybox/docs/busybox.net/about.html
new file mode 100644
index 0000000..c086263
--- /dev/null
+++ b/busybox/docs/busybox.net/about.html
@@ -0,0 +1,63 @@
+<!--#include file="header.html" -->
+
+
+<!-- Begin Introduction section -->
+
+<h3>BusyBox: The Swiss Army Knife of Embedded Linux</h3>
+
+
+BusyBox combines tiny versions of many common UNIX utilities into a single
+small executable. It provides replacements for most of the utilities you
+usually find in GNU fileutils, shellutils, etc. 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 provides a fairly complete
+environment for any small or embedded system.
+
+<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 some device
+nodes in /dev, a few configuration files in /etc, and a Linux kernel.
+
+<p>
+
+BusyBox is maintained by <a href=
+"http://codepoet.org/andersen/erik/erik.html">Erik Andersen</a>, and
+licensed under the
+<a href= "http://www.gnu.org/copyleft/gpl.html">GNU GENERAL PUBLIC LICENSE</a>
+
+<p>
+<p>
+
+<h3>Sponsors</h3>
+
+Please visit our sponsors and thank them for their
+support! They have provided money for equipment and
+bandwidth. Next time you need help with a project,
+consider these fine companies!
+
+
+<ul>
+ <li><a href="http://www.penguru.net">Penguru Consulting</a><br>
+ Custom development for embedded Linux systems and multimedia platforms
+ </li>
+
+ <li><a href="http://opensource.se/">opensource.se</a><br>
+ Embedded open source consulting in Europe.
+ </li>
+
+ <li><a href="http://www.codepoet-consulting.com">Codepoet Consulting</a><br>
+ Custom Linux, embedded Linux, BusyBox, and uClibc
+ development.
+ </li>
+
+</ul>
+
+If you wish to be a sponsor, or if you have already contributed and would like
+your name added here, email <a href= "mailto:andersen@codepoet.org">Erik</a>.
+
+
+<!--#include file="footer.html" -->
diff --git a/busybox/docs/busybox.net/busybox-growth.ps b/busybox/docs/busybox.net/busybox-growth.ps
new file mode 100644
index 0000000..2379def
--- /dev/null
+++ b/busybox/docs/busybox.net/busybox-growth.ps
@@ -0,0 +1,404 @@
+%!PS-Adobe-2.0
+%%Title: busybox-growth.ps
+%%Creator: gnuplot 3.5 (pre 3.6) patchlevel beta 347
+%%CreationDate: Tue Apr 10 14:03:36 2001
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 40 554 770
+%%Orientation: Landscape
+%%Pages: (atend)
+%%EndComments
+/gnudict 120 dict def
+gnudict begin
+/Color true def
+/Solid true def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -46 def
+/dl {10 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/UL { gnulinewidth mul /userlinewidth exch def } def
+/PL { stroke userlinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+end
+%%EndProlog
+%%Page: 1 1
+gnudict begin
+gsave
+50 50 translate
+0.100 0.100 scale
+90 rotate
+0 -5040 translate
+0 setgray
+newpath
+(Helvetica) findfont 140 scalefont setfont
+1.000 UL
+LTb
+560 420 M
+63 0 V
+6409 0 R
+-63 0 V
+476 420 M
+(0) Rshow
+560 1056 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(100) Rshow
+560 1692 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(200) Rshow
+560 2328 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(300) Rshow
+560 2964 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(400) Rshow
+560 3600 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(500) Rshow
+560 4236 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(600) Rshow
+560 4872 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(700) Rshow
+1531 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(400) Cshow
+2825 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(600) Cshow
+4120 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(800) Cshow
+5414 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(1000) Cshow
+6708 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(1200) Cshow
+1.000 UL
+LTb
+560 420 M
+6472 0 V
+0 4452 V
+-6472 0 V
+560 420 L
+0 2646 M
+currentpoint gsave translate 90 rotate 0 0 M
+(tar.gz size \(Kb\)) Cshow
+grestore
+3796 140 M
+(time \(days since Jan 1, 1998\)) Cshow
+1.000 UL
+LT0
+696 420 M
+0 593 V
+1255 0 V
+0 15 V
+214 0 V
+0 6 V
+958 0 V
+0 1 V
+-84 0 V
+0 37 V
+168 0 V
+0 262 V
+13 0 V
+0 56 V
+91 0 V
+0 33 V
+6 0 V
+0 1 V
+19 0 V
+0 11 V
+20 0 V
+0 13 V
+32 0 V
+0 104 V
+52 0 V
+0 27 V
+65 0 V
+0 15 V
+39 0 V
+0 126 V
+174 0 V
+0 103 V
+52 0 V
+0 49 V
+175 0 V
+0 56 V
+433 0 V
+0 661 V
+415 0 V
+0 857 V
+123 0 V
+0 -291 V
+498 0 V
+0 208 V
+505 0 V
+0 66 V
+291 0 V
+0 115 V
+311 0 V
+0 449 V
+162 0 V
+0 309 V
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Helvetica
+%%Pages: 1
diff --git a/busybox/docs/busybox.net/copyright.txt b/busybox/docs/busybox.net/copyright.txt
new file mode 100644
index 0000000..528338d
--- /dev/null
+++ b/busybox/docs/busybox.net/copyright.txt
@@ -0,0 +1,29 @@
+
+The code and graphics on this website (and it's mirror sites, if any) are
+Copyright (c) 1999-2004 by Erik Andersen. All rights reserved.
+
+Documents on this Web site including their graphical elements, design, and
+layout are protected by trade dress and other laws and MAY BE COPIED OR
+IMITATED IN WHOLE OR IN PART. THIS WEBSITE IS LICENSED FREE OF CHARGE, THERE
+IS NO WARRANTY FOR THE WEBSITE TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+SHOULD THIS WEBSITE PROVE DEFECTIVE, YOU MAY ASSUME THAT SOMEONE MIGHT GET
+AROUND TO SERVICING, REPAIRING OR CORRECTING IT SOMETIME WHEN THEY HAVE NOTHING
+BETTER TO DO. REGARDLESS, YOU GET TO KEEP BOTH PIECES.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
+COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THIS
+WEBSITE AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+INABILITY TO USE THIS WEBSITE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
+LOSS OF HAIR, LOSS OF LIFE, LOSS OF MEMORY, LOSS OF YOUR CARKEYS, MISPLACEMENT
+OF YOUR PAYCHECK, OR COMMANDER DATA BEING RENDERED UNABLE TO ASSIST THE
+STARFLEET OFFICERS ABORD THE STARSHIP ENTERPRISE TO RECALIBRATE THE MAIN
+DEFLECTOR ARRAY, LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
+WEBSITE TO OPERATE WITH YOUR WEBBROWSER), EVEN IF SUCH HOLDER OR OTHER PARTY
+HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+You have been warned.
+
+You can contact the webmaster at <andersen@codepoet.org> if you have some sort
+of problem with this.
+
diff --git a/busybox/docs/busybox.net/cvs_anon.html b/busybox/docs/busybox.net/cvs_anon.html
new file mode 100644
index 0000000..f823d05
--- /dev/null
+++ b/busybox/docs/busybox.net/cvs_anon.html
@@ -0,0 +1,57 @@
+<!--#include file="header.html" -->
+
+
+<h3>Anonymous CVS</h3>
+
+We allow anonymous (read-only) CVS access to everyone. The first command you
+need to run for anonymous CVS access is:
+<pre>
+cvs -d:pserver:anonymous@busybox.net:/var/cvs login</pre>
+<p>
+CVS will prompt you for a password. Just press the Enter key (there is no
+password for anonymous access). This step only needs to be done once, the first
+time you attempt to access CVS.
+<p>
+Once the login is complete, you can then check the list of available
+CVS modules by running the following command (all on one line):
+<pre>
+cvs -z3 -d:pserver:anonymous@busybox.net:/var/cvs co -c </pre>
+
+<p>
+If you wish, you can then check out a local copy of any of the
+available modules. The following is an example of how to grab
+a copy of busybox and tinylogin:
+<pre>
+ cvs -z3 -d:pserver:anonymous@busybox.net:/var/cvs co -P busybox tinylogin</pre>
+This will create a directory called <b>busybox</b> and a directory called
+<b>tinylogin</b> in the current directory. These directories contain the
+latest and greatest source code for busybox and tinylogin.
+
+<p>
+If you are not already familiar with using CVS, I recommend you visit
+this quick <a href="/cvs_howto.html">Introduction to CVS</a>.
+
+<p>
+I usually create a ~/.cvsrc file with the following things in it, and I
+recommend you should use the same:
+<pre>
+ -z3
+ update -dP
+ rdiff -u
+ diff -ubBwpN
+ checkout -P</pre>
+
+<p>
+Once you've checked out a copy of the source tree, you can update your
+source tree at any time so it is in sync with the latest and greatest by
+running the command:
+<pre>
+cvs update</pre>
+
+Because you've only been granted anonymous access to the tree, you won't be
+able to commit any changes. Changes can be submitted for inclusion by posting
+them to the appropriate mailing list. For those that are actively contributing
+<a href="cvs_write.html">CVS write access</a> can be made available.
+
+<!--#include file="footer.html" -->
+
diff --git a/busybox/docs/busybox.net/cvs_howto.html b/busybox/docs/busybox.net/cvs_howto.html
new file mode 100644
index 0000000..837d6cd
--- /dev/null
+++ b/busybox/docs/busybox.net/cvs_howto.html
@@ -0,0 +1,44 @@
+<!--#include file="header.html" -->
+
+
+<h3>How to use CVS</h3>
+
+
+If you want to know all the gory details, you will want to visit
+<a href="http://www.cvshome.org/">the CVS main web page</a>.<p>
+For the impatient, the following is probably about all you need to know:
+<p>
+
+<dl>
+ <dt><pre>cvs checkout -c</pre>
+ <dd>Will list the modules available for checkout
+ <dt><pre>cvs checkout &lt module name &gt</pre>
+ <dd>Will checkout the named module
+ <dt><pre>cvs co &lt module name &gt</pre>
+ <dd>Same thing
+ <dt><pre>cvs update</pre>
+
+ <dd>Updates your local archive so it is in sync with the repository
+ -- your local updates are left intact. Tries to merge upstream updates
+ into your local updates. You will see the following tags when it is
+ updating your local repository: C means conflict, U means update,
+ P means patched, and M means modified.
+ <dt><pre>cvs up</pre>
+ <dd>Same thing
+ <dt><pre>cvs update &lt file name &gt</pre>
+ <dd>Same thing but for just the named file(s)/directory(s).
+ <dt><pre>cvs commit</pre>
+ <dd>Will check in all your work.
+ <dt><pre>cvs add &lt file name &gt</pre>
+
+ <dd>Adds the named file/directory into CVS
+ <dt><pre>cvs remove &lt file name &gt</pre>
+ <dd>Removes the named file/directory from the upstream repository.
+ <dt><pre>cvs rm &lt file name &gt</pre>
+ <dd>Same thing
+ <dt><pre>cvs log &lt file name &gt</pre>
+</dl>
+
+
+<!--#include file="footer.html" -->
+
diff --git a/busybox/docs/busybox.net/cvs_write.html b/busybox/docs/busybox.net/cvs_write.html
new file mode 100644
index 0000000..5c882f4
--- /dev/null
+++ b/busybox/docs/busybox.net/cvs_write.html
@@ -0,0 +1,32 @@
+<!--#include file="header.html" -->
+
+
+<h3>CVS Read/Write Access</h3>
+
+If you want to be able to commit things to CVS, first contribute some
+stuff to show you are serious. Then, very nicely ask
+<a href="mailto:andersen@codepoet.org">Erik Andersen</a> if he will set you up with
+an account. To access CVS, you will want to add the following to set up your environment:
+<pre>
+$ export CVS_RSH=/usr/bin/ssh
+$ export CVSROOT='username@cvs.busybox.net:/var/cvs'</pre>
+<br>
+It goes without saying you must change <em>username</em> to your own
+username...
+<p>
+
+To obtain commit access, you will need to demonstrate you are
+serious by submitting a few good patches first. Then, you will need to
+select a user-name to use when committing stuff, and finally, you will
+need to send me the username you have selected, an ssh key, and the email
+address where you prefer email to be sent (I will forward any email sent
+to you, but not store it).
+
+<p>
+Note that if you would prefer to keep your communications with me
+private, you can encrypt your email using my
+<a href="http://www.codepoet.org/andersen/erik/gpg.asc">public key</a>.
+
+<!--#include file="footer.html" -->
+
+
diff --git a/busybox/docs/busybox.net/docs.html b/busybox/docs/busybox.net/docs.html
new file mode 100644
index 0000000..fc9ac6d
--- /dev/null
+++ b/busybox/docs/busybox.net/docs.html
@@ -0,0 +1,27 @@
+<!--#include file="header.html" -->
+
+
+<h3>Documentation</h3>
+Current documentation for BusyBox includes:
+
+<ul>
+ <li><a href=
+ "downloads/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>
+
+ <li><a href="downloads/README">README</a>. This is
+ the README file included in the busybox source
+ release.</li>
+
+ <li>If you need more help, the BusyBox <a href=
+ "lists/busybox/">mailing list</a> is a good place to
+ start.</li>
+</ul>
+
+<!--#include file="footer.html" -->
+
diff --git a/busybox/docs/busybox.net/download.html b/busybox/docs/busybox.net/download.html
new file mode 100644
index 0000000..a6a86ac
--- /dev/null
+++ b/busybox/docs/busybox.net/download.html
@@ -0,0 +1,38 @@
+<!--#include file="header.html" -->
+
+
+
+<h3>Download</h3>
+
+Source for the latest release can always be
+downloaded from <a href="downloads">http://www.busybox.net/downloads</a>.
+
+<p>
+You can also obtain <a href= "downloads/snapshots/">Daily Snapshots</a> of
+the latest stable, and the latest development CVS source trees.
+
+<p>
+BusyBox now has <b>two</b> CVS trees. The "busybox-stable" tree
+contains the older 0.60.x stable series. The "busybox" tree contains
+the latest 1.0.0-preX development version of busybox.<br>
+
+<ul>
+ <li> Click here to browse the <a href="/cgi-bin/cvsweb/busybox/">
+ CVS tree for the 1.0.0-preX development version of BusyBox</a>
+ </li>
+
+ <li>Click here to browse the <a href="/cgi-bin/cvsweb/busybox.stable/">
+ CVS tree for the stable 0.60.x version of BusyBox</a>.
+ </li>
+
+ <li>Anonymous <a href="cvs_anon.html">CVS access</a> is available.
+ </li>
+
+ <li>For those that are actively contributing there is
+ even <a href="cvs_write.html">CVS write access</a>.
+ </li>
+
+</ul>
+
+<!--#include file="footer.html" -->
+
diff --git a/busybox/docs/busybox.net/footer.html b/busybox/docs/busybox.net/footer.html
new file mode 100644
index 0000000..9756f5d
--- /dev/null
+++ b/busybox/docs/busybox.net/footer.html
@@ -0,0 +1,20 @@
+<!-- Footer -->
+
+
+ </td>
+ </tr>
+ </table>
+
+<hr />
+
+ <p>
+ <font face="arial, helvetica, sans-serif" size="-1">
+ <a HREF="/copyright.txt">Copyright &copy; 1999-2003 Erik Andersen</a>
+ <br>
+ Mail all comments, insults, suggestions and bribes to
+ <br>
+ Erik Andersen <A HREF="mailto:andersen@codepoet.org">andersen@codepoet.org</A><BR>
+ </font>
+
+ </body>
+</html>
diff --git a/busybox/docs/busybox.net/header.html b/busybox/docs/busybox.net/header.html
new file mode 100644
index 0000000..77c1418
--- /dev/null
+++ b/busybox/docs/busybox.net/header.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+"http://www.w3.org/TR/REC-html40/loose.dtd">
+
+<html>
+ <head>
+ <title>BusyBox</title>
+ <style type="text/css">
+ body {
+ background-color: #DEE2DE;
+ color: #000000;
+ }
+ :link { color: #660000 }
+ :visited { color: #660000 }
+ :active { color: #660000 }
+ td.c2 {font-family: arial, helvetica, sans-serif; font-size: 80%}
+ td.c1 {font-family: lucida, helvetica; font-size: 248%}
+ </style>
+ </head>
+
+ <body>
+ <basefont face="lucida, helvetica, arial" size="3">
+
+
+
+
+<table border="0" cellpadding="0" cellspacing="0">
+
+
+<tr>
+<td>
+ <div class="c3">
+ <table border="0" cellspacing="1" cellpadding="2">
+ <tr>
+ <td class="c1">BUSYBOX</td>
+ </tr>
+ </table>
+ </div>
+
+ <a href="/"><IMG SRC="images/busybox1.png" alt="BusyBox" border="0"></a><BR>
+</td>
+</tr>
+
+<tr>
+
+<td valign="TOP">
+ <br><a href="/about.html">About</a>
+ <br><a href="/screenshot.html">Screenshot</a>
+ <br><a href="/lists.html">Mailing Lists</a>
+ <br><a href="/news.html">Latest News</a>
+ <br><a href="/download.html">Download</a>
+ <br><a href="/FAQ.html">FAQ</a>
+ <br><a href="/cvs_anon.html">Accessing CVS</a>
+ <br><a href="/cgi-bin/cvsweb/busybox/">Browse CVS</a>
+ <br><a href="/docs.html">Documentation</a>
+ <br><a href="/products.html">Products</a>
+ <br><a href="/shame.html">Hall of Shame</a>
+ <br><a href="/license.html">License</a>
+
+ <p><b>Related Sites</b>
+ <br><a href="http://uclibc.org/">uClibc.org</a>
+ <br><a href="http://udhcp.busybox.net/">udhcp</a>
+ <br><a href="http://tinylogin.busybox.net/">tinylogin</a>
+ <br><a href="http://www.ucdot.org/">uCdot</a>
+ <br><a href="http://www.linuxdevices.com">LinuxDevices</a>
+ <br><a href="http://slashdot.org/">Slashdot</a>
+ <br><a href="http://freshmeat.net/">Freshmeat</a>
+ <br><a href="http://linuxtoday.com/">Linux Today</a>
+ <br><a href="http://lwn.net/">Linux Weekly News</a>
+ <br><a href="http://www.tldp.org/HOWTO">Linux HOWTOs</a>
+
+<!--
+ <a href="http://validator.w3.org/check/referer"><img
+ src="/images/vh40.gif" height=31 width=88
+ align=left border=0 alt="Valid HTML 4.0!"></a>
+-->
+
+</td>
+
+
+<td Valign="TOP">
+
diff --git a/busybox/docs/busybox.net/images/back.png b/busybox/docs/busybox.net/images/back.png
new file mode 100644
index 0000000..7992386
--- /dev/null
+++ b/busybox/docs/busybox.net/images/back.png
Binary files differ
diff --git a/busybox/docs/busybox.net/images/busybox.jpeg b/busybox/docs/busybox.net/images/busybox.jpeg
new file mode 100644
index 0000000..37edc96
--- /dev/null
+++ b/busybox/docs/busybox.net/images/busybox.jpeg
Binary files differ
diff --git a/busybox/docs/busybox.net/images/busybox.png b/busybox/docs/busybox.net/images/busybox.png
new file mode 100644
index 0000000..b1eb92f
--- /dev/null
+++ b/busybox/docs/busybox.net/images/busybox.png
Binary files differ
diff --git a/busybox/docs/busybox.net/images/busybox1.png b/busybox/docs/busybox.net/images/busybox1.png
new file mode 100644
index 0000000..4d3126a
--- /dev/null
+++ b/busybox/docs/busybox.net/images/busybox1.png
Binary files differ
diff --git a/busybox/docs/busybox.net/images/busybox2.jpg b/busybox/docs/busybox.net/images/busybox2.jpg
new file mode 100644
index 0000000..abf8f06
--- /dev/null
+++ b/busybox/docs/busybox.net/images/busybox2.jpg
Binary files differ
diff --git a/busybox/docs/busybox.net/images/busybox3.jpg b/busybox/docs/busybox.net/images/busybox3.jpg
new file mode 100644
index 0000000..0fab84c
--- /dev/null
+++ b/busybox/docs/busybox.net/images/busybox3.jpg
Binary files differ
diff --git a/busybox/docs/busybox.net/images/dir.png b/busybox/docs/busybox.net/images/dir.png
new file mode 100644
index 0000000..1d633ce
--- /dev/null
+++ b/busybox/docs/busybox.net/images/dir.png
Binary files differ
diff --git a/busybox/docs/busybox.net/images/donate.png b/busybox/docs/busybox.net/images/donate.png
new file mode 100644
index 0000000..b55621b
--- /dev/null
+++ b/busybox/docs/busybox.net/images/donate.png
Binary files differ
diff --git a/busybox/docs/busybox.net/images/fm.mini.png b/busybox/docs/busybox.net/images/fm.mini.png
new file mode 100644
index 0000000..c0883cd
--- /dev/null
+++ b/busybox/docs/busybox.net/images/fm.mini.png
Binary files differ
diff --git a/busybox/docs/busybox.net/images/gfx_by_gimp.png b/busybox/docs/busybox.net/images/gfx_by_gimp.png
new file mode 100644
index 0000000..d583140
--- /dev/null
+++ b/busybox/docs/busybox.net/images/gfx_by_gimp.png
Binary files differ
diff --git a/busybox/docs/busybox.net/images/ltbutton2.png b/busybox/docs/busybox.net/images/ltbutton2.png
new file mode 100644
index 0000000..9bad949
--- /dev/null
+++ b/busybox/docs/busybox.net/images/ltbutton2.png
Binary files differ
diff --git a/busybox/docs/busybox.net/images/sdsmall.png b/busybox/docs/busybox.net/images/sdsmall.png
new file mode 100644
index 0000000..b102450
--- /dev/null
+++ b/busybox/docs/busybox.net/images/sdsmall.png
Binary files differ
diff --git a/busybox/docs/busybox.net/images/text.png b/busybox/docs/busybox.net/images/text.png
new file mode 100644
index 0000000..6034f89
--- /dev/null
+++ b/busybox/docs/busybox.net/images/text.png
Binary files differ
diff --git a/busybox/docs/busybox.net/images/vh40.gif b/busybox/docs/busybox.net/images/vh40.gif
new file mode 100644
index 0000000..c5e9402
--- /dev/null
+++ b/busybox/docs/busybox.net/images/vh40.gif
Binary files differ
diff --git a/busybox/docs/busybox.net/images/written.in.vi.png b/busybox/docs/busybox.net/images/written.in.vi.png
new file mode 100644
index 0000000..84f59bc
--- /dev/null
+++ b/busybox/docs/busybox.net/images/written.in.vi.png
Binary files differ
diff --git a/busybox/docs/busybox.net/index.html b/busybox/docs/busybox.net/index.html
new file mode 100644
index 0000000..1bab6b0
--- /dev/null
+++ b/busybox/docs/busybox.net/index.html
@@ -0,0 +1 @@
+<!--#include file="news.html" -->
diff --git a/busybox/docs/busybox.net/license.html b/busybox/docs/busybox.net/license.html
new file mode 100644
index 0000000..14324f1
--- /dev/null
+++ b/busybox/docs/busybox.net/license.html
@@ -0,0 +1,135 @@
+<!--#include file="header.html" -->
+
+
+<h3>The GPL BusyBox license</h3>
+
+There has been some confusion in the past as to exactly what is
+required to safely distribute GPL'd software such as BusyBox as
+part of a product. To ensure that there is no confusion
+whatsoever, this page attempts to summarize what you should do to
+ensure you do not accidentally violate the law.
+
+<p>
+<h3>Complying with the BusyBox license is easy and completely free.</h3>
+
+U.S. and International Law protects copyright owners from the unauthorized
+reproduction, adaptation, display, distribution, etc of copyright protected
+works. Copyright violations (such as shipping BusyBox in a manner contrary to
+its license) are subject to severe penalties. The courts can award up to
+$150,000 per product shipped without even showing any actual loss by the
+copyright holder. Criminal penalties are available for intentional acts
+undertaken for purposes of "commercial advantage" or "private financial gain."
+In addition, if it comes to my attention that you are violating the BusyBox
+license, I will list you on the <a href="/shame.html">BusyBox Hall of Shame</a>
+webpage.
+
+<p>
+
+Nobody wants that to happen. Do everyone a favor and don't break the law -- if
+you use BusyBox, you <b>must comply with the BusyBox license</b>.
+
+<p>
+<h3>BusyBox is licensed under the GNU General Public License</h3>
+
+BusyBox is licensed under the GNU General Public License , which
+is generally just abbreviated as the GPL license, or
+just the GPL.
+<p>
+<a href="/products.html">Anyone thinking of shipping
+BusyBox as part of a product</a> should be familiar with the
+licensing terms under which they are allowed to use and
+distribute BusyBox. You are advised to take a look over the
+
+<ul>
+<li><a href="http://www.gnu.org/licenses/gpl.html">full text of
+the GNU General Public License</a>, and
+<li><a href="http://www.gnu.org/licenses/gpl-faq.html">
+Frequently Asked Questions about the GNU GPL</a>
+</ul>
+to be sure you (and your lawyers) fully understand them.
+
+<p>
+
+The following is a quick summary for the impatient. If you
+carefully follow these steps, it will ensure that you are 100%
+authorized to ship BusyBox with your product, and have no reason
+to worry about lawsuits or being listed on the <a
+href="/shame.html">BusyBox Hall of Shame</a> page. You will be
+able to sleep peacefully at night knowing you have fulfilled all
+your licensing obligations.
+
+<p>
+
+If you distribute a product, it should either be accompanied by
+<b>full source for all GPL'd products</b> (including BusyBox)
+and/or a <b>written offer</b> to supply the source for all
+GPL'd products for the cost of shipping and handling. The source
+has to be in its preferred machine readable form, so you cannot
+encrypt or obfuscate it. You are not required to provide full
+source for all the closed source applications that happen to be
+part of the system with BusyBox, though you can certainly do so
+if you feel like it. But providing source for the GPL licensed
+applications such as BusyBox is mandatory.
+
+<p>
+
+<b>Accompanied by source</b> generally means you distribute the full
+source code for all GPL'd products including BusyBox along with your
+product, such as by placing it somewhere on a driver CD. Full source
+code includes the BusyBox ".config" file used when your shipping BusyBox
+binary was compiled, and any and all modifications you made to the
+BusyBox source code.
+
+<p>
+
+<b>A written offer</b> generally means that somewhere in the
+documentation for your product, you write something like
+
+<blockquote>
+The GPL source code contained in this product is available as a
+free download from http://blah.blah.blah/
+</blockquote>
+Alternatively, you can offer the source code by writing
+somewhere in the documentation for your product something like
+<blockquote>
+If you would like a copy of the GPL source code contained in this
+product shipped to you on CD, please send $9.99 to &lt;address&gt;
+which covers the cost of preparing and mailing a CD to you.
+</blockquote>
+<p>
+
+Keep in mind though that if you distribute GPL'd binaries online (as is often
+done when supplying firmware updates), it is <b>highly</b> recommended that you
+make the corresponding source available online at the same place. Regardless,
+if you distribute a binary copy of BusyBox online (such as part of a firmware
+update) you <b>must</b> either make source available online (i.e.
+<b>accompanied by source</b>) and/or inform those downloading firmware updates
+of their right to obtain source (i.e. <b>a written offer</b>). Failure to do
+so is a violation of your licensing obligations.
+
+
+<p>
+
+Some people have the mistaken understanding that if they use unmodified
+GPL'd source code, they do not need to distribute anything. This belief
+is not correct, and is not supported by the
+<a href="http://www.gnu.org/licenses/gpl.html">text of GPL</a>.
+Please do re-read it -- you will find there is no such provision.
+If you distribute any GPL'd binaries, you must also make source available
+as discussed on this webpage.
+
+<p>
+<h3>A Good Example</h3>
+
+These days, <a href="http://www.linksys.com/">Linksys</a> is
+doing a good job at complying with the GPL, they get to be an
+example of how to do things right. Please take a moment and
+check out what they do with
+<a href="http://www.linksys.com/download/firmware.asp?fwid=178">
+distributing the firmware for their WRT54G Router.</a>
+Following their example would be a fine way to ensure that you
+have also fulfilled your licensing obligations.
+
+
+<!--#include file="footer.html" -->
+
diff --git a/busybox/docs/busybox.net/lists.html b/busybox/docs/busybox.net/lists.html
new file mode 100644
index 0000000..5c50c95
--- /dev/null
+++ b/busybox/docs/busybox.net/lists.html
@@ -0,0 +1,45 @@
+<!--#include file="header.html" -->
+
+
+<!-- Begin Introduction section -->
+
+<h3>Mailing List Information</h3>
+BusyBox has a <a href="/lists/busybox/">mailing list</a> for discussion and
+development. You can subscribe by visiting
+<a href="http://codepoet.org/mailman/listinfo/busybox">this page</a>.
+Only subscribers to the BusyBox mailing list are allowed to post
+to this list.
+
+<p>
+There is also a mailing list for <a href="/lists/busybox-cvs/">active developers</a>
+wishing to read the complete diff of each and every change to busybox -- not for the
+faint of heart. Active developers can subscribe by visiting
+<a href="http://codepoet.org/mailman/listinfo/busybox-cvs">this page</a>.
+The CVS server is the only one permtted to post to this list.
+
+<p>
+
+
+<h3>Search the List Archives</h3>
+Please search the mailing list archives before asking questions on the mailing
+list, since there is a good chance someone else has asked the same question
+before. Checking the archives is a great way to avoid annoying everyone on the
+list with frequently asked questions...
+<p>
+
+<center>
+<form method="GET" action="http://www.google.com/custom">
+<input type="hidden" name="domains" value="busybox.net">
+<input type="hidden" name="sitesearch" value="busybox.net">
+<input type="text" name="q" size="31" maxlength="255" value="">
+<br>
+<input type="submit" name="sa" value="search the mailing list archives">
+<br>
+<a href="http://www.google.com"><img src="http://www.google.com/logos/Logo_25wht.gif" border="0" alt="Google" height="32" width="75" align="middle"></a>
+<br>
+</form>
+</center>
+
+
+
+<!--#include file="footer.html" -->
diff --git a/busybox/docs/busybox.net/news.html b/busybox/docs/busybox.net/news.html
new file mode 100644
index 0000000..0d4c81b
--- /dev/null
+++ b/busybox/docs/busybox.net/news.html
@@ -0,0 +1,52 @@
+<!--#include file="header.html" -->
+
+
+<ul>
+
+ <li><b>13 October 2004 -- BusyBox 1.00 released</b><p>
+
+ When you take a careful look at nearly every embedded Linux device or
+ software distribution shipping today, you will find a copy of BusyBox.
+ With countless routers, set top boxes, wireless access points, PDAs, and
+ who knows what else, the future for Linux and BusyBox on embedded devices
+ is looking very bright.
+
+ <p>
+
+ It is therefore with great satisfaction that I declare each and every
+ device already shipping with BusyBox is now officially out of date.
+ The highly anticipated release of BusyBox 1.00 has arrived!
+
+ <p>
+
+ Over three years in development, BusyBox 1.00 represents a tremendous
+ improvement over the old 0.60.x stable series. Now featuring a Linux
+ KernelConf based configuration system (as used by the Linux kernel),
+ Linux 2.6 kernel support, many many new applets, and the development
+ work and testing of thousands of people from around the world.
+
+ <p>
+
+ If you are already using BusyBox, you are strongly encouraged to upgrade to
+ BusyBox 1.00. If you are considering developing an embedded Linux device
+ or software distribution, you may wish to investigate if using BusyBox is
+ right for your application. If you need help getting started using
+ BusyBox, if you wish to donate to help cover expenses, or if you find a bug
+ and need help reporting it, you are invited to visit the <a
+ href="FAQ.html">BusyBox FAQ</a>.
+
+ <p>
+
+ As usual you can <a href="downloads">download busybox here</a>.
+
+ <p>Have Fun!
+
+ <p>
+ <li><b>Old News</b><p>
+ <a href="/oldnews.html">Click here to read older news</a>
+
+
+</ul>
+
+<!--#include file="footer.html" -->
+
diff --git a/busybox/docs/busybox.net/oldnews.html b/busybox/docs/busybox.net/oldnews.html
new file mode 100644
index 0000000..83987ec
--- /dev/null
+++ b/busybox/docs/busybox.net/oldnews.html
@@ -0,0 +1,1060 @@
+<!--#include file="header.html" -->
+
+
+<ul>
+
+ <li><b>16 August 2004 -- BusyBox 1.0.0-rc3 released</b><p>
+
+ Here goes release candidate 3...
+ <p>
+ The <a href="downloads/Changelog">changelog</a> has all the details.
+ And as usual you can <a href="downloads">download busybox here</a>.
+
+ <p>Have Fun!
+
+ <p>
+ <li><b>26 July 2004 -- BusyBox 1.0.0-rc2 released</b><p>
+
+ Here goes release candidate 2...
+ <p>
+ The <a href="downloads/Changelog">changelog</a> has all the details.
+ And as usual you can <a href="downloads">download busybox here</a>.
+
+ <p>Have Fun!
+
+ <p>
+ <li><b>20 July 2004 -- BusyBox 1.0.0-rc1 released</b><p>
+
+ Here goes release candidate 1... This fixes all (most?) of the problems
+ that have turned up since -pre10. In particular, loading and unloading of
+ kernel modules with 2.6.x kernels should be working much better.
+ <p>
+
+ I <b>really</b> want to get BusyBox 1.0.0 released soon and I see no real
+ reason why the 1.0.0 release shouldn't happen with things pretty much as
+ is. BusyBox is in good shape at the moment, and it works nicely for
+ everything that I'm doing with it. And from the reports I've been getting,
+ it works nicely for what most everyone else is doing with it as well.
+ There will eventually be a 1.0.1 anyway, so we might as well get on with
+ it. No, BusyBox is not perfect. No piece of software ever is. And while
+ there is still plenty that can be done to improve things, most of that work
+ is waiting till we can get a solid 1.0.0 release out the door....
+ <p>
+
+ Please do not bother to send in patches adding cool new features at this
+ time. Only bug-fix patches will be accepted. If you have submitted a
+ bug-fixing patch to the busybox mailing list and no one has emailed you
+ explaining why your patch was rejected, it is safe to say that your patch
+ has been lost or forgotten. That happens sometimes. Please re-submit your
+ bug-fixing patch to the BusyBox mailing list, and be sure to put "[PATCH]"
+ at the beginning of the email subject line!
+
+ <p>
+ The <a href="downloads/Changelog">changelog</a> has all the details.
+ And as usual you can <a href="downloads">download busybox here</a>.
+
+ <p>Have Fun!
+
+ <p>
+ On a less happy note, My 92 year old grandmother (my dad's mom) passed away
+ yesterday (June 19th). The funeral will be Thursday in a little town about
+ 2 hours south of my home. I've checked and there is absolutely no way I
+ could be back in time for the funeral if I attend <a
+ href="http://www.linuxsymposium.org/2004/">OLS</a> and give my presentation
+ as scheduled.
+ <p>
+ As such, it is with great reluctance and sadness that I have come
+ to the conclusion I will have to make my appologies and skip OLS
+ this year.
+ <p>
+
+
+ <p>
+ <li><b>13 April 2004 -- BusyBox 1.0.0-pre10 released</b><p>
+
+ Ok, I lied. It turns out that -pre9 will not be the final BusyBox
+ pre-release. With any luck however -pre10 will be, since I <b>really</b>
+ want to get BusyBox 1.0.0 released very soon. As usual, please do not
+ bother to send in patches adding cool new features at this time. Only
+ bug-fix patches will be accepted. It would also be <b>very</b> helpful if
+ people could continue to review the BusyBox documentation and submit
+ improvements.
+
+ <p>
+ The <a href="downloads/Changelog">changelog</a> has all the details.
+ And as usual you can <a href="downloads">download busybox here</a>.
+
+ <p>Have Fun!
+ <p>
+
+
+ <p>
+ <li><b>6 April 2004 -- BusyBox 1.0.0-pre9 released</b><p>
+
+ Here goes the final BusyBox pre-release... This is your last chance for
+ bug fixes. With luck this will be released as BusyBox 1.0.0 later this
+ week. Please do not bother to send in patches adding cool new features at
+ this time. Only bug-fix patches will be accepted. It would also be
+ <b>very</b> helpful if people could help review the BusyBox documentation
+ and submit improvements. I've spent a lot of time updating the
+ documentation to make it better match reality, but I could really use some
+ assistance in checking that the features supported by the various applets
+ match the features listed in the documentation.
+
+ <p>
+ I had hoped to get this released a month ago, but
+ <a href="http://codepoet.org/gallery/baby_peter/img_1796">
+ another release on 1 March 2004</a> has kept me busy...
+
+ <p>
+ The <a href="downloads/Changelog">changelog</a> has all the details.
+ And as usual you can <a href="downloads">download busybox here</a>.
+
+ <p>Have Fun!
+ <p>
+
+
+ <p>
+ <li><b>23 February 2004 -- BusyBox 1.0.0-pre8 released</b><p>
+
+ Here goes yet another BusyBox pre-release... Please do not bother to send
+ in patches supplying new features at this time. Only bug-fix patches will
+ be accepted. If you have a cool new feature you would like to see
+ supported, or if you have an amazing new applet you would like to submit,
+ please wait and submit such things later. We really want to get a release
+ out we can all be proud of. We are still aiming to finish off the -pre
+ series in February and move on to the final 1.0.0 release... So if you
+ spot any bugs, now would be an excellent time to send in a fix to the
+ busybox mailing list. It would also be <b>very</b> helpful if people could
+ help review the BusyBox documentation and submit improvements. It would be
+ especially helpful if people could check that the features supported by the
+ various applets match the features listed in the documentation.
+
+ <p>
+
+ The <a href="downloads/Changelog">changelog</a> has all the details.
+ And as usual you can <a href="downloads">download busybox here</a>.
+
+ <p>Have Fun!
+ <p>
+
+
+ <li><b>4 February 2004 -- BusyBox 1.0.0-pre7 released</b><p>
+
+ There was a bug in -pre6 that broke argument parsing for a
+ number of applets, since a variable was not being zeroed out
+ properly. This release is primarily intended to fix that one
+ problem. In addition, this release fixes several other
+ problems, including a rewrite by mjn3 of the code for parsing
+ the busybox.conf file used for suid handling, some shell updates
+ from vodz, and a scattering of other small fixes. We are still
+ aiming to finish off the -pre series in February and move on to
+ the final 1.0.0 release... If you see any problems, of have
+ suggestions to make, as always, please feel free to email the
+ busybox mailing list.
+
+ <p>
+
+ The <a href="downloads/Changelog">changelog</a> has all
+ the details. And as usual you can
+ <a href="downloads">download busybox here</a>.
+
+ <p>Have Fun!
+ <p>
+
+
+ <p>
+ <li><b>30 January 2004 -- BusyBox 1.0.0-pre6 released</b><p>
+
+ Here goes the next pre-release for the new BusyBox stable
+ series. This release adds a number of size optimizations,
+ updates udhcp, fixes up 2.6 modutils support, updates ash
+ and the shell command line editing, and the usual pile of
+ bug fixes both large and small. Things appear to be
+ settling down now, so with a bit of luck and some testing
+ perhaps we can finish off the -pre series in February and
+ move on to the final 1.0.0 release... If you see any
+ problems, of have suggestions to make, as always, please
+ feel free to email the busybox mailing list.
+
+ <p>
+
+ People who rely on the <a href= "downloads/snapshots/">daily BusyBox snapshots</a>
+ should be aware that snapshots of the old busybox 0.60.x
+ series are no longer available. Daily snapshots are now
+ only available for the BusyBox 1.0.0 series and now use
+ the naming scheme "busybox-&lt;date&gt;.tar.bz2". Please
+ adjust any build scripts using the old naming scheme accordingly.
+
+ <p>
+
+ The <a href="downloads/Changelog">changelog</a> has all
+ the details. And as usual you can
+ <a href="downloads">download busybox here</a>.
+
+ <p>Have Fun!
+ <p>
+
+
+ <p>
+ <li><b>23 December 2003 -- BusyBox 1.0.0-pre5 released</b><p>
+
+ Here goes the next pre-release for the new BusyBox stable
+ series. The most obvious thing in this release is a fix for
+ a terribly stupid bug in mount that prevented it from working
+ properly unless you specified the filesystem type. This
+ release also fixes a few compile problems, updates udhcp,
+ fixes a silly bug in fdisk, fixes ifup/ifdown to behave like
+ the Debian version, updates devfsd, updates the 2.6.x
+ modutils support, add a new 'rx' applet, removes the obsolete
+ 'loadacm' applet, fixes a few tar bugs, fixes a sed bug, and
+ a few other odd fixes.
+
+ <p>
+
+ If you see any problems, of have suggestions to make, as
+ always, please feel free to send an email to the busybox
+ mailing list.
+
+ <p>
+
+ The <a href="downloads/Changelog">changelog</a> has all
+ the details. And as usual you can
+ <a href="downloads">download busybox here</a>.
+
+ <p>Have Fun!
+ <p>
+
+
+
+ <li><b>10 December 2003 -- BusyBox 1.0.0-pre4 released</b><p>
+
+ Here goes the fourth pre-release for the new BusyBox stable
+ series. This release includes major rework to sed, lots of
+ rework on tar, a new tiny implementation of bunzip2, a new
+ devfsd applet, support for 2.6.x kernel modules, updates to
+ the ash shell, sha1sum and md5sum have been merged into a
+ common applet, the dpkg applets has been cleaned up, and tons
+ of random bugs have been fixed. Thanks everyone for all the
+ testing, bug reports, and patches! Once again, a big
+ thank-you goes to Glenn McGrath (bug1) for stepping in and
+ helping get patches merged!
+
+ <p>
+
+ And of course, if you are reading this, you might have noticed
+ the busybox website has been completely reworked. Hopefully
+ things are now somewhat easier to navigate... If you see any
+ problems, of have suggestions to make, as always, please feel
+ free to send an email to the busybox mailing list.
+
+ <p>
+
+ The <a href="downloads/Changelog">changelog</a> has all
+ the details. And as usual you can
+ <a href="downloads">download busybox here</a>.
+
+ <p>Have Fun!
+
+
+
+ <p>
+ <li><b>12 Sept 2003 -- BusyBox 1.0.0-pre3 released</b><p>
+
+ Here goes the third pre-release for the new BusyBox stable
+ series. The last prerelease has held up quite well under
+ testing, but a number of problems have turned up as the number
+ of people using it has increased. Thanks everyone for all
+ the testing, bug reports, and patches!
+
+ <p>
+
+ If you have submitted a patch or a bug report to the busybox
+ mailing list and no one has emailed you explaining why your
+ patch was rejected, it is safe to say that your patch has
+ somehow gotten lost or forgotten. That happens sometimes.
+ Please re-submit your patch or bug report to the BusyBox
+ mailing list!
+
+ <p>
+
+ The point of the "-preX" versions is to get a larger group of
+ people and vendors testing, so any problems that turn up can be
+ fixed prior to the final 1.0.0 release. The main feature
+ (besides additional testing) that is still still on the TODO
+ list before the final BusyBox 1.0.0 release is sorting out the
+ modutils issues. For the new 2.6.x kernels, we already have
+ patches adding insmod and rmmod support and those need to be
+ integrated. For 2.4.x kernels, for which busybox only supports
+ a limited number of architectures, we may want to invest a bit
+ more work before we cut 1.0.0. Or we may just leave 2.4.x
+ module loading alone.
+
+ <p>
+
+ I had hoped this release would be out a month ago. And of
+ course, it wasn't since Erik became busy getting a release of
+ <a href="http://www.uclibc.org/">uClibc</a>
+ out the door. Many thanks to Glenn McGrath (bug1) for
+ stepping in and helping get a bunch of patches merged! I am
+ not even going to state a date for releasing BusyBox 1.0.0
+ -pre4 (or the final 1.0.0). We're aiming for late September...
+ But if this release proves as to be exceptionally stable (or
+ exceptionally unstable!), the next release may be very soon
+ indeed.
+
+ <p>
+
+ The <a href="downloads/Changelog">changelog</a> has all
+ the details. And as usual you can
+ <a href="downloads">download busybox here</a>.
+
+ <p>Have Fun!
+
+
+ <p>
+ <li><b>30 July 2003 -- BusyBox 1.0.0-pre2 released</b><p>
+
+ Here goes another pre release for the new BusyBox stable
+ series. The last prerelease (pre1) was given quite a lot of
+ testing (thanks everyone!) which has helped turn up a number of
+ bugs, and these problems have now been fixed.
+
+ <p>
+
+ Highlights of -pre2 include updating the 'ash' shell to sync up
+ with the Debian 'dash' shell, a new 'hdparm' applet was added,
+ init again supports pivot_root, The 'reboot' 'halt' and
+ 'poweroff' applets can now be used without using busybox init.
+ an ifconfig buffer overflow was fixed, losetup now allows
+ read-write loop devices, uClinux daemon support was added, the
+ 'watchdog', 'fdisk', and 'kill' applets were rewritten, there were
+ tons of doc updates, and there were many other bugs fixed.
+ <p>
+
+ If you have submitted a patch and it is not included in this
+ release and Erik has not emailed you explaining why your patch
+ was rejected, it is safe to say that he has lost your patch.
+ That happens sometimes. Please re-submit your patch to the
+ BusyBox mailing list.
+ <p>
+
+ The point of the "-preX" versions is to get a larger group of
+ people and vendors testing, so any problems that turn up can be
+ fixed prior to the final 1.0.0 release. The main feature that
+ is still still on the TODO list before the final BusyBox 1.0.0
+ release is adding module support for the new 2.6.x kernels. If
+ necessary, a -pre3 BusyBox release will happen on August 6th.
+ Hopefully (i.e. unless some horrible catastrophic problem
+ turns up) the final BusyBox 1.0.0 release will be ready by
+ then...
+ <p>
+
+ The <a href="downloads/Changelog">changelog</a> has all
+ the details. As usual you can <a href="downloads">download busybox here</a>.
+
+ <p>Have Fun!
+ <p>
+
+ <p>
+ <li><b>15 July 2003 -- BusyBox 1.0.0-pre1 released</b><p>
+
+ The busybox development series has been under construction for
+ nearly two years now. Which is just entirely too long... So
+ it is with great pleasure that I announce the imminent release
+ of a new stable series. Due to the huge number of changes
+ since the last stable release (and the usual mindless version
+ number inflation) I am branding this new stable series verison
+ 1.0.x...
+ <p>
+
+ The point of "-preX" versions is to get a larger group of
+ people and vendors testing, so any problems that turn up can be
+ fixed prior to the magic 1.0.0 release (which should happen
+ later this month)... I plan to release BusyBox 1.0.0-pre2 next
+ Monday (July 21st), and, if necessary, -pre3 on July 28th.
+ Hopefully (i.e. unless some horrible catastrophic problem turns
+ up) the final BusyBox 1.0.0 release should be ready by the end
+ of July.
+ <p>
+
+ If you have submitted patches, and they are not in this release
+ and I have not emailed you explaining why your patch was
+ rejected, it is safe to say that I have lost your patch. That
+ happens sometimes. Please do <B>NOT</b> send all your patches,
+ support questions, etc, directly to Erik. I get hundreds of
+ emails every day (which is why I end up losing patches
+ sometimes in the flood)... The busybox mailing list is the
+ right place to send your patches, support questions, etc.
+ <p>
+
+ I would like to especially thank Vladimir Oleynik (vodz), Glenn
+ McGrath (bug1), Robert Griebl (sandman), and Manuel Novoa III
+ (mjn3) for their significant efforts and contributions that
+ have made this release possible.
+ <p>
+
+ As usual you can <a href="downloads">download busybox here</a>.
+ You don't really need to bother with the
+ <a href="downloads/Changelog">changelog</a>, as the changes
+ vs the stable version are way too extensive to easily enumerate.
+ But you can take a look if you really want too.
+
+ <p>Have Fun!
+ <p>
+
+
+
+ <p>
+ <li><b>26 October 2002 -- BusyBox 0.60.5 released</b><p>
+
+ I am very pleased to announce that the BusyBox 0.60.5 (stable)
+ is now available for download. This is a bugfix release for
+ the stable series to address all the problems that have turned
+ up since the last release. Unfortunately, the previous release
+ had a few nasty bugs (i.e. init could deadlock, gunzip -c tried
+ to delete source files, cp -a wouldn't copy symlinks, and init
+ was not always providing controlling ttys when it should have).
+ I know I said that the previous release would be the end of the
+ 0.60.x series. Well, it turns out I'm a liar. But this time I
+ mean it (just like last time ;-). This will be the last
+ release for the 0.60.x series -- all further development work
+ will be done for the development busybox tree. Expect the development
+ version to have its first real release very very soon now...
+
+ <p>
+ The <a href="downloads/Changelog.full">changelog</a> has all
+ the details. As usual you can <a href="downloads">download busybox here</a>.
+ <p>Have Fun!
+ <p>
+
+ <p>
+ <li><b>18 September 2002 -- BusyBox 0.60.4 released</b><p>
+
+ I am very pleased to announce that the BusyBox 0.60.4
+ (stable) is now available for download. This is primarily
+ a bugfix release for the stable series to address all
+ the problems that have turned up since the last
+ release. This will be the last release for the 0.60.x series.
+ I mean it this time -- all further development work will be done
+ on the development busybox tree, which is quite solid now and
+ should soon be getting its first real release.
+
+ <p>
+ The <a href="downloads/Changelog.full">changelog</a> has all
+ the details. As usual you can <a href="downloads">download busybox here</a>.
+ <p>Have Fun!
+ <p>
+
+
+ <p>
+ <li><b>27 April 2002 -- BusyBox 0.60.3 released</b><p>
+
+ I am very pleased to announce that the BusyBox 0.60.3 (stable) is
+ now available for download. This is primarily a bugfix release
+ for the stable series. A number of problems have turned up since
+ the last release, and this should address most of those problems.
+ This should be the last release for the 0.60.x series. The
+ development busybox tree has been progressing nicely, and will
+ hopefully be ready to become the next stable release.
+
+ <p>
+ The <a href="downloads/Changelog">changelog</a> has all
+ the details. As usual you can <a href="downloads">download busybox here</a>.
+ <p>Have Fun!
+ <p>
+
+
+ <p>
+ <li><b>6 March 2002 -- busybox.net now has mirrors!</b><p>
+
+ Busybox.net is now much more available, thanks to
+ the fine folks at <a href= "http://i-netinnovations.com/">http://i-netinnovations.com/</a>
+ who are providing hosting for busybox.net and
+ uclibc.org. In addition, we now have two mirrors:
+ <a href= "http://busybox.linuxmagic.com/">http://busybox.linuxmagic.com/</a>
+ in Canada and
+ <a href= "http://busybox.csservers.de/">http://busybox.csservers.de/</a>
+ in Germany. I hope this makes things much more
+ accessible for everyone!
+
+
+<li>
+<b>3 January 2002 -- Welcome to busybox.net!</b>
+
+<p>Thanks to the generosity of a number of busybox
+users, we have been able to purchase busybox.net
+(which is where you are probably reading this).
+Right now, busybox.net and uclibc.org are both
+living on my home system (at the end of my DSL
+line). I apologize for the abrupt move off of
+busybox.lineo.com. Unfortunately, I no longer have
+the access needed to keep that system updated (for
+example, you might notice the daily snapshots there
+stopped some time ago).</p>
+
+<p>Busybox.net is currently hosted on my home
+server, at the end of a DSL line. Unfortunately,
+the load on them is quite heavy. To address this,
+I'm trying to make arrangements to get busybox.net
+co-located directly at an ISP. To assist in the
+co-location effort, <a href=
+"http://www.codepoet.org/~markw">Mark Whitley</a>
+(author of busybox sed, cut, and grep) has donated
+his <a href=
+"http://www.netwinder.org/">NetWinder</a> computer
+for hosting busybox.net and uclibc.org. Once this
+system is co-located, the current speed problems
+should be completely eliminated. Hopefully, too,
+some of you will volunteer to set up some mirror
+sites, to help to distribute the load a bit.</p>
+
+<p><!--
+ <center>
+ Click here to help support busybox.net!
+ <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
+ <input type="hidden" name="cmd" value="_xclick">
+ <input type="hidden" name="business" value="andersen@codepoet.org">
+ <input type="hidden" name="item_name" value="Support Busybox">
+ <input type="hidden" name="image_url" value="https://codepoet-consulting.com/images/busybox2.jpg">
+ <input type="hidden" name="no_shipping" value="1">
+ <input type="image" src="images/donate.png" border="0" name="submit" alt="Make donation using PayPal">
+ </form>
+ </center>
+ -->
+ Since some people expressed concern over BusyBox
+donations, let me assure you that no one is getting
+rich here. All BusyBox and uClibc donations will be
+spent paying for bandwidth and needed hardware
+upgrades. For example, Mark's NetWinder currently
+has just 64Meg of memory. As demonstrated when
+google spidered the site the other day, 64 Megs in
+not enough, so I'm going to be ordering 256Megs of
+ram and a larger hard drive for the box today. So
+far, donations received have been sufficient to
+cover almost all expenses. In the future, we may
+have co-location fees to worry about, but for now
+we are ok. A <b>HUGE thank-you</b> goes out to
+everyone that has contributed!<br>
+ -Erik</p>
+</li>
+
+<li>
+<b>20 November 2001 -- BusyBox 0.60.2 released</b>
+
+<p>We am very pleased to announce that the BusyBox
+0.60.2 (stable) is now released to the world. This
+one is primarily a bugfix release for the stable
+series, and it should take care of most everyone's
+needs till we can get the nice new stuff we have
+been working on in CVS ready to release (with the
+wonderful new buildsystem). The biggest change in
+this release (beyond bugfixes) is the fact that msh
+(the minix shell) has been re-worked by Vladimir N.
+Oleynik (vodz) and so it no longer crashes when
+told to do complex things with backticks.</p>
+
+<p>This release has been tested on x86, ARM, and
+powerpc using glibc 2.2.4, libc5, and uClibc, so it
+should work with just about any Linux system you
+throw it at. See the <a href=
+"downloads/Changelog">changelog</a> for <small>most
+of</small> the details. The last release was
+<em>very</em> solid for people, and this one should
+be even better.</p>
+
+<p>As usual BusyBox 0.60.2 can be downloaded from
+<a href=
+"downloads">http://www.busybox.net/downloads</a>.</p>
+
+<p>Have Fun.<br>
+ -Erik</p>
+</li>
+
+<li> <b>18 November 2001 -- Help us buy busybox.net!</b>
+
+<!-- Begin PayPal Logo -->
+<center>
+Click here to help buy busybox.net!
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
+<input type="hidden" name="cmd" value="_xclick">
+<input type="hidden" name="business" value="andersen@codepoet.org">
+<input type="hidden" name="item_name" value="Support Busybox">
+<input type="hidden" name="image_url" value="https://busybox.net/images/busybox2.jpg">
+<input type="hidden" name="no_shipping" value="1">
+<input type="image" src="images/donate.png" border="0" name="submit" alt="Make donation using PayPal">
+</form>
+</center>
+<!-- End PayPal Logo -->
+
+I've contacted the current owner of busybox.net and he is willing
+to sell the domain name -- for $250. He also owns busybox.org but
+will not part with it... I will then need to pay the registry fee
+for a couple of years and start paying for bandwidth, so this will
+initially cost about $300. I would like to host busybox.net on my
+home machine (codepoet.org) so I have full control over the system,
+but to do that would require that I increase the level of bandwidth
+I am paying for. Did you know that so far this month, there
+have been over 1.4 Gigabytes of busybox ftp downloads? I don't
+even <em>know</em> how much CVS bandwidth it requires. For the
+time being, Lineo has continued to graciously provide this
+bandwidth, despite the fact that I no longer work for them. If I
+start running this all on my home machine, paying for the needed bandwidth
+will start costing some money.
+<p>
+
+I was going to pay it all myself, but my wife didn't like that
+idea at all (big surprise). It turns out &lt;insert argument
+where she wins and I don't&gt; she has better ideas
+about what we should spend our money on that don't involve
+busybox. She suggested I should ask for contributions on the
+mailing list and web page. So...
+<p>
+
+I am hoping that if everyone could contribute a bit, we could pick
+up the busybox.net domain name and cover the bandwidth costs. I
+know that busybox is being used by a lot of companies as well as
+individuals -- hopefully people and companies that are willing to
+contribute back a bit. So if everyone could please help out, that
+would be wonderful!
+<p>
+
+
+<li> <b>23 August 2001 -- BusyBox 0.60.1 released</b>
+<br>
+
+ This is a relatively minor bug fixing release that fixes
+ up the bugs that have shown up in the stable release in
+ the last few weeks. Fortunately, nothing <em>too</em>
+ serious has shown up. This release only fixes bugs -- no
+ new features, no new applets. So without further ado,
+ here it is. Come and get it.
+ <p>
+ The
+ <a href="downloads/Changelog">changelog</a> has all
+ the details. As usual BusyBox 0.60.1 can be downloaded from
+ <a href="downloads">http://busybox.net/downloads</a>.
+ <p>Have Fun!
+ <p>
+
+
+<li> <b>2 August 2001 -- BusyBox 0.60.0 released</b>
+<br>
+ I am very pleased to announce the immediate availability of
+ BusyBox 0.60.0. I have personally tested this release with libc5, glibc,
+ and <a href="http://uclibc.org/">uClibc</a> on
+ x86, ARM, and powerpc using linux 2.2 and 2.4, and I know a number
+ of people using it on everything from ia64 to m68k with great success.
+ Everything seems to be working very nicely now, so getting a nice
+ stable bug-free(tm) release out seems to be in order. This releases fixes
+ a memory leak in syslogd, a number of bugs in the ash and msh shells, and
+ cleans up a number of things.
+
+ <p>
+
+ Those wanting an easy way to test the 0.60.0 release with uClibc can
+ use <a href="http://user-mode-linux.sourceforge.net/">User-Mode Linux</a>
+ to give it a try by downloading and compiling
+ <a href="ftp://busybox.net/buildroot.tar.gz">buildroot.tar.gz</a>.
+ You don't have to be root or reboot your machine to run test this way.
+ Preconfigured User-Mode Linux kernel source is also on busybox.net.
+ <p>
+ Another cool thing is the nifty <a href="downloads/tutorial/index.html">
+ BusyBox Tutorial</a> contributed by K Computing. This requires
+ a ShockWave plugin (or standalone viewer), so you may want to grab the
+ the GPLed shockwave viewer from <a href="http://www.swift-tools.com/Flash/flash-0.4.10.tgz">here</a>
+ to view the tutorial.
+ <p>
+
+ Finally, In case you didn't notice anything odd about the
+ version number of this release, let me point out that this release
+ is <em>not</em> 0.53, because I bumped the version number up a
+ bit. This reflects the fact that this release is intended to form
+ a new stable BusyBox release series. If you need to rely on a
+ stable version of BusyBox, you should plan on using the stable
+ 0.60.x series. If bugs show up then I will release 0.60.1, then
+ 0.60.2, etc... This is also intended to deal with the fact that
+ the BusyBox build system will be getting a major overhaul for the
+ next release and I don't want that to break products that people
+ are shipping. To avoid that, the new build system will be
+ released as part of a new BusyBox development series that will
+ have some not-yet-decided-on odd version number. Once things
+ stabilize and the new build system is working for everyone, then
+ I will release that as a new stable release series.
+
+ <p>
+ The
+ <a href="downloads/Changelog">changelog</a> has all
+ the details. As usual BusyBox 0.60.0 can be downloaded from
+ <a href="downloads">http://busybox.net/downloads</a>.
+ <p>Have Fun!
+ <p>
+
+
+<li> <b>7 July 2001 -- BusyBox 0.52 released</b>
+<br>
+
+ I am very pleased to announce the immediate availability of
+ BusyBox 0.52 (the "new-and-improved rock-solid release"). This
+ release is the result of <em>many</em> hours of work and has tons
+ of bugfixes, optimizations, and cleanups. This release adds
+ several new applets, including several new shells (such as hush, msh,
+ and ash).
+
+ <p>
+ The
+ <a href="downloads/Changelog">changelog</a> covers
+ some of the more obvious details, but there are many many things that
+ are not mentioned, but have been improved in subtle ways. As usual,
+ BusyBox 0.52 can be downloaded from
+ <a href="downloads">http://busybox.net/downloads</a>.
+ <p>Have Fun!
+ <p>
+
+
+<li> <b>10 April 2001 - Graph of Busybox Growth </b>
+<br>
+The illustrious Larry Doolittle has made a PostScript chart of the growth
+of the Busybox tarball size over time. It is available for downloading /
+viewing <a href= "busybox-growth.ps"> right here</a>.
+
+<p> (Note that while the number of applets in Busybox has increased, you
+can still configure Busybox to be as small as you want by selectively
+turning off whichever applets you don't need.)
+<p>
+
+
+<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="downloads/Changelog">changelog</a> for
+ complete details. BusyBox 0.51 can be downloaded from
+ <a href="downloads">http://busybox.net/downloads</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=
+"downloads/busybox.floppy.img"> Busybox boot floppy
+image</a>. Here's how you use it:
+
+<ol>
+
+ <li> <a href= "downloads/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="downloads/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="downloads/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="downloads/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>
+<p> <li> <b>26 September 2000 -- BusyBox 0.47 released</b>
+<br>
+
+ This release fixes lots of bugs (including an ugly bug in 0.46
+ syslogd that could fork-bomb your system). Added several new
+ apps: rdate, wget, getopt, dos2unix, unix2dos, reset, unrpm,
+ renice, xargs, and expr. syslogd now supports network logging.
+ There are the usual tar updates. Most apps now use getopt for
+ more correct option parsing.
+ See the <a href="downloads/Changelog">changelog</a>
+ for complete details.
+
+
+<p> <li> <b>11 July 2000 -- BusyBox 0.46 released</b>
+<br>
+
+ This release fixes several bugs (including a ugly bug in tar,
+ and fixes for NFSv3 mount support). Added a dumpkmap to allow
+ people to dump a binary keymaps for use with 'loadkmap', and a
+ completely reworked 'grep' and 'sed' which should behave better.
+ BusyBox shell can now also be used as a login shell.
+ See the <a href="downloads/Changelog">changelog</a>
+ for complete details.
+
+
+<p> <li> <b>21 June 2000 -- BusyBox 0.45 released</b>
+<br>
+
+ This release has been slow in coming, but is very solid at this
+ point. BusyBox now supports libc5 as well as GNU libc. This
+ release provides the following new apps: cut, tr, insmod, ar,
+ mktemp, setkeycodes, md5sum, uuencode, uudecode, which, and
+ telnet. There are bug fixes for just about every app as well (see
+ the <a href="downloads/Changelog">changelog</a> for
+ details).
+ <p>
+ Also, some exciting infrastructure news! Busybox now has its own
+ <a href="lists/busybox/">mailing list</a>,
+ publically browsable
+ <a href="/cgi-bin/cvsweb/busybox/">CVS tree</a>,
+ anonymous
+ <a href="cvs_anon.html">CVS access</a>, and
+ for those that are actively contributing there is even
+ <a href="cvs_write.html">CVS write access</a>.
+ I think this will be a huge help to the ongoing development of BusyBox.
+ <p>
+ Also, for the curious, there is no 0.44 release. Somehow 0.44 got announced
+ a few weeks ago prior to its actually being released. To avoid any confusion
+ we are just skipping 0.44.
+ <p>
+ Many thanks go out to the many people that have contributed to this release
+ of BusyBox (esp. Pavel Roskin)!
+
+
+<p> <li> <b>19 April 2000 -- syslogd bugfix</b>
+<br>
+Turns out that there was still a bug in busybox syslogd.
+For example, with the following test app:
+<pre>
+#include &lt;syslog.h&gt;
+
+int do_log(char* msg, int delay)
+{
+ openlog("testlog", LOG_PID, LOG_DAEMON);
+ while(1) {
+ syslog(LOG_ERR, "%s: testing one, two, three\n", msg);
+ sleep(delay);
+ }
+ closelog();
+ return(0);
+};
+
+int main(void)
+{
+ if (fork()==0)
+ do_log("A", 2);
+ do_log("B", 3);
+}
+</pre>
+it should be logging stuff from both "A" and "B". As released in 0.43 only stuff
+from "A" would have been logged. This means that if init tries to log something
+while say ppp has the syslog open, init would block (which is bad, bad, bad).
+<p>
+Karl M. Hegbloom has created a fix for the problem.
+Thanks Karl!
+
+
+<p> <li> <b>18 April 2000 -- BusyBox 0.43 released (finally!)</b>
+<br>
+I have finally gotten everything into a state where I feel pretty
+good about things. This is definitely the most stable, solid release
+so far. A lot of bugs have been fixed, and the following new apps
+have been added: sh, basename, dirname, killall, uptime,
+freeramdisk, tr, echo, test, and usleep. Tar has been completely
+rewritten from scratch. Bss size has also been greatly reduced.
+More details are available in the
+<a href="downloads/Changelog">changelog</a>.
+Oh, and as a special bonus, I wrote some fairly comprehensive
+<em>documentation</em>, complete with examples and full usage information.
+
+<p>
+Many thanks go out to the fine people that have helped by submitting patches
+and bug reports; particularly instrumental in helping for this release were
+Karl Hegbloom, Pavel Roskin, Friedrich Vedder, Emanuele Caratti,
+Bob Tinsley, Nicolas Pitre, Avery Pennarun, Arne Bernin, John Beppu, and Jim Gleason.
+There were others so if I somehow forgot to mention you, I'm very sorry.
+<p>
+
+You can grab BusyBox 0.43 tarballs <a href="downloads">here</a>.
+
+<p> <li> <b>9 April 2000 -- BusyBox 0.43 pre release</b>
+<br>
+Unfortunately, I have not yet finished all the things I want to
+do for BusyBox 0.43, so I am posting this pre-release for people
+to poke at. This contains my complete rewrite of tar, which now weighs in at
+5k (7k with all options turned on) and works for reading and writing
+tarballs (which it does correctly for everything I have been able to throw
+at it). Tar also (optionally) supports the "--exclude" option (mainly because
+the Linux Router Project folks asked for it). This also has a pre-release
+of the micro shell I have been writing. This pre-release should be stable
+enough for production use -- it just isn't a release since I have some structural
+changes I still want to make.
+<p>
+The pre-release can be found <a href="downloads">here</a>.
+Please let me know ASAP if you find <em>any</em> bugs.
+
+<p> <li> <b>28 March 2000 -- Andersen Baby Boy release</b>
+<br>
+I am pleased to announce that on Tuesday March 28th at 5:48pm, weighing in at 7
+lbs. 12 oz, Micah Erik Andersen was born at LDS Hospital here in Salt Lake City.
+He was born in the emergency room less then 5 minutes after we arrived -- and
+it was such a relief that we even made it to the hospital at all. Despite the
+fact that I was driving at an amazingly unlawful speed and honking at everybody
+and thinking decidedly unkind thoughts about the people in our way, my wife
+(inconsiderate of my feelings and complete lack of medical training) was lying
+down in the back seat saying things like "I think I need to start pushing now"
+(which she then proceeded to do despite my best encouraging statements to the
+contrary).
+<p>
+Anyway, I'm glad to note that despite the much-faster-than-we-were-expecting
+labor, both Shaunalei and our new baby boy are doing wonderfully.
+<p>
+So now that I am done with my excuse for the slow release cycle...
+Progress on the next release of BusyBox has been slow but steady. I expect
+to have a release sometime during the first week of April. This release will
+include a number of important changes, including the addition of a shell, a
+re-write of tar (to accommodate the Linux Router Project), and syslogd can now
+accept multiple concurrent connections, fixing lots of unexpected blocking
+problems.
+
+
+<p> <li> <b>11 February 2000 -- BusyBox 0.42 released</b>
+<br>
+
+ This is the most solid BusyBox release so far. Many, many
+ bugs have been fixed. See the
+ <a href="downloads/Changelog">changelog</a> for details.
+
+ Of particular interest, init will now cleanly unmount
+ filesystems on reboot, cp and mv have been rewritten and
+ behave much better, and mount and umount no longer leak
+ loop devices. Many thanks go out to Randolph Chung,
+ Karl M. Hegbloom, Taketoshi Sano, and Pavel Roskin for
+ their hard work on this release of BusyBox. Please pound
+ on it and let me know if you find any bugs.
+
+<p> <li> <b>19 January 2000 -- BusyBox 0.41 released</b>
+<br>
+
+ This release includes bugfixes to cp, mv, logger, true, false,
+ mkdir, syslogd, and init. New apps include wc, hostid,
+ logname, tty, whoami, and yes. New features include loop device
+ support in mount and umount, and better TERM handling by init.
+ The changelog can be found <a href="downloads/Changelog">here</a>.
+
+<p> <li> <b>7 January 2000 -- BusyBox 0.40 released</b>
+<br>
+
+ This release includes bugfixes to init (now includes inittab support),
+ syslogd, head, logger, du, grep, cp, mv, sed, dmesg, ls, kill, gunzip, and mknod.
+ New apps include sort, uniq, lsmod, rmmod, fbset, and loadacm.
+ In particular, this release fixes an important bug in tar which
+ in some cases produced serious security problems.
+ As always, the changelog can be found <a href="downloads/Changelog">here</a>.
+
+<p> <li> <b>11 December 1999 -- BusyBox Website</b>
+<br>
+ I have received permission from Bruce Perens (the original author of BusyBox)
+ to set up this site as the new primary website for BusyBox. This website
+ will always contain pointers to the latest and greatest, and will also
+ contain the latest documentation on how to use BusyBox, what it can do,
+ what arguments its apps support, etc.
+
+<p> <li> <b>10 December 1999 -- BusyBox 0.39 released</b>
+<br>
+ This release includes fixes to init, reboot, halt, kill, and ls, and contains
+ the new apps ping, hostname, mkfifo, free, tail, du, tee, and head. A full
+ changelog can be found <a href="downloads/Changelog">here</a>.
+<p> <li> <b>5 December 1999 -- BusyBox 0.38 released</b>
+<br>
+ This release includes fixes to tar, cat, ls, dd, rm, umount, find, df,
+ and make install, and includes new apps syslogd/klogd and logger.
+
+
+</ul>
+
+
+<!--#include file="footer.html" -->
+
diff --git a/busybox/docs/busybox.net/products.html b/busybox/docs/busybox.net/products.html
new file mode 100644
index 0000000..6ca0e3c
--- /dev/null
+++ b/busybox/docs/busybox.net/products.html
@@ -0,0 +1,166 @@
+<!--#include file="header.html" -->
+
+
+<h3>Products/Projects Using BusyBox</h3>
+
+Do you use BusyBox? I'd love to know about it and
+I'd be happy to link to you.
+
+<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="/cgi-bin/cvsweb/buildroot/">buildroot</a><br>A configurable
+means for building your own busybox/uClibc based system systems.
+
+<li><a href="http://www.pengutronix.de/software/ptxdist_en.html">PTXdist</a><br>another
+configurable means for building your own busybox based system systems.
+
+</li><li><a href=
+"http://cvs.debian.org/boot-floppies/">
+Debian installer (boot floppies) project</a>
+
+</li><li><a href="http://redhat.com/">Red Hat installer</a>
+
+</li><li><a href=
+"http://distro.ibiblio.org/pub/Linux/distributions/slackware/slackware-current/source/rootdisks/">
+Slackware Installer</a>
+
+</li><li><a href="http://www.gentoo.org/">Gentoo Linux install/boot CDs</a>
+</li><li><a href="http://www.mandrake.com/">The Mandrake installer</a>
+
+</li><li><a href="http://Leaf.SourceForge.net">Linux Embedded Appliance Firewall</a><br>The sucessor of the Linux Router Project, supporting all sorts of embedded Linux gateways, routers, wireless routers, and firewalls.
+
+</li><li><a href=
+"http://www.toms.net/rb/">tomsrtbt</a>
+
+</li><li><a href="http://www.stormix.com/">Stormix
+Installer</a>
+
+</li><li><a href=
+"http://www.emacinc.com/linux2_sbc.htm">EMAC Linux
+2.0 SBC</a>
+
+</li><li><a href="http://www.trinux.org/">Trinux</a>
+
+</li><li><a href="http://oddas.sourceforge.net/">ODDAS
+project</a>
+
+</li><li><a href="http://byld.sourceforge.net/">Build Your
+Linux Disk</a>
+
+</li><li><a href=
+"http://ibiblio.org/pub/Linux/system/recovery">Zdisk</a>
+
+</li><li><a href="http://www.adtran.com">AdTran -
+VPN/firewall VPN Linux Distribution</a>
+
+</li><li><a href="http://mkcdrec.ota.be/">mkCDrec - make
+CD-ROM recovery</a>
+
+</li><li><a href=
+"http://recycle.lbl.gov/~ldoolitt/bse/">Linux on
+nanoEngine</a>
+
+</li><li><a href=
+"http://www.zelow.no/floppyfw/">Floppyfw</a>
+
+</li><li><a href="http://www.ltsp.org/">Linux Terminal
+Server Project</a>
+
+</li><li><a href="http://www.devil-linux.org/">Devil-Linux</a>
+
+</li><li><a href="http://dutnux.sourceforge.net/">DutNux</a>
+
+</li><li><a href="http://www.microwerks.net/~hugo/mindi/">Mindi</a>
+
+</li><li><a href="http://www.minimalinux.org/ttylinux/">ttylinux</a>
+
+</li><li><a href="http://www.coyotelinux.com/">Coyote Linux</a>
+
+</li><li><a href="http://www.partimage.org/">Partition
+Image</a>
+
+</li><li><a href="http://www.fli4l.de/">fli4l the on(e)-disk-router</a>
+
+</li><li><a href="http://tinfoilhat.cultists.net/">Tinfoil
+Hat Linux</a>
+
+</li><li><a href="http://sourceforge.net/projects/gp32linux/">gp32linux</a>
+</li><li><a href="http://familiar.handhelds.org/">Familiar Linux</a><br>A linux distribution for handheld computers
+</li><li><a href="http://rescuecd.sourceforge.net/">Timo's Rescue CD Set</a>
+</li><li><a href="http://sf.net/projects/netstation/">Netstation</a>
+</li><li><a href="http://www.fiwix.org/">GNU/Fiwix Operating System</a>
+</li><li><a href="http://www.softcraft.com/">Generations Linux</a>
+</li><li><a href="http://systemimager.org/relatedprojects/">SystemImager / System Installation Suite</a>
+</li><li><a href="http://www.bablokb.de/gendist/">GENDIST distribution generator</a>
+</li><li><a href="http://diet-pc.sourceforge.net/">DIET-PC embedded Linux thin client distribution</a>
+</li><li><a href="http://byzgl.sourceforge.net/">BYZantine Gnu/Linux</a>
+</li><li><a href="http://dban.sourceforge.net/">Darik's Boot and Nuke</a>
+</li><li><a href="http://www.timesys.com/">TimeSys real-time Linux</a>
+</li><li><a href="http://movix.sf.net/">MoviX</a><br>Boots from CD and automatically plays every video file on the CD
+</li><li><a href="http://katamaran.sourceforge.net">katamaran</a><br>Linux, X11, xfce windowmanager, based on BusyBox
+</li><li><a href="http://www.sourceforge.net/projects/simplygnustep">Prometheus SimplyGNUstep</a>
+</li><li><a href="http://www.renyi.hu/~ekho/lowlife/">lowlife</a><br>A documentation project on how to make your own uClibc-based systems and floppy.
+</li><li><a href="http://metadistros.hispalinux.es/">Metadistros</a><br>a project to allow you easily make Live-CD distributions.
+</li><li><a href="http://salvare.sourceforge.net/">Salvare</a><br>More Linux than tomsrtbt but less than Knoppix, aims to provide a useful workstation as well as a rescue disk.
+</li><li><a href="http://www.stresslinux.org/">stresslinux</a><br>minimal linux distribution running from a bootable cdrom or via PXE.
+</li><li><a href="http://thinstation.sourceforge.net/">thinstation</a><br>convert standard PCs into full-featured diskless thinclients.
+</li><li><a href="http://www.uhulinux.hu/">UHU-Linux Hungary</a>
+</li><li><a href="http://deep-water.berlios.de/">Deep-Water Linux</a>
+</li><li><a href="http://www.freesco.org/">Freesco router</a>
+</li><li><a href="http://Sentry.SourceForge.net/">Sentry Firewall CD</a>
+
+
+
+</li><li><a href="http://tuxscreen.net">Tuxscreen Linux Phone</a>
+</li><li><a href="http://www.kerbango.com/">The Kerbango Internet Radio</a>
+</li><li><a href="http://www.linuxmagic.com/vpn/">LinuxMagic VPN Firewall</a>
+</li><li><a href="http://www.isilver-inc.com/">I-Silver Linux appliance servers</a>
+</li><li><a href="http://zaurus.sourceforge.net/">Sharp Zaurus PDA</a>
+</li><li><a href="http://www.cyclades.com/">Cyclades-TS and other Cyclades products</a>
+</li><li><a href="http://www.linksys.com/products/product.asp?prid=508">Linksys WRT54G - Wireless-G Broadband Router</a>
+</li><li><a href="http://www.dell.com/us/en/biz/topics/sbtopic_005_truemobile.htm">Dell TrueMobile 1184</a>
+</li><li><a href="http://actiontec.com/products/modems/dual_pcmodem/dpm_overview.html">Actiontec Dual PC Modem</a>
+</li><li><a href="http://www.kiss-technology.com/">Kiss DP Series DVD players</a>
+</li><li><a href="http://www.netgear.com/products/prod_details.asp?prodID=170">NetGear WG602 wireless router</a>
+ <br>with sources <a href="http://www.netgear.com/support/support_details.asp?dnldID=453">here</a>
+</li><li><a href="http://www.trendware.com/products/TEW-411BRP.htm">TRENDnet TEW-411BRP 802.11g Wireless AP/Router/Switch</a>
+ <br>Source for busybox and udhcp <a href="http://www.trendware.com/asp/download/fileinfo.asp?file_id=277&B1=Search">here</a> though no kernel source is provided.
+</li><li><a href="http://www.buffalo-technology.com/webcontent/products/wireless/wbr-g54.htm">Buffalo WBR-G54 wireless router</a>
+ </li><li><a href="http://www.asus.com/products/communication/wireless/wl-300g/overview.htm">ASUS WL-300g Wireless LAN Access Point</a>
+ <br>with source<a href="http://www.asus.com.tw/support/download/item.aspx?ModelName=WL-300G">here</a>
+ </li><li><a href="http://catalog.belkin.com/IWCatProductPage.process?Merchant_Id=&Section_Id=201522&pcount=&Product_Id=136493">Belkin 54g Wireless DSL/Cable Gateway Router</a>
+ <br>with source<a href="http://web.belkin.com/support/gpl.asp">here</a>
+ <li><a href="http://www.acronis.com/products/partitionexpert/">Acronis PartitionExpert 2003</a>
+ <br>includes a heavily modified BusyBox v0.60.5 with built in
+ cardmgr, device detection, gpm, lspci, etc. Also includes udhcp,
+ uClibc 0.9.26, a heavily patched up linux kernel, etc. Source
+ can only be obtained <a href="http://www.acronis.com/files/gpl/linux.tar.bz2">here</a>
+
+</li><li><a href="http://www.usr.com/">U.S. Robotics Sureconnect 4-port ADSL router</a><br>
+ with source <a href="http://www.usr.com/support/s-gpl-code.asp">here</a>
+</li><li><a href="http://www.actiontec.com/products/broadband/54mbps_wireless_gateway_1p/index.html">
+ ActionTec GT701-WG Wireless Gateway/DSL Modem</a>
+ with source <a href="http://128.121.226.214/gtproducts/index.html">here</a>
+</li><li><a href="http://smartlinux.sourceforge.net/">S.M.A.R.T. Linux</a>
+</li><li><a href="http://www.dlink.com/">DLink - Model GSL-G604T, DSL-300T, and possibly other models</a>
+ with source <a href="ftp://ftp.dlink.co.uk/dsl_routers_modems/">here,</a>
+ with source <a href="ftp://ftp.dlink.de/dsl-products/">and here,</a>
+ and quite possibly other places as well. You may need to dig down a bit
+ to find the source, but it does seem to be there.
+</li><li><a href="http://www.siemens-mobile.de/cds/frontdoor/0,2241,de_de_0_42931_rArNrNrNrN,00.html">Siemens SE515 DSL router</a>
+ with source <a href="http://now-portal.c-lab.de/projects/gigaset/">here, I think...</a>
+ with some details <a href="http://heinz.hippenstiel.org/familie/hp/hobby/gigaset_se515dsl.html">here.</a>
+</li><li><a href="http://frwt.stim.ru/">Free Remote Windows Terminal</a>
+
+
+</li>
+</ul>
+
+
+<!--#include file="footer.html" -->
+
diff --git a/busybox/docs/busybox.net/screenshot.html b/busybox/docs/busybox.net/screenshot.html
new file mode 100644
index 0000000..9c05791
--- /dev/null
+++ b/busybox/docs/busybox.net/screenshot.html
@@ -0,0 +1,57 @@
+<!--#include file="header.html" -->
+
+
+<!-- Begin Screenshot -->
+
+<h3> Busybox Screenshot! </h3>
+
+
+Everybody loves to look at screenshots, so here is a live action screenshot of BusyBox.
+
+<pre style="background-color: black; color: lightgreen; padding: 5px;
+font-family: monospace; font-size: smaller;" width="100">
+
+
+$ ./busybox
+BusyBox v1.00 (2004.10.13-04:49+0000) multi-call binary
+
+Usage: busybox [function] [arguments]...
+ or: [function] [arguments]...
+
+ BusyBox is a multi-call binary that combines many common Unix
+ utilities into a single executable. Most people will create a
+ link to busybox for each function they wish to use, and BusyBox
+ will act like whatever it was invoked as.
+
+Currently defined functions:
+
+ [, addgroup, adduser, adjtimex, ar, arping, ash, awk, basename, bunzip2,
+ busybox, bzcat, cal, cat, chgrp, chmod, chown, chroot, chvt, clear, cmp,
+ cp, cpio, crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser,
+ devfsd, df, dirname, dmesg, dos2unix, dpkg, dpkg-deb, du, dumpkmap,
+ dumpleases, echo, egrep, env, expr, false, fbset, fdflush, fdformat, fdisk,
+ fgrep, find, fold, free, freeramdisk, fsck.minix, ftpget, ftpput, getopt,
+ getty, grep, gunzip, gzip, halt, hdparm, head, hexdump, hostid, hostname,
+ httpd, hush, hwclock, id, ifconfig, ifdown, ifup, inetd, init, insmod,
+ install, ip, ipaddr, ipcalc, iplink, iproute, iptunnel, kill, killall,
+ klogd, lash, last, length, linuxrc, ln, loadfont, loadkmap, logger, login,
+ logname, logread, losetup, ls, lsmod, makedevs, md5sum, mesg, mkdir,
+ mkfifo, mkfs.minix, mknod, mkswap, mktemp, modprobe, more, mount, msh, mt,
+ mv, nameif, nc, netstat, nslookup, od, openvt, passwd, patch, pidof, ping,
+ ping6, pipe_progress, pivot_root, poweroff, printf, ps, pwd, rdate,
+ readlink, realpath, reboot, renice, reset, rm, rmdir, rmmod, route, rpm,
+ rpm2cpio, run-parts, rx, sed, seq, setkeycodes, sha1sum, sleep, sort,
+ start-stop-daemon, strings, stty, su, sulogin, swapoff, swapon, sync,
+ sysctl, syslogd, tail, tar, tee, telnet, telnetd, test, tftp, time, top,
+ touch, tr, traceroute, true, tty, udhcpc, udhcpd, umount, uname,
+ uncompress, uniq, unix2dos, unzip, uptime, usleep, uudecode, uuencode,
+ vconfig, vi, vlock, watch, watchdog, wc, wget, which, who, whoami, xargs,
+ yes, zcat
+
+
+$ <blink>_</blink>
+
+</pre>
+
+<!--#include file="footer.html" -->
+
diff --git a/busybox/docs/busybox.net/shame.html b/busybox/docs/busybox.net/shame.html
new file mode 100644
index 0000000..99807c1
--- /dev/null
+++ b/busybox/docs/busybox.net/shame.html
@@ -0,0 +1,77 @@
+<!--#include file="header.html" -->
+
+
+<h3>Hall of Shame!!!</h3>
+
+The following products and/or projects appear to use BusyBox, but do not
+appear to release source code as required by the <a
+href="/license.html">BusyBox license</a>. This is a violation of the law!
+The distributors of these products are invited to contact <a href=
+"mailto:andersen@codepoet.org">Erik Andersen</a> if they have any confusion
+as to what is needed to bring their products into compliance, or if they have
+already brought their product into compliance and wish to be removed from the
+Hall of Shame.
+
+<p>
+
+Here are the details of <a href="/license.html">exactly how to comply
+with the BusyBox license</a>, so there should be no question as to
+exactly what is expected.
+Complying with the Busybox license is easy and completely free, so the
+companies listed below should be ashamed of themselves. Furthermore, each
+product listed here is subject to being legally ordered to cease and desist
+distribution for violation of copyright law, and the distributor of each
+product is subject to being sued for statutory copyright infringement damages
+of up to $150,000 per work plus legal fees. Nobody wants to be sued, and <a
+href="mailto:andersen@codepoet.org">Erik</a> certainly would prefer to spend
+his time doing better things than sue people. But he will sue if forced to
+do so to maintain compliance.
+
+<p>
+
+Do everyone a favor and don't break the law -- if you use busybox, comply with
+the busybox license by releasing the source code with your product.
+
+<p>
+
+<ul>
+
+ <li><a href="http://www.trittontechnologies.com/products.html">Tritton Technologies NAS120</a>
+ <br>see <a href="http://www.ussg.iu.edu/hypermail/linux/kernel/0404.0/1611.html">here for details</a>
+ <li><a href="http://www.macsense.com/product/homepod/">Macsense HomePod</a>
+ <br>with details
+ <a href="http://developer.gloolabs.com/modules.php?op=modload&name=Forums&file=viewtopic&topic=123&forum=7">here</a>
+ <li><a href="http://www.cpx.com/products.asp?c=Wireless+Products">Compex Wireless Products</a>
+ <br>appears to be running v0.60.5 with Linux version 2.4.20-uc0 on ColdFire,
+ but no source code is mentioned or offered.
+ <li><a href="http://www.inventel.com/en/product/datasheet/10/">Inventel DW 200 wireless/ADSL router</a>
+ <li><a href="http://www.sweex.com/product.asp">Sweex DSL router</a>
+ <br>appears to be running BusyBox v1.00-pre2 and udhcpd, but no source
+ code is mentioned or offered.
+ <li><a href="http://www.trendware.com/products/TEW-410APB.htm">TRENDnet TEW-410APB</a>
+ </li><li><a href="http://www.hauppauge.com/Pages/products/data_mediamvp.html">Hauppauge Media MVP</a>
+ <br>Hauppauge contacted me on 16 Dec 2003, and claims to be working on resolving this problem.
+ </li><li><a href="http://www.hitex.com/download/adescom/data/">TriCore</a>
+ </li><li><a href="http://www.allnet.de/">ALLNET 0186 wireless router</a>
+ </li><li><a href="http://www.dmmtv.com/">Dreambox DM7000S DVB Satellite Receiver</a>
+ <br> Dream Multimedia contacted me on 22 Dec 2003 and is working on resolving this problem.
+ <br> Source _may_ be here: http://cvs.tuxbox.org/cgi-bin/viewcvs.cgi/tuxbox/cdk/
+ </li><li><a href="http://testing.lkml.org/slashdot.php?mid=331690">Sigma Designs EM8500 based DVD players</a>
+ <br>Source for the Sigma Designs reference platform is found here<br>
+ <a href="http://www.uclinux.org/pub/uClinux/ports/arm/EM8500/uClinux-2.4-sigma.tar.gz">uClinux-2.4-sigma.tar.gz</a>, so while Sigma Designs itself appears to be in compliance, as far as I can tell,
+ no vendors of Sigma Designs EM8500 based devices actually comply with the GPL....
+ </li><li><a href="http://testing.lkml.org/slashdot.php?mid=433790">Liteon LVD2001 DVD player using the Sigma Designs EM8500</a>
+ </li><li><a href="http://www.rimax.net/">Rimax DVD players using the Sigma Designs EM8500</a>
+ </li><li><a href="http://www.vinc.us/">Bravo DVD players using the Sigma Designs EM8500</a>
+ </li><li><a href="http://www.hb-direct.com/">H&B DX3110 Divx player based on Sigma Designs EM8500</a>
+ </li><li><a href="http://www.recospa.it/mdpro1/index.php">United *DVX4066 mpeg4 capable DVD players</a>
+ </li><li><a href="http://www.a-link.com/RR64AP.html">Avaks alink Roadrunner 64</a>
+ <br> Partial source available, based on source distributed under NDA from <a href="http://www.lsilogic.com/products/dsl_platform_solutions/hb_linuxr2_2.html"> LSILogic</a>. Why the NDA LSILogic, what are you hiding ?
+ <br>To verify the Avaks infrigment see my slashdot <a href="http://slashdot.org/~bug1/journal/">journal</a>.
+ </li><li>Undoubtedly there are others... Please report them so we can shame them (or if necessary sue them) into compliance.
+
+</ul>
+
+
+<!--#include file="footer.html" -->
+
diff --git a/busybox/docs/busybox_footer.pod b/busybox/docs/busybox_footer.pod
new file mode 100644
index 0000000..f965711
--- /dev/null
+++ b/busybox/docs/busybox_footer.pod
@@ -0,0 +1,258 @@
+=back
+
+=head1 LIBC NSS
+
+GNU Libc (glibc) uses the Name Service Switch (NSS) to configure the behavior
+of the C library for the local environment, and to configure how it reads
+system data, such as passwords and group information. This is implemented
+using an /etc/nsswitch.conf configuration file, and using one or more of the
+/lib/libnss_* libraries. BusyBox tries to avoid using any libc calls that make
+use of NSS. Some applets however, such as login and su, will use libc functions
+that require NSS.
+
+If you enable CONFIG_USE_BB_PWD_GRP, BusyBox will use internal functions to
+directly access the /etc/passwd, /etc/group, and /etc/shadow files without
+using NSS. This may allow you to run your system without the need for
+installing any of the NSS configuration files and libraries.
+
+When used with glibc, the BusyBox 'networking' applets will similarly require
+that you install at least some of the glibc NSS stuff (in particular,
+/etc/nsswitch.conf, /lib/libnss_dns*, /lib/libnss_files*, and /lib/libresolv*).
+
+Shameless Plug: As an alternative, one could use a C library such as uClibc. In
+addition to making your system significantly smaller, uClibc does not require the
+use of any NSS support files or libraries.
+
+=head1 MAINTAINER
+
+Erik Andersen <andersen@codepoet.org>
+
+=head1 AUTHORS
+
+The following people have contributed code to BusyBox whether they know it or
+not. If you have written code included in BusyBox, you should probably be
+listed here so you can obtain your bit of eternal glory. If you should be
+listed here, or the description of what you have done needs more detail, or is
+incorect, please send in an update.
+
+
+=for html <br>
+
+Emanuele Aina <emanuele.aina@tiscali.it>
+ run-parts
+
+=for html <br>
+
+Erik Andersen <andersen@codepoet.org>
+
+ Tons of new stuff, major rewrite of most of the
+ core apps, tons of new apps as noted in header files.
+ Lots of tedious effort writing these boring docs that
+ nobody is going to actually read.
+
+=for html <br>
+
+Laurence Anderson <l.d.anderson@warwick.ac.uk>
+
+ rpm2cpio, unzip, get_header_cpio, read_gz interface, rpm
+
+=for html <br>
+
+Jeff Angielski <jeff@theptrgroup.com>
+
+ ftpput, ftpget
+
+=for html <br>
+
+Edward Betts <edward@debian.org>
+
+ expr, hostid, logname, whoami
+
+=for html <br>
+
+John Beppu <beppu@codepoet.org>
+
+ du, nslookup, sort
+
+=for html <br>
+
+Brian Candler <B.Candler@pobox.com>
+
+ tiny-ls(ls)
+
+=for html <br>
+
+Randolph Chung <tausq@debian.org>
+
+ fbset, ping, hostname
+
+=for html <br>
+
+Dave Cinege <dcinege@psychosis.com>
+
+ more(v2), makedevs, dutmp, modularization, auto links file,
+ various fixes, Linux Router Project maintenance
+
+=for html <br>
+
+Jordan Crouse <jordan@cosmicpenguin.net>
+
+ ipcalc
+
+=for html <br>
+
+Magnus Damm <damm@opensource.se>
+
+ tftp client insmod powerpc support
+
+=for html <br>
+
+Larry Doolittle <ldoolitt@recycle.lbl.gov>
+
+ pristine source directory compilation, lots of patches and fixes.
+
+=for html <br>
+
+Glenn Engel <glenne@engel.org>
+
+ httpd
+
+=for html <br>
+
+Gennady Feldman <gfeldman@gena01.com>
+
+ Sysklogd (single threaded syslogd, IPC Circular buffer support,
+ logread), various fixes.
+
+=for html <br>
+
+Karl M. Hegbloom <karlheg@debian.org>
+
+ cp_mv.c, the test suite, various fixes to utility.c, &c.
+
+=for html <br>
+
+Daniel Jacobowitz <dan@debian.org>
+
+ mktemp.c
+
+=for html <br>
+
+Matt Kraai <kraai@alumni.cmu.edu>
+
+ documentation, bugfixes, test suite
+
+=for html <br>
+
+Stephan Linz <linz@li-pro.net>
+
+ ipcalc, Red Hat equivalence
+
+=for html <br>
+
+John Lombardo <john@deltanet.com>
+
+ tr
+
+=for html <br>
+
+Glenn McGrath <bug1@iinet.net.au>
+
+ Common unarchving code and unarchiving applets, ifupdown, ftpgetput,
+ nameif, sed, patch, fold, install, uudecode.
+ Various bugfixes, review and apply numerous patches.
+
+=for html <br>
+
+Manuel Novoa III <mjn3@codepoet.org>
+
+ cat, head, mkfifo, mknod, rmdir, sleep, tee, tty, uniq, usleep, wc, yes,
+ mesg, vconfig, make_directory, parse_mode, dirname, mode_string,
+ get_last_path_component, simplify_path, and a number trivial libbb routines
+
+ also bug fixes, partial rewrites, and size optimizations in
+ ash, basename, cal, cmp, cp, df, du, echo, env, ln, logname, md5sum, mkdir,
+ mv, realpath, rm, sort, tail, touch, uname, watch, arith, human_readable,
+ interface, dutmp, ifconfig, route
+
+=for html <br>
+
+Vladimir Oleynik <dzo@simtreas.ru>
+
+ cmdedit; xargs(current), httpd(current);
+ ports: ash, crond, fdisk, inetd, stty, traceroute, top;
+ locale, various fixes
+ and irreconcilable critic of everything not perfect.
+
+=for html <br>
+
+Bruce Perens <bruce@pixar.com>
+
+ Original author of BusyBox in 1995, 1996. Some of his code can
+ still be found hiding here and there...
+
+=for html <br>
+
+Tim Riker <Tim@Rikers.org>
+
+ bug fixes, member of fan club
+
+=for html <br>
+
+Kent Robotti <robotti@metconnect.com>
+
+ reset, tons and tons of bug reports and patches.
+
+=for html <br>
+
+Chip Rosenthal <chip@unicom.com>, <crosenth@covad.com>
+
+ wget - Contributed by permission of Covad Communications
+
+=for html <br>
+
+Pavel Roskin <proski@gnu.org>
+
+ Lots of bugs fixes and patches.
+
+=for html <br>
+
+Gyepi Sam <gyepi@praxis-sw.com>
+
+ Remote logging feature for syslogd
+
+=for html <br>
+
+Linus Torvalds <torvalds@transmeta.com>
+
+ mkswap, fsck.minix, mkfs.minix
+
+=for html <br>
+
+Mark Whitley <markw@codepoet.org>
+
+ grep, sed, cut, xargs(previous),
+ style-guide, new-applet-HOWTO, bug fixes, etc.
+
+=for html <br>
+
+Charles P. Wright <cpwright@villagenet.com>
+
+ gzip, mini-netcat(nc)
+
+=for html <br>
+
+Enrique Zanardi <ezanardi@ull.es>
+
+ tarcat (since removed), loadkmap, various fixes, Debian maintenance
+
+=for html <br>
+
+Tito Ragusa <farmatito@tiscali.it>
+
+ devfsd and size optimizations in strings, openvt and deallocvt.
+
+=cut
+
+# $Id: busybox_footer.pod,v 1.18 2004/04/25 06:05:14 bug1 Exp $
+
diff --git a/busybox/docs/busybox_header.pod b/busybox/docs/busybox_header.pod
new file mode 100644
index 0000000..35631b8
--- /dev/null
+++ b/busybox/docs/busybox_header.pod
@@ -0,0 +1,111 @@
+# vi: set sw=4 ts=4:
+
+=head1 NAME
+
+BusyBox - The Swiss Army Knife of Embedded Linux
+
+=head1 SYNTAX
+
+ BusyBox <function> [arguments...] # or
+
+ <function> [arguments...] # if symlinked
+
+=head1 DESCRIPTION
+
+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 GNU coreutils, util-linux, etc. 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 Linux kernel.
+BusyBox provides a fairly complete POSIX environment for any small or embedded
+system.
+
+BusyBox is extremely configurable. This allows you to include only the
+components you need, thereby reducing binary size. Run 'make config' or 'make
+menuconfig' to select the functionality that you wish to enable. The run
+'make' to compile BusyBox using your configuration.
+
+After the compile has finished, you should use 'make install' to install
+BusyBox. This will install the '/bin/busybox' binary, and will also create
+symlinks pointing to the '/bin/busybox' binary for each utility that you
+compile into BusyBox. By default, 'make install' will place these symlinks
+into the './_install' directory, unless you have defined 'PREFIX', thereby
+specifying some alternative location (i.e., 'make PREFIX=/tmp/foo install').
+If you wish to install using hardlinks, rather than the default of using
+symlinks, you can use 'make PREFIX=/tmp/foo install-hardlinks' instead.
+
+=head1 USAGE
+
+BusyBox is a multi-call binary. A multi-call binary is an executable program
+that performs the same job as more than one utility program. That means there
+is just a single BusyBox binary, but that single binary acts like a large
+number of utilities. This allows BusyBox to be smaller since all the built-in
+utility programs (we call them applets) can share code for many common operations.
+
+You can also invoke BusyBox by issuing a command as an argument on the
+command line. For example, entering
+
+ /bin/busybox ls
+
+will also cause BusyBox to behave as 'ls'.
+
+Of course, adding '/bin/busybox' into every command would be painful. So most
+people will invoke BusyBox using links to the BusyBox binary.
+
+For example, entering
+
+ ln -s /bin/busybox ls
+ ./ls
+
+will cause BusyBox to behave as 'ls' (if the 'ls' command has been compiled
+into BusyBox). Generally speaking, you should never need to make all these
+links yourself, as the BusyBox build system will do this for you when you run
+the 'make install' command.
+
+If you invoke BusyBox with no arguments, it will provide you with a list of the
+applets that have been compiled into your BusyBox binary.
+
+=head1 COMMON OPTIONS
+
+Most BusyBox commands support the B<--help> argument to provide a terse runtime
+description of their behavior. If the CONFIG_FEATURE_VERBOSE_USAGE option has
+been enabled, more detailed usage information will also be available.
+
+=head1 COMMANDS
+
+Currently defined functions include:
+
+ addgroup, adduser, adjtimex, ar, arping, ash, awk, basename, bunzip2,
+ busybox, bzcat, cal, cat, chgrp, chmod, chown, chroot, chvt, clear, cmp,
+ cp, cpio, crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser,
+ devfsd, df, dirname, dmesg, dos2unix, dpkg, dpkg-deb, du, dumpkmap,
+ dumpleases, echo, egrep, env, expr, false, fbset, fdflush, fdformat, fdisk,
+ fgrep, find, fold, free, freeramdisk, fsck.minix, ftpget, ftpput, getopt,
+ getty, grep, gunzip, gzip, halt, hdparm, head, hexdump, hostid, hostname,
+ httpd, hush, hwclock, id, ifconfig, ifdown, ifup, inetd, init, insmod,
+ install, ip, ipaddr, ipcalc, iplink, iproute, iptunnel, kill, killall,
+ klogd, lash, last, length, linuxrc, ln, loadfont, loadkmap, logger, login,
+ logname, logread, losetup, ls, lsmod, makedevs, md5sum, mesg, mkdir,
+ mkfifo, mkfs.minix, mknod, mkswap, mktemp, modprobe, more, mount, msh, mt,
+ mv, nameif, nc, netstat, nslookup, od, openvt, passwd, patch, pidof, ping,
+ ping6, pipe_progress, pivot_root, poweroff, printf, ps, pwd, rdate,
+ readlink, realpath, reboot, renice, reset, rm, rmdir, rmmod, route, rpm,
+ rpm2cpio, run-parts, rx, sed, seq, setkeycodes, sha1sum, sleep, sort,
+ start-stop-daemon, strings, stty, su, sulogin, swapoff, swapon, sync,
+ sysctl, syslogd, tail, tar, tee, telnet, telnetd, test, tftp, time, top,
+ touch, tr, traceroute, true, tty, udhcpc, udhcpd, umount, uname,
+ uncompress, uniq, unix2dos, unzip, uptime, usleep, uudecode, uuencode,
+ vconfig, vi, vlock, watch, watchdog, wc, wget, which, who, whoami, xargs,
+ yes, zcat
+
+=head1 COMMAND DESCRIPTIONS
+
+=over 4
+
+
diff --git a/busybox/docs/contributing.txt b/busybox/docs/contributing.txt
new file mode 100644
index 0000000..e80fc13
--- /dev/null
+++ b/busybox/docs/contributing.txt
@@ -0,0 +1,449 @@
+Contributing To Busybox
+=======================
+
+This document describes what you need to do to contribute to Busybox, where
+you can help, guidelines on testing, and how to submit a well-formed patch
+that is more likely to be accepted.
+
+The Busybox home page is at: http://busybox.net/
+
+
+
+Pre-Contribution Checklist
+--------------------------
+
+So you want to contribute to Busybox, eh? Great, wonderful, glad you want to
+help. However, before you dive in, headlong and hotfoot, there are some things
+you need to do:
+
+
+Checkout the Latest Code from CVS
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This is a necessary first step. Please do not try to work with the last
+released version, as there is a good chance that somebody has already fixed
+the bug you found. Somebody might have even added the feature you had in mind.
+Don't make your work obsolete before you start!
+
+For information on how to check out Busybox from CVS, please look at the
+following links:
+
+ http://busybox.net/cvs_anon.html
+ http://busybox.net/cvs_howto.html
+
+
+Read the Mailing List
+~~~~~~~~~~~~~~~~~~~~~
+
+No one is required to read the entire archives of the mailing list, but you
+should at least read up on what people have been talking about lately. If
+you've recently discovered a problem, chances are somebody else has too. If
+you're the first to discover a problem, post a message and let the rest of us
+know.
+
+Archives can be found here:
+
+ http://busybox.net/lists/busybox/
+
+If you have a serious interest in Busybox, i.e., you are using it day-to-day or
+as part of an embedded project, it would be a good idea to join the mailing
+list.
+
+A web-based sign-up form can be found here:
+
+ http://busybox.net/mailman/listinfo/busybox
+
+
+Coordinate with the Applet Maintainer
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Some (not all) of the applets in Busybox are "owned" by a maintainer who has
+put significant effort into it and is probably more familiar with it than
+others. To find the maintainer of an applet, look at the top of the .c file
+for a name following the word 'Copyright' or 'Written by' or 'Maintainer'.
+
+Before plunging ahead, it's a good idea to send a message to the mailing list
+that says: "Hey, I was thinking about adding the 'transmogrify' feature to the
+'foo' applet. Would this be useful? Is anyone else working on it?" You might
+want to CC the maintainer (if any) with your question.
+
+
+
+Areas Where You Can Help
+------------------------
+
+Busybox can always use improvement! If you're looking for ways to help, there
+are a variety of areas where you could help.
+
+
+What Busybox Doesn't Need
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Before listing the areas where you _can_ help, it's worthwhile to mention the
+areas where you shouldn't bother. While Busybox strives to be the "Swiss Army
+Knife" of embedded Linux, there are some applets that will not be accepted:
+
+ - Any filesystem manipulation tools: Busybox is filesystem independent and
+ we do not want to start adding mkfs/fsck tools for every (or any)
+ filesystem under the sun. (fsck_minix.c and mkfs_minix.c are living on
+ borrowed time.) There are far too many of these tools out there. Use
+ the upstream version. Not everything has to be part of Busybox.
+
+ - Any partitioning tools: Partitioning a device is typically done once and
+ only once, and tools which do this generally do not need to reside on the
+ target device (esp a flash device). If you need a partitioning tool, grab
+ one (such as fdisk, sfdisk, or cfdisk from util-linux) and use that, but
+ don't try to merge it into busybox. These are nasty and complex and we
+ don't want to maintain them.
+
+ - Any disk, device, or media-specific tools: Use the -utils or -tools package
+ that was designed for your device; don't try to shoehorn them into Busybox.
+
+ - Any architecture specific tools: Busybox is (or should be) architecture
+ independent. Do not send us tools that cannot be used across multiple
+ platforms / arches.
+
+ - Any daemons that are not essential to basic system operation. To date, only
+ syslogd and klogd meet this requirement. We do not need a web server, an
+ ftp daemon, a dhcp server, a mail transport agent or a dns resolver. If you
+ need one of those, you are welcome to ask the folks on the mailing list for
+ recommendations, but please don't bloat up Busybox with any of these.
+
+
+Bug Reporting
+~~~~~~~~~~~~~
+
+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
+
+ Package: busybox
+ Version: 1.00
+
+ 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
+
+ But when I use BusyBox date I get this instead:
+
+ $ date
+ llegal 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!
+
+ -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.
+
+
+
+Write Documentation
+~~~~~~~~~~~~~~~~~~~
+
+Chances are, documentation in Busybox is either missing or needs improvement.
+Either way, help is welcome.
+
+Work is being done to automatically generate documentation from sources,
+especially from the usage.h file. If you want to correct the documentation,
+please make changes to the pre-generation parts, rather than the generated
+documentation. [More to come on this later...]
+
+It is preferred that modifications to documentation be submitted in patch
+format (more on this below), but we're a little more lenient when it comes to
+docs. You could, for example, just say "after the listing of the mount
+options, the following example would be helpful..."
+
+
+Consult Existing Sources
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+For a quick listing of "needs work" spots in the sources, cd into the Busybox
+directory and run the following:
+
+ for i in TODO FIXME XXX; do find -name '*.[ch]'|xargs grep $i; done
+
+This will show all of the trouble spots or 'questionable' code. Pick a spot,
+any spot, these are all invitations for you to contribute.
+
+
+Add a New Applet
+~~~~~~~~~~~~~~~~
+
+If you want to add a new applet to Busybox, we'd love to see it. However,
+before you write any code, please ask beforehand on the mailing list something
+like "Do you think applet 'foo' would be useful in Busybox?" or "Would you
+guys accept applet 'foo' into Busybox if I were to write it?" If the answer is
+"no" by the folks on the mailing list, then you've saved yourself some time.
+Conversely, you could get some positive responses from folks who might be
+interested in helping you implement it, or can recommend the best approach.
+Perhaps most importantly, this is your way of calling "dibs" on something and
+avoiding duplication of effort.
+
+Also, before you write a line of code, please read the 'new-applet-HOWTO.txt'
+file in the docs/ directory.
+
+
+Janitorial Work
+~~~~~~~~~~~~~~~
+
+These are dirty jobs, but somebody's gotta do 'em.
+
+ - Converting applets to use getopt() for option processing. Type 'find -name
+ '*.c'|grep -L getopt' to get a listing of the applets that currently don't
+ use getopt. If a .c file processes no options, it should have a line that
+ reads: /* no options, no getopt */ somewhere in the file.
+
+ - Replace any "naked" calls to malloc, calloc, realloc, str[n]dup, fopen with
+ the x* equivalents found in libbb/xfuncs.c.
+
+ - Security audits:
+ http://www.securityfocus.com/popups/forums/secprog/intro.shtml
+
+ - Synthetic code removal: http://www.perl.com/pub/2000/06/commify.html - This
+ is very Perl-specific, but the advice given in here applies equally well to
+ C.
+
+ - C library function use audits: Verifying that functions are being used
+ properly (called with the right args), replacing unsafe library functions
+ with safer versions, making sure return codes are being checked, etc.
+
+ - Where appropriate, replace preprocessor defined macros and values with
+ compile-time equivalents.
+
+ - Style guide compliance. See: docs/style-guide.txt
+
+ - Add testcases to tests/testcases.
+
+ - Makefile improvements:
+ http://www.canb.auug.org.au/~millerp/rmch/recu-make-cons-harm.html
+ (I think the recursive problems are pretty much taken care of at this point, non?)
+
+ - "Ten Commandments" compliance: (this is a "maybe", certainly not as
+ important as any of the previous items.)
+ http://www.lysator.liu.se/c/ten-commandments.html
+
+Other useful links:
+
+ - the comp.lang.c FAQ: http://web.onetelnet.ch/~twolf/tw/c/index.html#Sources
+
+
+
+Submitting Patches To Busybox
+-----------------------------
+
+Here are some guidelines on how to submit a patch to Busybox.
+
+
+Making A Patch
+~~~~~~~~~~~~~~
+
+If you've got anonymous CVS access set up, making a patch is simple. Just make
+sure you're in the busybox/ directory and type 'cvs diff -bwu > mychanges.patch'.
+You can send the resulting .patch file to the mailing list with a description
+of what it does. (But not before you test it! See the next section for some
+guidelines.) It is preferred that patches be sent as attachments, but it is
+not required.
+
+Also, feel free to help test other people's patches and reply to them with
+comments. You can apply a patch by saving it into your busybox/ directory and
+typing 'patch < mychanges.patch'. Then you can recompile, see if it runs, test
+if it works as advertised, and post your findings to the mailing list.
+
+NOTE: Please do not include extraneous or irrelevant changes in your patches.
+Please do not try to "bundle" two patches together into one. Make single,
+discreet changes on a per-patch basis. Sometimes you need to make a patch that
+touches code in many places, but these kind of patches are rare and should be
+coordinated with a maintainer.
+
+
+Testing Guidelines
+~~~~~~~~~~~~~~~~~~
+
+It's considered good form to test your new feature before you submit a patch
+to the mailing list, and especially before you commit a change to CVS. Here
+are some guidelines on how to test your changes.
+
+ - Always test Busybox applets against GNU counterparts and make sure the
+ behavior / output is identical between the two.
+
+ - Try several different permutations and combinations of the features you're
+ adding (i.e., different combinations of command-line switches) and make sure
+ they all work; make sure one feature does not interfere with another.
+
+ - Make sure you test compiling against the source both with the feature
+ turned on and turned off in Config.h and make sure Busybox compiles cleanly
+ both ways.
+
+ - Run the multibuild.pl script in the tests directory and make sure
+ everything checks out OK. (Do this from within the busybox/ directory by
+ typing: 'tests/multibuild.pl'.)
+
+
+Making Sure Your Patch Doesn't Get Lost
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you don't want your patch to be lost or forgotten, send it to the busybox
+mailing list with a subject line something like this:
+
+ [PATCH] - Adds "transmogrify" feature to "foo"
+
+In the body, you should have a pseudo-header that looks like the following:
+
+ Package: busybox
+ Version: v1.01pre (or whatever the current version is)
+ Severity: wishlist
+
+The remainder of the body should read along these lines:
+
+ This patch adds the "transmogrify" feature to the "foo" applet. I have
+ tested this on [arch] system(s) and it works. I have tested it against the
+ GNU counterparts and the outputs are identical. I have run the scripts in
+ the 'tests' directory and nothing breaks.
+
+
+
+Improving Your Chances of Patch Acceptance
+------------------------------------------
+
+Even after you send a brilliant patch to the mailing list, sometimes it can go
+unnoticed, un-replied-to, and sometimes (sigh) even lost. This is an
+unfortunate fact of life, but there are steps you can take to help your patch
+get noticed and convince a maintainer that it should be added:
+
+
+Be Succinct
+~~~~~~~~~~~
+
+A patch that includes small, isolated, obvious changes is more likely to be
+accepted than a patch that touches code in lots of different places or makes
+sweeping, dubious changes.
+
+
+Back It Up
+~~~~~~~~~~
+
+Hard facts on why your patch is better than the existing code will go a long
+way toward convincing maintainers that your patch should be included.
+Specifically, patches are more likely to be accepted if they are provably more
+correct, smaller, faster, simpler, or more maintainable than the existing
+code.
+
+Conversely, any patch that is supported with nothing more than "I think this
+would be cool" or "this patch is good because I say it is and I've got a Phd
+in Computer Science" will likely be ignored.
+
+
+Follow The Style Guide
+~~~~~~~~~~~~~~~~~~~~~~
+
+It's considered good form to abide by the established coding style used in a
+project; Busybox is no exception. We have gone so far as to delineate the
+"elements of Busybox style" in the file docs/style-guide.txt. Please follow
+them.
+
+
+Work With Someone Else
+~~~~~~~~~~~~~~~~~~~~~~
+
+Working on a patch in isolation is less effective than working with someone
+else for a variety of reasons. If another Busybox user is interested in what
+you're doing, then it's two (or more) voices instead of one that can petition
+for inclusion of the patch. You'll also have more people that can test your
+changes, or even offer suggestions on better approaches you could take.
+
+Getting other folks interested follows as a natural course if you've received
+responses from queries to applet maintainer or positive responses from folks
+on the mailing list.
+
+We've made strident efforts to put a useful "collaboration" infrastructure in
+place in the form of mailing lists, the bug tracking system, and CVS. Please
+use these resources.
+
+
+Send Patches to the Bug Tracking System
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This was mentioned above in the "Making Sure Your Patch Doesn't Get Lost"
+section, but it is worth mentioning again. A patch sent to the mailing list
+might be unnoticed and forgotten. A patch sent to the bug tracking system will
+be stored and closely connected to the bug it fixes.
+
+
+Be Polite
+~~~~~~~~~
+
+The old saying "You'll catch more flies with honey than you will with vinegar"
+applies when submitting patches to the mailing list for approval. The way you
+present your patch is sometimes just as important as the actual patch itself
+(if not more so). Being rude to the maintainers is not an effective way to
+convince them that your patch should be included; it will likely have the
+opposite effect.
+
+
+
+Committing Changes to CVS
+-------------------------
+
+If you submit several patches that demonstrate that you are a skilled and wise
+coder, you may be invited to become a committer, thus enabling you to commit
+changes directly to CVS. This is nice because you don't have to wait for
+someone else to commit your change for you, you can just do it yourself.
+
+But note that this is a priviledge that comes with some responsibilities. You
+should test your changes before you commit them. You should also talk to an
+applet maintainer before you make any kind of sweeping changes to somebody
+else's code. Big changes should still go to the mailing list first. Remember,
+being wise, polite, and discreet is more important than being clever.
+
+
+When To Commit
+~~~~~~~~~~~~~~
+
+Generally, you should feel free to commit a change if:
+
+ - Your changes are small and don't touch many files
+ - You are fixing a bug
+ - Somebody has told you that it's okay
+ - It's obviously the Right Thing
+
+The more of the above are true, the better it is to just commit a change
+directly to CVS.
+
+
+When Not To Commit
+~~~~~~~~~~~~~~~~~~
+
+Even if you have commit rights, you should probably still post a patch to the
+mailing list if:
+
+ - Your changes are broad and touch many different files
+ - You are adding a feature
+ - Your changes are speculative or experimental (i.e., trying a new algorithm)
+ - You are not the maintainer and your changes make the maintainer cringe
+
+The more of the above are true, the better it is to post a patch to the
+mailing list instead of committing.
+
+
+
+Final Words
+-----------
+
+If all of this seems complicated, don't panic, it's really not that tough. If
+you're having difficulty following some of the steps outlined in this
+document don't worry, the folks on the Busybox mailing list are a fairly
+good-natured bunch and will work with you to help get your patches into shape
+or help you make contributions.
+
+
diff --git a/busybox/docs/new-applet-HOWTO.txt b/busybox/docs/new-applet-HOWTO.txt
new file mode 100644
index 0000000..2fc95d3
--- /dev/null
+++ b/busybox/docs/new-applet-HOWTO.txt
@@ -0,0 +1,163 @@
+How to Add a New Applet to BusyBox
+==================================
+
+This document details the steps you must take to add a new applet to BusyBox.
+
+Credits:
+Matt Kraai - initial writeup
+Mark Whitley - the remix
+Thomas Lundquist - Added stuff for the new directory layout.
+
+Initial Write
+-------------
+
+First, write your applet. Be sure to include copyright information at the
+top, such as who you stole the code from and so forth. Also include the
+mini-GPL boilerplate. Be sure to name the main function <applet>_main instead
+of main. And be sure to put it in <applet>.c. Usage do not have to be taken care of by your applet.
+
+For a new applet mu, here is the code that would go in mu.c:
+
+----begin example code------
+
+/* vi: set sw=4 ts=4: */
+/*
+ * Mini mu implementation for busybox
+ *
+ *
+ * Copyright (C) [YEAR] by [YOUR NAME] <YOUR EMAIL>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307 USA
+ *
+ */
+
+#include "busybox.h"
+
+int mu_main(int argc, char **argv)
+{
+ int fd;
+ char mu;
+
+ if ((fd = open("/dev/random", O_RDONLY)) < 0)
+ perror_msg_and_die("/dev/random");
+
+ if ((n = safe_read(fd, &mu, 1)) < 1)
+ perror_msg_and_die("/dev/random");
+
+ return mu;
+}
+
+----end example code------
+
+
+Coding Style
+------------
+
+Before you submit your applet for inclusion in BusyBox, (or better yet, before
+you _write_ your applet) please read through the style guide in the docs
+directory and make your program compliant.
+
+
+Some Words on libbb
+-------------------
+
+As you are writing your applet, please be aware of the body of pre-existing
+useful functions in libbb. Use these instead of reinventing the wheel.
+
+Additionally, if you have any useful, general-purpose functions in your
+program that could be useful in another program, consider putting them in
+libbb.
+
+
+Placement / Directory
+---------------------
+
+Find the appropriate directory for your new applet.
+
+Make sure you find the appropriate places in the files, the applets are
+sorted alphabetically.
+
+Add the applet to Makefile.in in the chosen applet directory:
+
+obj-$(CONFIG_MU) += mu.o
+
+Add the applet to Config.in in the chosen applet directory:
+
+config CONFIG_MU
+ bool "MU"
+ default n
+ help
+ Returns an indeterminate value.
+
+
+Usage String(s)
+---------------
+
+Next, add usage information for you applet to include/usage.h.
+This should look like the following:
+
+ #define mu_trivial_usage \
+ "-[abcde] FILES"
+ #define mu_full_usage \
+ "Returns an indeterminate value.\n\n" \
+ "Options:\n" \
+ "\t-a\t\tfirst function\n" \
+ "\t-b\t\tsecond function\n" \
+
+If your program supports flags, the flags should be mentioned on the first
+line (-[abcde]) and a detailed description of each flag should go in the
+mu_full_usage section, one flag per line. (Numerous examples of this
+currently exist in usage.h.)
+
+
+Header Files
+------------
+
+Next, add an entry to include/applets.h. Be *sure* to keep the list
+in alphabetical order, or else it will break the binary-search lookup
+algorithm in busybox.c and the Gods of BusyBox smite you. Yea, verily:
+
+ /* all programs above here are alphabetically "less than" 'mu' */
+ #ifdef CONFIG_MU
+ APPLET("mu", mu_main, _BB_DIR_USR_BIN, mu_usage)
+ #endif
+ /* all programs below here are alphabetically "greater than" 'mu' */
+
+
+Finally, add a define for your applet to include/config.h
+
+ #undef CONFIG_MU
+
+
+Documentation
+-------------
+
+If you're feeling especially nice, you should also document your applet in the
+docs directory (but nobody ever does that).
+
+Adding some text to docs/Configure.help is a nice start.
+
+
+The Grand Announcement
+----------------------
+
+Then create a diff -urN of the files you added (<appletdir/><applet>.c,
+include/usage.c, include/applets.h, include/config.h, <appletdir>/Makefile.in, <appletdir>/config.in)
+and send it to the mailing list:
+busybox@busybox.net.
+
+Sending patches as attachments is preferred, but not required.
+
diff --git a/busybox/docs/style-guide.txt b/busybox/docs/style-guide.txt
new file mode 100644
index 0000000..915d9b2
--- /dev/null
+++ b/busybox/docs/style-guide.txt
@@ -0,0 +1,680 @@
+Busybox Style Guide
+===================
+
+This document describes the coding style conventions used in Busybox. If you
+add a new file to Busybox or are editing an existing file, please format your
+code according to this style. If you are the maintainer of a file that does
+not follow these guidelines, please -- at your own convenience -- modify the
+file(s) you maintain to bring them into conformance with this style guide.
+Please note that this is a low priority task.
+
+To help you format the whitespace of your programs, an ".indent.pro" file is
+included in the main Busybox source directory that contains option flags to
+format code as per this style guide. This way you can run GNU indent on your
+files by typing 'indent myfile.c myfile.h' and it will magically apply all the
+right formatting rules to your file. Please _do_not_ run this on all the files
+in the directory, just your own.
+
+
+
+Declaration Order
+-----------------
+
+Here is the order in which code should be laid out in a file:
+
+ - commented program name and one-line description
+ - commented author name and email address(es)
+ - commented GPL boilerplate
+ - commented longer description / notes for the program (if needed)
+ - #includes of .h files with angle brackets (<>) around them
+ - #includes of .h files with quotes ("") around them
+ - #defines (if any, note the section below titled "Avoid the Preprocessor")
+ - const and global variables
+ - function declarations (if necessary)
+ - function implementations
+
+
+
+Whitespace and Formatting
+-------------------------
+
+This is everybody's favorite flame topic so let's get it out of the way right
+up front.
+
+
+Tabs vs. Spaces in Line Indentation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The preference in Busybox is to indent lines with tabs. Do not indent lines
+with spaces and do not indents lines using a mixture of tabs and spaces. (The
+indentation style in the Apache and Postfix source does this sort of thing:
+\s\s\s\sif (expr) {\n\tstmt; --ick.) The only exception to this rule is
+multi-line comments that use an asterisk at the beginning of each line, i.e.:
+
+ /t/*
+ /t * This is a block comment.
+ /t * Note that it has multiple lines
+ /t * and that the beginning of each line has a tab plus a space
+ /t * except for the opening '/*' line where the slash
+ /t * is used instead of a space.
+ /t */
+
+Furthermore, The preference is that tabs be set to display at four spaces
+wide, but the beauty of using only tabs (and not spaces) at the beginning of
+lines is that you can set your editor to display tabs at *whatever* number of
+spaces is desired and the code will still look fine.
+
+
+Operator Spacing
+~~~~~~~~~~~~~~~~
+
+Put spaces between terms and operators. Example:
+
+ Don't do this:
+
+ for(i=0;i<num_items;i++){
+
+ Do this instead:
+
+ for (i = 0; i < num_items; i++) {
+
+ While it extends the line a bit longer, the spaced version is more
+ readable. An allowable exception to this rule is the situation where
+ excluding the spacing makes it more obvious that we are dealing with a
+ single term (even if it is a compound term) such as:
+
+ if (str[idx] == '/' && str[idx-1] != '\\')
+
+ or
+
+ if ((argc-1) - (optind+1) > 0)
+
+
+Bracket Spacing
+~~~~~~~~~~~~~~~
+
+If an opening bracket starts a function, it should be on the
+next line with no spacing before it. However, if a bracket follows an opening
+control block, it should be on the same line with a single space (not a tab)
+between it and the opening control block statement. Examples:
+
+ Don't do this:
+
+ while (!done)
+ {
+
+ do
+ {
+
+ Don't do this either:
+
+ while (!done){
+
+ do{
+
+ And for heaven's sake, don't do this:
+
+ while (!done)
+ {
+
+ do
+ {
+
+ Do this instead:
+
+ while (!done) {
+
+ do {
+
+
+Spacing around Parentheses
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Put a space between C keywords and left parens, but not between function names
+and the left paren that starts it's parameter list (whether it is being
+declared or called). Examples:
+
+ Don't do this:
+
+ while(foo) {
+ for(i = 0; i < n; i++) {
+
+ Do this instead:
+
+ while (foo) {
+ for (i = 0; i < n; i++) {
+
+ But do functions like this:
+
+ static int my_func(int foo, char bar)
+ ...
+ baz = my_func(1, 2);
+
+Also, don't put a space between the left paren and the first term, nor between
+the last arg and the right paren.
+
+ Don't do this:
+
+ if ( x < 1 )
+ strcmp( thisstr, thatstr )
+
+ Do this instead:
+
+ if (x < 1)
+ strcmp(thisstr, thatstr)
+
+
+Cuddled Elses
+~~~~~~~~~~~~~
+
+Also, please "cuddle" your else statements by putting the else keyword on the
+same line after the right bracket that closes an 'if' statement.
+
+ Don't do this:
+
+ if (foo) {
+ stmt;
+ }
+ else {
+ stmt;
+ }
+
+ Do this instead:
+
+ if (foo) {
+ stmt;
+ } else {
+ stmt;
+ }
+
+The exception to this rule is if you want to include a comment before the else
+block. Example:
+
+ if (foo) {
+ stmts...
+ }
+ /* otherwise, we're just kidding ourselves, so re-frob the input */
+ else {
+ other_stmts...
+ }
+
+
+
+Variable and Function Names
+---------------------------
+
+Use the K&R style with names in all lower-case and underscores occasionally
+used to separate words (e.g., "variable_name" and "numchars" are both
+acceptable). Using underscores makes variable and function names more readable
+because it looks like whitespace; using lower-case is easy on the eyes.
+
+ Frowned upon:
+
+ hitList
+ TotalChars
+ szFileName
+ pf_Nfol_TriState
+
+ Preferred:
+
+ hit_list
+ total_chars
+ file_name
+ sensible_name
+
+Exceptions:
+
+ - Enums, macros, and constant variables are occasionally written in all
+ upper-case with words optionally seperatedy by underscores (i.e. FIFOTYPE,
+ ISBLKDEV()).
+
+ - Nobody is going to get mad at you for using 'pvar' as the name of a
+ variable that is a pointer to 'var'.
+
+
+Converting to K&R
+~~~~~~~~~~~~~~~~~
+
+The Busybox codebase is very much a mixture of code gathered from a variety of
+sources. This explains why the current codebase contains such a hodge-podge of
+different naming styles (Java, Pascal, K&R, just-plain-weird, etc.). The K&R
+guideline explained above should therefore be used on new files that are added
+to the repository. Furthermore, the maintainer of an existing file that uses
+alternate naming conventions should, at his own convenience, convert those
+names over to K&R style. Converting variable names is a very low priority
+task.
+
+If you want to do a search-and-replace of a single variable name in different
+files, you can do the following in the busybox directory:
+
+ $ perl -pi -e 's/\bOldVar\b/new_var/g' *.[ch]
+
+If you want to convert all the non-K&R vars in your file all at once, follow
+these steps:
+
+ - In the busybox directory type 'examples/mk2knr.pl files-to-convert'. This
+ does not do the actual conversion, rather, it generates a script called
+ 'convertme.pl' that shows what will be converted, giving you a chance to
+ review the changes beforehand.
+
+ - Review the 'convertme.pl' script that gets generated in the busybox
+ directory and remove / edit any of the substitutions in there. Please
+ especially check for false positives (strings that should not be
+ converted).
+
+ - Type './convertme.pl same-files-as-before' to perform the actual
+ conversion.
+
+ - Compile and see if everything still works.
+
+Please be aware of changes that have cascading effects into other files. For
+example, if you're changing the name of something in, say utility.c, you
+should probably run 'examples/mk2knr.pl utility.c' at first, but when you run
+the 'convertme.pl' script you should run it on _all_ files like so:
+'./convertme.pl *.[ch]'.
+
+
+
+Avoid The Preprocessor
+----------------------
+
+At best, the preprocessor is a necessary evil, helping us account for platform
+and architecture differences. Using the preprocessor unnecessarily is just
+plain evil.
+
+
+The Folly of #define
+~~~~~~~~~~~~~~~~~~~~
+
+Use 'const <type> var' for declaring constants.
+
+ Don't do this:
+
+ #define var 80
+
+ Do this instead, when the variable is in a header file and will be used in
+ several source files:
+
+ const int var = 80;
+
+ Or do this when the variable is used only in a single source file:
+
+ static const int var = 80;
+
+Declaring variables as '[static] const' gives variables an actual type and
+makes the compiler do type checking for you; the preprocessor does _no_ type
+checking whatsoever, making it much more error prone. Declaring variables with
+'[static] const' also makes debugging programs much easier since the value of
+the variable can be easily queried and displayed.
+
+
+The Folly of Macros
+~~~~~~~~~~~~~~~~~~~
+
+Use 'static inline' instead of a macro.
+
+ Don't do this:
+
+ #define mini_func(param1, param2) (param1 << param2)
+
+ Do this instead:
+
+ static inline int mini_func(int param1, param2)
+ {
+ return (param1 << param2);
+ }
+
+Static inline functions are greatly preferred over macros. They provide type
+safety, have no length limitations, no formatting limitations, have an actual
+return value, and under gcc they are as cheap as macros. Besides, really long
+macros with backslashes at the end of each line are ugly as sin.
+
+
+The Folly of #ifdef
+~~~~~~~~~~~~~~~~~~~
+
+Code cluttered with ifdefs is difficult to read and maintain. Don't do it.
+Instead, put your ifdefs at the top of your .c file (or in a header), and
+conditionally define 'static inline' functions, (or *maybe* macros), which are
+used in the code.
+
+ Don't do this:
+
+ ret = my_func(bar, baz);
+ if (!ret)
+ return -1;
+ #ifdef CONFIG_FEATURE_FUNKY
+ maybe_do_funky_stuff(bar, baz);
+ #endif
+
+ Do this instead:
+
+ (in .h header file)
+
+ #ifdef CONFIG_FEATURE_FUNKY
+ static inline void maybe_do_funky_stuff (int bar, int baz)
+ {
+ /* lotsa code in here */
+ }
+ #else
+ static inline void maybe_do_funky_stuff (int bar, int baz) {}
+ #endif
+
+ (in the .c source file)
+
+ ret = my_func(bar, baz);
+ if (!ret)
+ return -1;
+ maybe_do_funky_stuff(bar, baz);
+
+The great thing about this approach is that the compiler will optimize away
+the "no-op" case (the empty function) when the feature is turned off.
+
+Note also the use of the word 'maybe' in the function name to indicate
+conditional execution.
+
+
+
+Notes on Strings
+----------------
+
+Strings in C can get a little thorny. Here's some guidelines for dealing with
+strings in Busybox. (There is surely more that could be added to this
+section.)
+
+
+String Files
+~~~~~~~~~~~~
+
+Put all help/usage messages in usage.c. Put other strings in messages.c.
+Putting these strings into their own file is a calculated decision designed to
+confine spelling errors to a single place and aid internationalization
+efforts, if needed. (Side Note: we might want to use a single file - maybe
+called 'strings.c' - instead of two, food for thought).
+
+
+Testing String Equivalence
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+There's a right way and a wrong way to test for sting equivalence with
+strcmp():
+
+ The wrong way:
+
+ if (!strcmp(string, "foo")) {
+ ...
+
+ The right way:
+
+ if (strcmp(string, "foo") == 0){
+ ...
+
+The use of the "equals" (==) operator in the latter example makes it much more
+obvious that you are testing for equivalence. The former example with the
+"not" (!) operator makes it look like you are testing for an error. In a more
+perfect world, we would have a streq() function in the string library, but
+that ain't the world we're living in.
+
+
+Avoid Dangerous String Functions
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Unfortunately, the way C handles strings makes them prone to overruns when
+certain library functions are (mis)used. The following table offers a summary
+of some of the more notorious troublemakers:
+
+function overflows preferred
+----------------------------------------
+strcpy dest string strncpy
+strcat dest string strncat
+gets string it gets fgets
+getwd buf string getcwd
+[v]sprintf str buffer [v]snprintf
+realpath path buffer use with pathconf
+[vf]scanf its arguments just avoid it
+
+
+The above is by no means a complete list. Be careful out there.
+
+
+
+Avoid Big Static Buffers
+------------------------
+
+First, some background to put this discussion in context: Static buffers look
+like this in code:
+
+ /* in a .c file outside any functions */
+ static char *buffer[BUFSIZ]; /* happily used by any function in this file,
+ but ick! big! */
+
+The problem with these is that any time any busybox app is run, you pay a
+memory penalty for this buffer, even if the applet that uses said buffer is
+not run. This can be fixed, thusly:
+
+ static char *buffer;
+ ...
+ other_func()
+ {
+ strcpy(buffer, lotsa_chars); /* happily uses global *buffer */
+ ...
+ foo_main()
+ {
+ buffer = xmalloc(sizeof(char)*BUFSIZ);
+ ...
+
+However, this approach trades bss segment for text segment. Rather than
+mallocing the buffers (and thus growing the text size), buffers can be
+declared on the stack in the *_main() function and made available globally by
+assigning them to a global pointer thusly:
+
+ static char *pbuffer;
+ ...
+ other_func()
+ {
+ strcpy(pbuffer, lotsa_chars); /* happily uses global *pbuffer */
+ ...
+ foo_main()
+ {
+ char *buffer[BUFSIZ]; /* declared locally, on stack */
+ pbuffer = buffer; /* but available globally */
+ ...
+
+This last approach has some advantages (low code size, space not used until
+it's needed), but can be a problem in some low resource machines that have
+very limited stack space (e.g., uCLinux).
+
+A macro is declared in busybox.h that implements compile-time selection
+between xmalloc() and stack creation, so you can code the line in question as
+
+ RESERVE_CONFIG_BUFFER(buffer, BUFSIZ);
+
+and the right thing will happen, based on your configuration.
+
+
+
+Miscellaneous Coding Guidelines
+-------------------------------
+
+The following are important items that don't fit into any of the above
+sections.
+
+
+Model Busybox Applets After GNU Counterparts
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When in doubt about the proper behavior of a Busybox program (output,
+formatting, options, etc.), model it after the equivalent GNU program.
+Doesn't matter how that program behaves on some other flavor of *NIX; doesn't
+matter what the POSIX standard says or doesn't say, just model Busybox
+programs after their GNU counterparts and it will make life easier on (nearly)
+everyone.
+
+The only time we deviate from emulating the GNU behavior is when:
+
+ - We are deliberately not supporting a feature (such as a command line
+ switch)
+ - Emulating the GNU behavior is prohibitively expensive (lots more code
+ would be required, lots more memory would be used, etc.)
+ - The difference is minor or cosmetic
+
+A note on the 'cosmetic' case: Output differences might be considered
+cosmetic, but if the output is significant enough to break other scripts that
+use the output, it should really be fixed.
+
+
+Scope
+~~~~~
+
+If a const variable is used only in a single source file, put it in the source
+file and not in a header file. Likewise, if a const variable is used in only
+one function, do not make it global to the file. Instead, declare it inside
+the function body. Bottom line: Make a conscious effort to limit declarations
+to the smallest scope possible.
+
+Inside applet files, all functions should be declared static so as to keep the
+global name space clean. The only exception to this rule is the "applet_main"
+function which must be declared extern.
+
+If you write a function that performs a task that could be useful outside the
+immediate file, turn it into a general-purpose function with no ties to any
+applet and put it in the utility.c file instead.
+
+
+Brackets Are Your Friends
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Please use brackets on all if and else statements, even if it is only one
+line. Example:
+
+ Don't do this:
+
+ if (foo)
+ stmt1;
+ stmt2
+ stmt3;
+
+ Do this instead:
+
+ if (foo) {
+ stmt1;
+ }
+ stmt2
+ stmt3;
+
+The "bracketless" approach is error prone because someday you might add a line
+like this:
+
+ if (foo)
+ stmt1;
+ new_line();
+ stmt2
+ stmt3;
+
+And the resulting behavior of your program would totally bewilder you. (Don't
+laugh, it happens to us all.) Remember folks, this is C, not Python.
+
+
+Function Declarations
+~~~~~~~~~~~~~~~~~~~~~
+
+Do not use old-style function declarations that declare variable types between
+the parameter list and opening bracket. Example:
+
+ Don't do this:
+
+ int foo(parm1, parm2)
+ char parm1;
+ float parm2;
+ {
+ ....
+
+ Do this instead:
+
+ int foo(char parm1, float parm2)
+ {
+ ....
+
+The only time you would ever need to use the old declaration syntax is to
+support ancient, antediluvian compilers. To our good fortune, we have access
+to more modern compilers and the old declaration syntax is neither necessary
+nor desired.
+
+
+Emphasizing Logical Blocks
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Organization and readability are improved by putting extra newlines around
+blocks of code that perform a single task. These are typically blocks that
+begin with a C keyword, but not always.
+
+Furthermore, you should put a single comment (not necessarily one line, just
+one comment) before the block, rather than commenting each and every line.
+There is an optimal ammount of commenting that a program can have; you can
+comment too much as well as too little.
+
+A picture is really worth a thousand words here, the following example
+illustrates how to emphasize logical blocks:
+
+ while (line = get_line_from_file(fp)) {
+
+ /* eat the newline, if any */
+ chomp(line);
+
+ /* ignore blank lines */
+ if (strlen(file_to_act_on) == 0) {
+ continue;
+ }
+
+ /* if the search string is in this line, print it,
+ * unless we were told to be quiet */
+ if (strstr(line, search) && !be_quiet) {
+ puts(line);
+ }
+
+ /* clean up */
+ free(line);
+ }
+
+
+Processing Options with getopt
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If your applet needs to process command-line switches, please use getopt() to
+do so. Numerous examples can be seen in many of the existing applets, but
+basically it boils down to two things: at the top of the .c file, have this
+line in the midst of your #includes:
+
+ #include <getopt.h>
+
+And a code block similar to the following near the top of your applet_main()
+routine:
+
+ while ((opt = getopt(argc, argv, "abc")) > 0) {
+ switch (opt) {
+ case 'a':
+ do_a_opt = 1;
+ break;
+ case 'b':
+ do_b_opt = 1;
+ break;
+ case 'c':
+ do_c_opt = 1;
+ break;
+ default:
+ show_usage(); /* in utility.c */
+ }
+ }
+
+If your applet takes no options (such as 'init'), there should be a line
+somewhere in the file reads:
+
+ /* no options, no getopt */
+
+That way, when people go grepping to see which applets need to be converted to
+use getopt, they won't get false positives.
+
+Additional Note: Do not use the getopt_long library function and do not try to
+hand-roll your own long option parsing. Busybox applets should only support
+short options. Explanations and examples of the short options should be
+documented in usage.h.