@node Contributors, Free Manuals, Maintenance, Top
@c %MENU% Who wrote what parts of the GNU C library
@appendix Contributors to the GNU C Library

The GNU C library was written originally by Roland McGrath, and is
currently maintained by Ulrich Drepper.  Some parts of the library were
contributed or worked on by other people.

@itemize @bullet
@item
The @code{getopt} function and related code was written by
Richard Stallman, @w{David J.} MacKenzie, and @w{Roland McGrath}.

@item
The merge sort function @code{qsort} was written by Michael J. Haertel.

@item
The quick sort function used as a fallback by @code{qsort} was written
by Douglas C. Schmidt.

@item
The memory allocation functions @code{malloc}, @code{realloc} and
@code{free} and related code were written by Michael J. Haertel,
@w{Wolfram Gloger}, and @w{Doug Lea}.

@item
Fast implementations of many of the string functions (@code{memcpy},
@code{strlen}, etc.) were written by Torbj@"orn Granlund.

@item
The @file{tar.h} header file was written by David J. MacKenzie.

@item
The port to the MIPS DECStation running Ultrix 4
(@code{mips-dec-ultrix4})
was contributed by Brendan Kehoe and Ian Lance Taylor.

@item
The DES encryption function @code{crypt} and related functions were
contributed by Michael Glad.

@item
The @code{ftw} and @code{nftw} functions were contributed by Ulrich Drepper.

@item
The startup code to support SunOS shared libraries was contributed by
Tom Quinn.

@item
The @code{mktime} function was contributed by Paul Eggert.

@item
The port to the Sequent Symmetry running Dynix version 3
(@code{i386-sequent-bsd}) was contributed by Jason Merrill.

@item
The timezone support code is derived from the public-domain timezone
package by Arthur David Olson and his many contributors.

@item
The port to the DEC Alpha running OSF/1 (@code{alpha-dec-osf1}) was
contributed by Brendan Kehoe, using some code written by Roland McGrath.

@item
The port to SGI machines running Irix 4 (@code{mips-sgi-irix4}) was
contributed by Tom Quinn.

@item
The port of the Mach and Hurd code to the MIPS architecture
(@code{mips-@var{anything}-gnu}) was contributed by Kazumoto Kojima.

@item
The floating-point printing function used by @code{printf} and friends
and the floating-point reading function used by @code{scanf},
@code{strtod} and friends were written by Ulrich Drepper.  The
multi-precision integer functions used in those functions are taken from
GNU MP, which was contributed by Torbj@"orn Granlund.

@item
The internationalization support in the library, and the support
programs @code{locale} and @code{localedef}, were written by Ulrich
Drepper.  Ulrich Drepper adapted the support code for message catalogs
(@file{libintl.h}, etc.) from the GNU @code{gettext} package, which he
also wrote.  He also contributed the @code{catgets} support and the
entire suite of multi-byte and wide-character support functions
(@file{wctype.h}, @file{wchar.h}, etc.).

@item
The implementations of the @file{nsswitch.conf} mechanism and the files
and DNS backends for it were designed and written by Ulrich Drepper and
Roland McGrath, based on a backend interface defined by Peter Eriksson.

@item
The port to Linux i386/ELF (@code{i386-@var{anything}-linux}) was
contributed by Ulrich Drepper, based in large part on work done in
Hongjiu Lu's Linux version of the GNU C Library.

@item
The port to Linux/m68k (@code{m68k-@var{anything}-linux}) was
contributed by Andreas Schwab.

@item
The ports to Linux/ARM (@code{arm-@var{ANYTHING}-linuxaout}) and ARM
standalone (@code{arm-@var{ANYTHING}-none}), as well as parts of the
IPv6 support code, were contributed by Philip Blundell.

@item
Richard Henderson contributed the ELF dynamic linking code and other
support for the Alpha processor.

@item
David Mosberger-Tang contributed the port to Linux/Alpha
(@code{alpha-@var{anything}-linux}).

@item
The port to Linux on PowerPC (@code{powerpc-@var{anything}-linux})
was contributed by Geoffrey Keating.

@item
Miles Bader wrote the argp argument-parsing package, and the argz/envz
interfaces.

@item
Stephen R. van den Berg contributed a highly-optimized @code{strstr} function.

@item
Ulrich Drepper contributed the @code{hsearch} and @code{drand48}
families of functions; reentrant @samp{@dots{}@code{_r}} versions of the
@code{random} family; System V shared memory and IPC support code; and
several highly-optimized string functions for i@var{x}86 processors.

@item
The math functions are taken from @code{fdlibm-5.1} by Sun
Microsystems, as modified by J.T. Conklin, Ian Lance Taylor,
Ulrich Drepper, Andreas Schwab, and Roland McGrath.

@item
The @code{libio} library used to implement @code{stdio} functions on
some platforms was written by Per Bothner and modified by Ulrich Drepper.

@item
Eric Youngdale and Ulrich Drepper implemented versioning of objects on
the symbol level.

@item
Thorsten Kukuk provided an implementation for NIS (YP) and NIS+,
securelevel 0, 1 and 2.

@item
Andreas Jaeger provided a test suite for the math library.

@item
Mark Kettenis implemented the utmpx interface and an utmp daemon.

@item
Ulrich Drepper added character conversion functions (@code{iconv}).

@item
Thorsten Kukuk provided an implementation for a caching daemon for NSS
(nscd).

@item
Tim Waugh provided an implementation of the POSIX.2 wordexp function family.

@item
Mark Kettenis provided a Hesiod NSS module.

@item
The Internet-related code (most of the @file{inet} subdirectory) and
several other miscellaneous functions and header files have been
included from 4.4 BSD with little or no modification.  The copying
permission notice for this code can be found in the file @file{LICENSES}
in the source distribution.

@item
The random number generation functions @code{random}, @code{srandom},
@code{setstate} and @code{initstate}, which are also the basis for the
@code{rand} and @code{srand} functions, were written by Earl T. Cohen
for the University of California at Berkeley and are copyrighted by the
Regents of the University of California.  They have undergone minor
changes to fit into the GNU C library and to fit the @w{ISO C} standard,
but the functional code is Berkeley's.@refill

@item
The DNS resolver code is taken directly from BIND 4.9.5, which
includes copyrighted code from UC Berkeley and from Digital Equipment
Corporation.  See the file @file{LICENSES} for the text of the DEC license.

@item
The code to support Sun RPC is taken verbatim from Sun's
@w{@sc{rpcsrc-4.0}} distribution; see the file @file{LICENSES} for the
text of the license.

@item
Some of the support code for Mach is taken from Mach 3.0 by CMU;
the file if_ppp.h is also copyright by CMU, but under a different license;
see the file @file{LICENSES} for the text of the licenses.

@item
Many of the IA64 math functions are taken from a collection of
``Highly Optimized Mathematical Functions for Itanium'' that Intel
makes available under a free license; see the file @file{LICENSES} for
details.

@item
The @code{getaddrinfo} and @code{getnameinfo} functions and supporting
code were written by Craig Metz; see the file @file{LICENSES} for
details on their licensing.

@item
Many of the IEEE 64-bit double precision math functions
(in the @file{sysdeps/ieee754/dbl-64} subdirectory) come
from the IBM Accurate Mathematical Library, contributed by IBM.

@end itemize
