e2d388d6b06bf1c93fd0a19bb57b1ae14cf82cb2
[gnulib.git] / doc / gnulib-intro.texi
1 @node Benefits
2 @section Benefits of using Gnulib
3
4 Gnulib is useful to enhance various aspects of a package:
5
6 @itemize @bullet
7 @item
8 Portability: With Gnulib, a package maintainer can program against the
9 POSIX and GNU libc APIs and nevertheless expect good portability to
10 platforms that don't implement POSIX.
11
12 @item
13 Maintainability: When a package uses modules from Gnulib instead of code
14 written specifically for that package, the maintainer has less code to
15 maintain.
16
17 @item
18 Security: Gnulib provides functions that are immune against vulnerabilities
19 that plague the uses of the corresponding commonplace functions. For
20 example, @code{asprintf}, @code{canonicalize_file_name} are not affected
21 by buffer sizing problems that affect @code{sprintf}, @code{realpath}.
22 @code{openat} does not have the race conditions that @code{open} has. Etc.
23
24 @item
25 Reliability: Gnulib provides functions that combine a call to a system
26 function with a check of the result. Examples are @code{xalloc},
27 @code{xprintf}, @code{xstrtod}, @code{xgetcwd}.
28
29 @item
30 Structure: Gnulib offers a way to structure code into modules, typically
31 one include file, one source code file, and one autoconf macro for each
32 functionality. Modularity helps maintainability.
33 @end itemize
34
35 @node Library vs Reusable Code
36 @section Library vs. Reusable Code
37
38 Classical libraries are installed as binary object code.  Gnulib is
39 different: It is used as a source code library.  Each package that uses
40 Gnulib thus ships with part of the Gnulib source code.  The used portion
41 of Gnulib is tailored to the package: A build tool, called
42 @code{gnulib-tool}, is provided that copies a tailored subset of Gnulib
43 into the package.
44
45 @node Portability and Application Code
46 @section Portability and Application Code
47
48 One of the goals of Gnulib is to make portable programming easy, on
49 the basis of the standards relevant for GNU (and Unix).  The objective
50 behind that is to avoid a fragmentation of the user community into
51 disjoint user communities according to the operating system, and
52 instead allow synergies between users on different operating systems.
53
54 Another goal of Gnulib is to provide application code that can be shared
55 between several applications.  Some people wonder: "What? glibc doesn't
56 have a function to copy a file?"  Indeed, the scope of a system's libc is
57 to implement the relevant standards (ISO C99, POSIX:2001) and to provide
58 access functions to the kernel's system calls, and little more.
59
60 There is no clear borderline between both areas.
61
62 For example, Gnulib has a facility for generating the name of backup
63 files.  While this task is entirely at the application level --- no
64 standard specifies an API for it --- the na@"{@dotless{i}}ve code has
65 some portability problems because on some platforms the length of file
66 name components is limited to 30 characters or so.  Gnulib handles
67 that.
68
69 Similarly, Gnulib has a facility for executing a command in a
70 subprocess.  It is at the same time a portability enhancement (it
71 works on GNU, Unix, and Windows, compared to the classical
72 @code{fork}/@code{exec} idiom which is not portable to Windows), as well
73 as an application aid: it takes care of redirecting stdin and/or
74 stdout if desired, and emits an error message if the subprocess
75 failed.
76
77 @node Target Platforms
78 @section Target Platforms
79
80 Gnulib supports a number of platforms that we call the ``reasonable
81 portability targets''.  This class consists of widespread operating systems,
82 for three years after their last availability, or --- for proprietary
83 operating systems --- as long as the vendor provides commercial support for
84 it.  Already existing Gnulib code for older operating systems is usually
85 left in place for longer than these three years.  So it comes that programs
86 that use Gnulib run pretty well also on these older operating systems.
87
88 Some operating systems are not very widespread, but are Free Software and
89 are actively developed.  Such platforms are also supported by Gnulib, if
90 that OS's developers community keeps in touch with the Gnulib developers,
91 by providing bug reports, analyses, or patches.  For such platforms, Gnulib
92 will not support all versions that are at most three years old, but only
93 the versions of the last year or the last few months, depending on the
94 maturity of said OS project, the number of its users, and how often these
95 users upgrade.
96
97 Niche operating systems are generally unsupported by Gnulib, unless some
98 people from their developers or users community contributes support to
99 Gnulib.
100
101 The degree of support Gnulib guarantees for a platform depends on the
102 amount of testing it gets from volunteers.  Platforms on which Gnulib
103 is frequently tested are the best supported.  Then come platforms with
104 occasional testing, then platforms which are rarely tested.  Usually,
105 we fix bugs when they are reported.  Except that some rarely tested
106 platforms are also low priority; bug fixes for these platforms can
107 take longer.
108
109 As of 2011, the list of supported platforms is the following:
110
111 @itemize
112 @item
113 glibc systems.  With glibc 2.8 or newer, they are frequenty tested.  With
114 glibc 2.3 or newer, they are occasionally tested.
115 @item
116 MacOS X.  In versions 10.5 and 10.6, it's frequently tested.  In version
117 10.4, it's rarely tested.
118 @item
119 FreeBSD 6.0 or newer is occasionally tested.  FreeBSD 5.x is rarely tested.
120 @item
121 NetBSD 5.0 or newer is occasionally tested.  NetBSD 3.0 or newer is rarely
122 tested.
123 @item
124 OpenBSD 4.0 or newer is occasionally tested.  OpenBSD 3.8 or newer is rarely
125 tested.
126 @item
127 AIX 6.1 or newer is occasionally tested.  AIX 5.1 or newer is rarely tested.
128 @item
129 HP-UX 11.11 or newer is occasionally tested.  HP-UX 11.00 is rarely tested.
130 HP-UX 10.20 is rarely tested and low priority.
131 @item
132 IRIX 6.5 is occasionally tested.  IRIX 5.3 is rarely tested and low priority.
133 @item
134 OSF/1 5.1 is occasionally tested.  OSF/1 4.0 is rarely tested and low
135 priority.
136 @item
137 Solaris 8 and newer are occasionally tested.  Solaris 7 is rarely tested.
138 Solaris 2.6 and older is rarely tested and low priority.
139 @item
140 Cygwin 1.7.x is frequently tested.  Cygwin 1.5.x is occasionally tested.
141 @item
142 mingw is frequently tested.  But note that some modules are currently
143 unsupported on mingw: @code{mgetgroups}, @code{getugroups}, @code{idcache},
144 @code{userspec}, @code{openpty}, @code{login_tty}, @code{forkpty},
145 @code{pt_chown}, @code{grantpt}, @code{pty}, @code{savewd},
146 @code{mkancesdirs}, @code{mkdir-p}, @code{euidaccess}, @code{faccessat}.
147 The versions of Windows that are supported are Windows XP and newer.
148 @item
149 Native Windows, with MSVC as compiler, is not tested and low priority.
150 @item
151 mingw in 64-bit mode is not tested and low priority so far.
152 @item
153 Interix 3.5 is not tested.
154 @item
155 Haiku is rarely tested, BeOS is not tested and low priority.
156 @item
157 uClibc on Linux is rarely tested.
158 @item
159 QNX is not tested and low priority.
160 @end itemize
161
162 These operating systems are all supported in an unvirtualized environment.
163 When you run an OS inside a virtual machine, you have to be aware that the
164 virtual machine can bring in bugs of its own.  For example, floating-point
165 operations on Solaris can behave slightly differently in QEMU than on real
166 hardware.  And Haiku's @command{bash} program misbehaves in VirtualBox 3,
167 whereas it behaves fine in VirtualBox 4.
168
169 Similarly, running native Windows binaries on GNU/Linux under WINE is
170 rarely tested and low priority: WINE has a set of behaviours and bugs that
171 is slightly different from native Windows.
172
173 The following platforms are @emph{not} supported by Gnulib.  Even correct
174 patches for their support will not be applied.
175
176 @itemize
177 @item
178 Windows 95/98/ME.
179 @item
180 DJGPP and EMX (the 32-bit operating systems running in DOS).
181 @item
182 MSDOS (the 16-bit operating system).
183 @item
184 Windows Mobile, Symbian OS, iOS.
185 @end itemize
186
187 @node Modules
188 @section Modules
189
190 Gnulib is divided into modules.  Every module implements a single
191 facility.  Modules can depend on other modules.
192
193 A module consists of a number of files and a module description.  The
194 files are copied by @code{gnulib-tool} into the package that will use it,
195 usually verbatim, without changes.  Source code files (.h, .c files)
196 reside in the @file{lib/} subdirectory.  Autoconf macro files reside in
197 the @file{m4/} subdirectory.  Build scripts reside in the
198 @file{build-aux/} subdirectory.
199
200 The module description contains the list of files --- @code{gnulib-tool}
201 copies these files.  It contains the module's
202 dependencies --- @code{gnulib-tool} installs them as well.  It also
203 contains the autoconf macro invocation (usually a single line or
204 nothing at all) --- @code{gnulib-tool} ensures this is invoked from the
205 package's @file{configure.ac} file.  And also a @file{Makefile.am}
206 snippet --- @code{gnulib-tool} collects these into a @file{Makefile.am}
207 for the tailored Gnulib part.  The module description and include file
208 specification are for documentation purposes; they are combined into
209 @file{MODULES.html}.
210
211 The module system serves two purposes:
212
213 @enumerate
214 @item
215 It ensures consistency of the used autoconf macros and @file{Makefile.am}
216 rules with the source code.  For example, source code which uses the
217 @code{getopt_long} function --- this is a common way to implement parsing
218 of command line options in a way that complies with the GNU standards ---
219 needs the source code (@file{lib/getopt.c} and others), the autoconf macro
220 which detects whether the system's libc already has this function (in
221 @file{m4/getopt.m4}), and a few @file{Makefile.am} lines that create the
222 substitute @file{getopt.h} if not.  These three pieces belong together.
223 They cannot be used without each other.  The module description and
224 @code{gnulib-tool} ensure that they are copied altogether into the
225 destination package.
226
227 @item
228 It allows for scalability.  It is well-known since the inception of the
229 MODULA-2 language around 1978 that dissection into modules with
230 dependencies allows for building large sets of code in a maintainable way.
231 The maintainability comes from the facts that:
232
233 @itemize @bullet
234 @item
235 Every module has a single purpose; you don't worry about other parts of
236 the program while creating, reading or modifying the code of a module.
237
238 @item
239 The code you have to read in order to understand a module is limited to
240 the source of the module and the .h files of the modules listed as
241 dependencies.  It is for this reason also that we recommend to put the
242 comments describing the functions exported by a module into its .h file.
243 @end itemize
244
245 In other words, the module is the elementary unit of code in Gnulib,
246 comparable to a class in object-oriented languages like Java or C#.
247 @end enumerate
248
249 The module system is the basis of @code{gnulib-tool}.  When
250 @code{gnulib-tool} copies a part of Gnulib into a package, it first
251 compiles a module list, starting with the requested modules and adding all
252 the dependencies, and then collects the files, @file{configure.ac}
253 snippets and @file{Makefile.am} snippets.
254
255 @node Various Kinds of Modules
256 @section Various Kinds of Modules
257
258 There are modules of various kinds in Gnulib.  For a complete list of the
259 modules, see in @file{MODULES.html}.
260
261 @subsection Support for ISO C or POSIX functions.
262
263 When a function is not implemented by a system, the Gnulib module provides
264 an implementation under the same name.  Examples are the @samp{snprintf}
265 and @samp{readlink} modules.
266
267 Similarly, when a function is not correctly implemented by a system,
268 Gnulib provides a replacement.  For functions, we use the pattern
269
270 @smallexample
271 #if !HAVE_WORKING_FOO
272 # define foo rpl_foo
273 #endif
274 @end smallexample
275
276 @noindent
277 and implement the @code{foo} function under the name @code{rpl_foo}.  This
278 renaming is needed to avoid conflicts at compile time (in case the system
279 header files declare @code{foo}) and at link/run time (because the code
280 making use of @code{foo} could end up residing in a shared library, and
281 the executable program using this library could be defining @code{foo}
282 itself).
283
284 For header files, such as @code{stdbool.h} or @code{stdint.h}, we provide
285 the substitute only if the system doesn't provide a correct one.  The
286 template of this replacement is distributed in a slightly different name,
287 with @samp{.in} inserted before the @samp{.h} extension, so that on
288 systems which do provide a correct
289 header file the system's one is used.
290
291 @subsection Enhancements of ISO C or POSIX functions
292
293 These are sometimes POSIX functions with GNU extensions also found in
294 glibc --- examples: @samp{getopt}, @samp{fnmatch} --- and often new
295 APIs --- for example, for all functions that allocate memory in one way
296 or the other, we have variants which also include the error checking
297 against the out-of-memory condition.
298
299 @subsection Portable general use facilities
300
301 Examples are a module for copying a file --- the portability problems
302 relate to the copying of the file's modification time, access rights,
303 and extended attributes --- or a module for extracting the tail
304 component of a file name --- here the portability to Woe32 requires a
305 different API than the classical POSIX @code{basename} function.
306
307 @subsection Reusable application code
308
309 Examples are an error reporting function, a module that allows output of
310 numbers with K/M/G suffixes, or cryptographic facilities.
311
312 @subsection Object oriented classes
313
314 Examples are data structures like @samp{list}, or abstract output stream
315 classes that work around the fact that an application cannot implement an
316 stdio @code{FILE} with its logic.  Here, while staying in C, we use
317 implementation techniques like tables of function pointers, known from the
318 C++ language or from the Linux kernel.
319
320 @subsection Interfaces to external libraries
321
322 Examples are the @samp{iconv} module, which interfaces to the
323 @code{iconv} facility, regardless whether it is contained in libc or in
324 an external @code{libiconv}.  Or the @samp{readline} module, which
325 interfaces to the GNU readline library.
326
327 @subsection Build / maintenance infrastructure
328
329 An example is the @samp{maintainer-makefile} module, which provides extra
330 Makefile tags for maintaining a package.
331
332 @node Collaborative Development
333 @section Collaborative Development
334
335 Gnulib is maintained collaboratively.  The mailing list is
336 @code{<bug-gnulib at gnu dot org>}.  Be warned that some people on the
337 list may be very active at some times and unresponsive at other times.
338
339 Every module has one or more maintainers.  While issues are discussed
340 collaboratively on the list, the maintainer of a module nevertheless has
341 a veto right regarding changes in his module.
342
343 All patches should be posted the list, regardless whether they are
344 proposed patches or whether they are committed immediately by the
345 maintainer of the particular module.  The purpose is not only to inform
346 the other users of the module, but mainly to allow peer review.  It is not
347 uncommon that several people contribute comments or spot bugs after a
348 patch was proposed.
349
350 Conversely, if you are using Gnulib, and a patch is posted that affects
351 one of the modules that your package uses, you have an interest in
352 proofreading the patch.
353
354 @node Copyright
355 @section Copyright
356
357 Most modules are under the GPL.  Some, mostly modules which can
358 reasonably be used in libraries, are under LGPL.  The source files
359 always say "GPL", but the real license specification is in the module
360 description file.  If the module description file says "GPL", it means
361 "GPLv3+" (GPLv3 or newer, at the licensee's choice); if it says "LGPL",
362 it means "LGPLv3+" (LGPLv3 or newer, at the licensee's choice).
363
364 More precisely, the license specification in the module description
365 file applies to the files in @file{lib/} and @file{build-aux/}.  Different
366 licenses apply to files in special directories:
367
368 @table @file
369 @item modules/
370 Module description files are under this copyright:
371
372 @quotation
373 Copyright @copyright{} 200X-200Y Free Software Foundation, Inc.@*
374 Copying and distribution of this file, with or without modification,
375 in any medium, are permitted without royalty provided the copyright
376 notice and this notice are preserved.
377 @end quotation
378
379 @item m4/
380 Autoconf macro files are under this copyright:
381
382 @quotation
383 Copyright @copyright{} 200X-200Y Free Software Foundation, Inc.@*
384 This file is free software; the Free Software Foundation
385 gives unlimited permission to copy and/or distribute it,
386 with or without modifications, as long as this notice is preserved.
387 @end quotation
388
389 @item tests/
390 If a license statement is not present in a test module, the test files are
391 under GPL.  Even if the corresponding source module is under LGPL, this is
392 not a problem, since compiled tests are not installed by ``make install''.
393
394 @item doc/
395 Documentation files are under this copyright:
396
397 @quotation
398 Copyright @copyright{} 2004-200Y Free Software Foundation, Inc.@*
399 Permission is granted to copy, distribute and/or modify this document
400 under the terms of the GNU Free Documentation License, Version 1.3 or
401 any later version published by the Free Software Foundation; with no
402 Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
403 copy of the license is included in the section entitled ``GNU Free
404 Documentation License''.
405 @end quotation
406 @end table
407
408 If you want to use some Gnulib modules under LGPL, you can do so by
409 passing the option @samp{--lgpl} to @code{gnulib-tool}.  This will
410 replace the GPL header with an LGPL header while copying the source
411 files to your package.  Similarly, if you want some Gnulib modules
412 under LGPLv2+ (Lesser GPL version 2.1 or newer), you can do so by
413 passing the option @samp{--lgpl=2} to @code{gnulib-tool}.
414
415 Keep in mind that when you submit patches to files in Gnulib, you should
416 license them under a compatible license.  This means that sometimes the
417 contribution will have to be LGPL, if the original file is available
418 under LGPL.  You can find out about it by looking for a "License: LGPL"
419 information in the corresponding module description.
420
421 @node Steady Development
422 @section Steady Development
423
424 Gnulib modules are continually adapted, to match new practices, to be
425 consistent with newly added modules, or simply as a response to build
426 failure reports.  Gnulib is available in two qualities:
427
428 @itemize
429 @item
430 There is the newest version of Gnulib from the Git repository.  The
431 source tree can also be fetched from a read-only CVS that mirrors the Git
432 repository.
433
434 @item
435 We also make stable releases every two months, at
436 @url{http://erislabs.net/ianb/projects/gnulib/}.
437 @end itemize
438
439 If you are willing to report an occasional regression, we recommend to
440 use the newest version always, except in periods of major changes.  Most
441 Gnulib users do this.  If you prefer stable releases, please use the
442 newest stable release.
443
444 @node Openness
445 @section Openness
446
447 Gnulib is open in the sense that we gladly accept contributions if they
448 are generally useful, well engineered, and if the contributors have signed
449 the obligatory papers with the FSF.
450
451 The module system is open in the sense that a package using Gnulib can
452 @enumerate
453 @item
454 locally patch or override files in Gnulib,
455 @item
456 locally add modules that are treated like Gnulib modules by
457 @code{gnulib-tool}.
458 @end enumerate
459
460 This is achieved by the @samp{--local-dir} option of @code{gnulib-tool}
461 (@pxref{Extending Gnulib}).