@c Gnulib history

@c Copyright 2024--2026 Free Software Foundation, Inc.

@c Permission is granted to copy, distribute and/or modify this document
@c under the terms of the GNU Free Documentation License, Version 1.3 or
@c any later version published by the Free Software Foundation; with no
@c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
@c copy of the license is at <https://www.gnu.org/licenses/fdl-1.3.en.html>.

In the beginning, Richard Stallman maintained the regular expression engine
of GNU and made it available to other GNU packages, such as
@code{sed}, @code{awk}, @code{grep}, so that they could use the same engine.
Recall that there was no GNU C library at the time.

A couple of years later, Jim Meyering, who was maintaining
the shell utilities, the file utilities, and the text processing utilities,
collected the common parts of these three packages in the same repository.
Paul Eggert joined in, with code coming from a few GNU packages that he
maintained,
and so did Bruno Haible, with reusable code from the GNU gettext package.

As they cared for portability, many changes in the C code were accompanied
by changes in the build infrastructure.
Copying these changes into packages --- it was all done manually --- became
cumbersome.  So they wrote a program, called @samp{gnulib-tool}, that does
this job of copying the requested shared code into a particular package.
This was in 2002.

Providing a substitute / override for a system function was relatively easy.
Providing a substitute / override for a system header file was significantly
harder, but was done successively:
for @code{stdint.h} in 2004,
for @code{stdarg.h}, @code{sys/socket.h}, @code{sys/stat.h} in 2006,
for @code{sys/time.h}, @code{wchar.h} in 2007,
and the development of the corresponding idioms took until 2010.

Unicode string modules (that make up GNU libunistring) were added in 2007--2009.

Modules for numeric functions (@code{<math.h>}) were added in 2010--2011.

Modules for container data structures were added between 2006 and 2018.

Versatile bit-set modules were added in 2018.

POSIX threads on non-POSIX platforms, as well as ISO C threads on all
platforms, were added in 2019.

The @code{posix_spawn} facility was brought to completion on native Windows
in 2022, providing the world's first @code{posix_spawn} implementation for
this platform.

Support for Android was added in 2023 and immediately used by GNU Emacs
for Android.

Functions for working with Unicode characters in multibyte representation,
based on @code{mbrtoc32}, were added in 2023.

Modules for manipulating the floating-point environment (@code{fenv.h}) were
added in 2023.

The @samp{gnulib-tool} rewrite in Python, that was started by Dmitry Selyutin
in 2012 but lay unfinished for many years, was completed by Collin Funk and
Bruno Haible in 2024.
