=back

=head1 MAINTAINER

Erik Andersen <andersen@codepoet.org>

=head1 AUTHORS

The following people have contributed code to BusyBox whether
they know it or not.


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

=for html <br>

John Beppu <beppu@codepoet.org>

    du, head, nslookup, sort, tee, uniq (so Kraai could rewrite them ;-),
    documentation

=for html <br>

Edward Betts <edward@debian.org>

    expr, hostid, logname, tty, wc, whoami, yes

=for html <br>

Brian Candler <B.Candler@pobox.com>

    tiny-ls(ls)

=for html <br>

Randolph Chung <tausq@debian.org>

    fbset, ping, hostname, and mkfifo

=for html <br>

Dave Cinege <dcinege@psychosis.com>

    more(v2), makedevs, modularization, various fixes

=for html <br>

Larry Doolittle <ldoolitt@recycle.lbl.gov>

    various fixes, shell rewrite

=for html <br>

Karl M. Hegbloom <karlheg@debian.org>

    cp_mv.c, the test suite, various fixes to utility.c, &c.

=for html <br>

Sterling Huxley <sterling@europa.com>

    vi (!!!)

=for html <br>

Daniel Jacobowitz <dan@debian.org>

    mktemp.c

=for html <br>

Matt Kraai <kraai@alumni.carnegiemellon.edu>

    documentation, bugfixes

=for html <br>

John Lombardo <john@deltanet.com>

    dirname, tr

=for html <br>

Glenn McGrath <bug1@netconnect.com.au>

    ar.c

=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. His code is still in many apps.

=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>

    sed remix, bug fixes, style-guide, 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>

Glenn Engel <glenne@engel.org>

    httpd

=cut

# $Id: busybox_footer.pod,v 1.14 2004/03/27 09:40:15 andersen Exp $
