Gnulib doesn't generate a tarball.
[gnulib.git] / README
1 Gnulib
2 ======
3
4 Gnulib is intended to be the canonical source for most of the important
5 "portability" and/or common files for GNU projects.  These are files
6 intended to be shared at the source level; Gnulib is not a library meant
7 to be installed and linked against.  Unlike most projects, Gnulib does
8 not normally generate a source tarball distribution; instead, developers
9 should just grab modules directly from the repository.
10
11 While portability across operating systems is not one of GNU's primary
12 goals, it has helped introduce many people to the GNU system, and is
13 worthwhile when it can be achieved at a low cost.  This collection helps
14 lower that cost.
15
16
17 Contributing to Gnulib
18 ======================
19 All software here is Copyright (c) Free Software Foundation - you need
20 to have filled out an assignment form for a project that uses the
21 module for that contribution to be accepted here.
22
23 If you have a piece of code that you would like to contribute, please
24 email bug-gnulib@gnu.org.  You can review the archives, subscribe, etc.,
25 via http://lists.gnu.org/mailman/listinfo/bug-gnulib.
26
27 Generally we are looking for files that fulfill at least one of the
28 following requirements:
29
30     * If your .c and .h files define functions that are broken or
31 missing on some other system, we should be able to include it.
32
33     * If your functions remove arbitrary limits from existing
34 functions (either under the same name, or as a slightly different
35 name), we should be able to include it.
36
37 If your functions define completely new but rarely used functionality,
38 you should probably consider packaging it as a separate library.
39
40
41 License
42 -------
43 Gnulib contains code both under GPL and LGPL.  Because several packages
44 that use Gnulib are GPL, the files state they are licensed under GPL.
45 However, to support LGPL projects as well, you may use some of the
46 files under LGPL.  The "License:" information in the files under
47 modules/ clarifies the real license that applies to the module source.
48
49 Keep in mind that if you submit patches to files in Gnulib, you should
50 license them under a compatible license, which means that sometimes
51 the contribution will have to be LGPL, if the original file is
52 available under LGPL via a "License: LGPL" information in the
53 projects' modules/ file.
54
55
56 How to add a new module
57 -----------------------
58 * Add the header files and source files to lib/.
59 * If the module needs configure-time checks, write an autoconf
60   macro for it in m4/<module>.m4. See m4/README for details.
61 * Write a module description modules/<module>, based on modules/TEMPLATE.
62 * Add the module to the list in MODULES.html.sh.
63
64 You can test that a module builds correctly with:
65   $ ./gnulib-tool --create-testdir --dir=/tmp/testdir module1 ... moduleN
66   $ cd /tmp/testdir
67   $ ./configure && make
68
69 Other things:
70 * Check the license and copyright year of headers.
71 * Check that the source code follows the GNU coding standards;
72   see <http://www.gnu.org/prep/standards>.
73 * Add source files to config/srclist* if they are identical to upstream
74   and should be upgraded in gnulib whenever the upstream source changes.
75 * Include header files in source files to verify the function prototypes.
76 * Make sure a replacement function doesn't cause warnings or clashes on
77   systems that have the function.
78 * Autoconf functions can use gl_* prefix. The AC_* prefix is for
79   autoconf internal functions.
80 * Build files only if they are needed on a platform.  Look at the
81   alloca and fnmatch modules for how to achieve this.  If for some
82   reason you cannot do this, and you have a .c file that leads to an
83   empty .o file on some platforms (through some big #if around all the
84   code), then ensure that the compilation unit is not empty after
85   preprocessing.  One way to do this is to #include <stddef.h> or
86   <stdio.h> before the big #if.
87
88 Portability guidelines
89 ----------------------
90
91 Gnulib code is intended to be portable to a wide variety of platforms,
92 not just GNU platforms.
93
94 Many Gnulib modules exist so that applications need not worry about
95 undesirable variability in implementations.  For example, an
96 application that uses the 'malloc' module need not worry about (malloc
97 (0)) returning NULL on some Standard C platforms; and 'time_r' users
98 need not worry about localtime_r returning int (not char *) on some
99 platforms that predate POSIX 1003.1-2001.
100
101 Originally much of the Gnulib code was portable to ancient hosts like
102 4.2BSD, but it is a maintenance hassle to maintain compatibility with
103 unused hosts, so currently we assume at least a freestanding C89
104 compiler, possibly operating with a C library that predates C89.  The
105 oldest environment currently ported to is probably SunOS 4 + GCC 1.x,
106 though we haven't tested this exact combination.  SunOS 4 last shipped
107 on 1998-09-30, and Sun dropped support for it on 2003-10-01, so at
108 some point we may start assuming a C89 library as well.
109
110 Because we assume a freestanding C89 compiler, Gnulib code can include
111 <float.h>, <limits.h>, <stdarg.h>, and <stddef.h> unconditionally.  It
112 can also include hosted headers like <errno.h> that were present in
113 Unix Version 7 and are thus widely available.  Similarly, many modules
114 include <sys/types.h> even though it's not even in C99; that's OK
115 since <sys/types.h> has been around nearly forever.  <string.h> and
116 <stdlib.h> were not in Unix Version 7, so they weren't universally
117 available on ancient hosts, but they are both in SunOS 4 (the oldest
118 platform still in relatively-common use) so Gnulib assumes them now.
119
120 Even if the include files exist, they may not conform to C89.
121 However, GCC has a "fixincludes" script that attempts to fix most
122 C89-conformance problems.  So Gnulib currently assumes include files
123 largely conform to C89 or better.  People still using ancient hosts
124 should use fixincludes or fix their include files manually.
125
126 Even if the include files conform to C89, the library itself may not.
127 For example, SunOS 4's (free (NULL)) can dump core, so Gnulib code
128 must avoid freeing a null pointer, even though C89 allows it.
129 You can work around some of these problems by requiring the relevant
130 modules, e.g., the Gnulib 'free' module supplies a conforming 'free'.
131
132 The GNU coding standards allow one departure from strict C99: Gnulib
133 code can assume that standard internal types like size_t are no wider
134 than 'long'.  POSIX 1003.1-2001 and the GNU coding standards both
135 require 'int' to be at least 32 bits wide, so Gnulib code assumes this
136 as well.  Gnulib code makes the following additional assumptions:
137
138  * Signed integer arithmetic is two's complement, without runtime
139    overflow checking.  This is the traditional behavior, and is
140    supported by C99 implementations that conform to ISO/IEC 10967-1
141    (LIA-1) and that define signed integer types as being modulo.
142
143  * There are no "holes" in integer values: all the bits of an integer
144    contribute to its value in the usual way.
145
146  * If two nonoverlapping objects have sizes S and T represented as
147    size_t values, then S + T cannot overflow.  This assumption is true
148    for all practical hosts with flat address spaces, but it is not
149    always true for hosts with segmented address spaces.
150
151  * If an existing object has size S, and if T is sufficiently small
152    (e.g., 8 KiB), then S + T cannot overflow.  Overflow in this case
153    would mean that the rest of your program fits into T bytes, which
154    can't happen in realistic flat-address-space hosts.
155
156  * Objects with all bits zero are treated as 0 or NULL.  For example,
157    memset (A, 0, sizeof A) initializes an array A of pointers to NULL.
158
159  * Adding zero to a null pointer does not change the pointer.
160    For example, 0 + (char *) NULL == (char *) NULL.
161
162 The above assumptions are not required by the C or POSIX standards but
163 hold on all practical porting targets that we're familiar with.  If
164 you have a porting target where these assumptions are not true, we'd
165 appreciate hearing of any fixes.  We need fixes that do not increase
166 runtime overhead on standard hosts and that are relatively easy to
167 maintain.
168
169 With the above caveats, Gnulib code should port without problem to new
170 hosts, e.g., hosts conforming to C99 or to recent POSIX standards.
171 Hence Gnulib code should avoid using constructs (e.g., undeclared
172 functions return 'int') that do not conform to C99.
173
174 High Quality
175 ============
176
177 We will be developing a testsuite for these applications.  The goal is
178 to have a 100% firm interface so that maintainers can feel free to
179 update to the code in CVS at *any* time and know that their
180 application will not break.  This means that before any change can be
181 committed to the repository, a test suite program must be produced
182 that exposes the bug for regression testing.  All experimental work
183 should be done on branches to help promote this.
184
185 CVS
186 ===
187
188 Gnulib is available for anonymous checkout.  In any Bourne-shell the
189 following should work:
190
191 $ cvs -d :pserver:anoncvs@cvs.gnu.org:/cvsroot/gnulib login
192 (Just hit Enter or Return when prompt for a password)
193 $ cvs -d :pserver:anoncvs@cvs.gnu.org:/cvsroot/gnulib checkout gnulib
194
195 Gnulib is hosted on savannah.gnu.org.  The project page is
196 http://savannah.gnu.org/projects/gnulib.
197
198
199 -----
200 Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
201
202 This program is free software; you can redistribute it and/or modify
203 it under the terms of the GNU General Public License as published by
204 the Free Software Foundation; either version 2, or (at your option)
205 any later version.
206
207 This program is distributed in the hope that it will be useful,
208 but WITHOUT ANY WARRANTY; without even the implied warranty of
209 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
210 GNU General Public License for more details.
211
212 You should have received a copy of the GNU General Public License
213 along with this program; if not, write to the Free Software Foundation,
214 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */