This directory contains the sources of the GNU C Library.
See the file "version.h" for what release version you have.

The GNU C Library is the standard system C library for all GNU systems,
and is an important part of what makes up a GNU system.  It provides the
system API for all programs written in C and C-compatible languages such
as C++ and Objective C; the runtime facilities of other programming
languages use the C library to access the underlying operating system.

In GNU/Linux systems, the C library works with the Linux kernel to
implement the operating system behavior seen by user applications.
In GNU/Hurd systems, it works with a microkernel and Hurd servers.

The GNU C Library implements much of the POSIX.1 functionality in the
GNU/Hurd system, using configurations i[34567]86-*-gnu.

When working with Linux kernels, the GNU C Library version from
version 2.4 on is intended primarily for use with Linux kernel version
2.6.0 and later.  We only support using the NPTL implementation of
pthreads, which is now the default configuration.  Most of the C
library will continue to work on older Linux kernels and many programs
will not require a 2.6 kernel to run correctly.  However, pthreads and
related functionality will not work at all on old kernels and we do
not recommend using glibc 2.4 with any Linux kernel prior to 2.6.

All Linux kernel versions prior to 2.6.16 are known to have some bugs that
may cause some of the tests related to pthreads in "make check" to fail.
If you see such problems, please try the test suite on the most recent
Linux kernel version that you can use, before pursuing those bugs further.

Also note that the shared version of the libgcc_s library must be
installed for the pthread library to work correctly.

The old LinuxThreads add-on implementation of pthreads for older Linux
kernels is no longer supported, and we are not distributing it with this
release.  Someone has volunteered to revive its maintenance unofficially
for at least a short time for the benefit of those using Linux kernels
older than 2.6, but a working version is not presently available.  When
it is in working condition, we will make it available alongside future
glibc releases.  LinuxThreads will not be supported.

The GNU C Library supports these configurations for using Linux kernels:

	i[34567]86-*-linux-gnu
	x86_64-*-linux-gnu
	powerpc-*-linux-gnu
	powerpc64-*-linux-gnu
	s390-*-linux-gnu
	s390x-*-linux-gnu
	ia64-*-linux-gnu
	sparc*-*-linux-gnu
	sparc64*-*-linux-gnu

	sh[34]-*-linux-gnu	Requires Linux 2.6.11

The code for other CPU configurations supported by volunteers outside of
the core glibc maintenance effort is contained in the separate `ports'
add-on.  You can find glibc-ports-VERSION distributed separately in the
same place where you got the main glibc distribution files.
Currently these configurations are known to work using the `ports' add-on:

	alpha*-*-linux-gnu	Requires Linux 2.6.9 for NPTL
	arm-*-linux-gnu		Requires Linux 2.6.15 for NPTL, no SMP support
	arm-*-linux-gnueabi	Requires Linux 2.6.16-rc1 for NPTL, no SMP
	mips-*-linux-gnu	Requires Linux 2.6.12 for NPTL
	mips64-*-linux-gnu	Requires Linux 2.6.12 for NPTL

The ports distribution also contains code for other configurations that
do not work or have not been maintained recently, but will be of use to
anyone trying to make a new configuration work.  If you are interested
in doing a port, please contact the glibc maintainers; see
http://www.gnu.org/software/libc/ for more information.

See the file INSTALL to find out how to configure, build, and install
the GNU C Library.  You might also consider reading the WWW pages for
the C library at http://www.gnu.org/software/libc/.

The GNU C Library is (almost) completely documented by the Texinfo manual
found in the `manual/' subdirectory.  The manual is still being updated
and contains some known errors and omissions; we regret that we do not
have the resources to work on the manual as much as we would like.  For
corrections to the manual, please file a bug in the `manual' component,
following the bug-reporting instructions below.  Please be sure to check
the manual in the current development sources to see if your problem has
already been corrected.

The file NOTES contains a description of the feature-test macros used
in the GNU C library, explaining how you can tell the library what
facilities you want it to make available.

Please see http://www.gnu.org/software/libc/bugs.html for bug reporting
information.  We are now using the Bugzilla system to track all bug reports.
This web page gives detailed information on how to report bugs properly.

The GNU C Library is free software.  See the file COPYING.LIB for copying
conditions, and LICENSES for notices about a few contributions that require
these additional notices to be distributed.
