@setfilename standards.info
@settitle GNU Coding Standards
@c This date is automagically updated when you save this file:
-@set lastupdate February 23, 2008
+@set lastupdate October 31, 2008
@c %**end of header
@dircategory GNU organization
is written in that language, too. The Emacs editor pioneered this
technique.
-@cindex GUILE
-The standard extensibility interpreter for GNU software is GUILE
+@cindex Guile
+@cindex GNOME and Guile
+The standard extensibility interpreter for GNU software is Guile
(@uref{http://www.gnu.org/@/software/@/guile/}), which implements the
-language Scheme (an especially clean and simple dialect of Lisp). We
-don't reject programs written in other ``scripting languages'' such as
-Perl and Python, but using GUILE is very important for the overall
-consistency of the GNU system.
+language Scheme (an especially clean and simple dialect of Lisp).
+Guile also includes bindings for GTK+/GNOME, making it practical to
+write modern GUI functionality within Guile. We don't reject programs
+written in other ``scripting languages'' such as Perl and Python, but
+using Guile is very important for the overall consistency of the GNU
+system.
+
@node Compatibility
@section Compatibility with Other Implementations
* Graphical Interfaces:: Standards for graphical interfaces.
* Command-Line Interfaces:: Standards for command line interfaces.
* Option Table:: Table of long options.
+* OID Allocations:: Table of OID slots for GNU.
* Memory Usage:: When and how to care about memory needs.
* File Usage:: Which files to use, and where.
@end menu
GNU GPL with the exception for Guile; for example, GPLv3+/Guile means
the GNU GPL version 3 or later, with the extra exception for Guile.
+@item GPL/Ada
GNU GPL with the exception for Ada.
@item Apache
@samp{-v} in @code{gawk}.
@item assume-new
-@samp{-W} in Make.
+@samp{-W} in @code{make}.
@item assume-old
-@samp{-o} in Make.
+@samp{-o} in @code{make}.
@item auto-check
@samp{-a} in @code{recode}.
@samp{-d} in @code{touch}.
@item debug
-@samp{-d} in Make and @code{m4};
+@samp{-d} in @code{make} and @code{m4};
@samp{-t} in Bison.
@item define
@samp{-X} in @code{strip}.
@item dry-run
-@samp{-n} in Make.
+@samp{-n} in @code{make}.
@item ed
@samp{-e} in @code{diff}.
@samp{-N} in @code{diff}.
@item environment-overrides
-@samp{-e} in Make.
+@samp{-e} in @code{make}.
@item eof
@samp{-e} in @code{xargs}.
@samp{-E} in @code{m4}.
@item file
-@samp{-f} in @code{info}, @code{gawk}, Make, @code{mt}, and @code{tar};
-@samp{-n} in @code{sed};
-@samp{-r} in @code{touch}.
+@samp{-f} in @code{gawk}, @code{info}, @code{make}, @code{mt},
+@code{sed}, and @code{tar}.
@item field-separator
@samp{-F} in @code{gawk}.
@samp{-i} in @code{diff} and @code{wdiff}.
@item ignore-errors
-@samp{-i} in Make.
+@samp{-i} in @code{make}.
@item ignore-file
@samp{-i} in @code{ptx}.
@samp{-I} in @code{m4}.
@item include-dir
-@samp{-I} in Make.
+@samp{-I} in @code{make}.
@item incremental
@samp{-G} in @code{tar}.
Used in @code{date}
@item jobs
-@samp{-j} in Make.
+@samp{-j} in @code{make}.
@item just-print
-@samp{-n} in Make.
+@samp{-n} in @code{make}.
@item keep-going
-@samp{-k} in Make.
+@samp{-k} in @code{make}.
@item keep-files
@samp{-k} in @code{csplit}.
@samp{-N} in @code{ls}.
@item load-average
-@samp{-l} in Make.
+@samp{-l} in @code{make}.
@item login
Used in @code{su}.
@samp{-d} in @code{cpio}.
@item makefile
-@samp{-f} in Make.
+@samp{-f} in @code{make}.
@item mapped
Used in GDB.
@samp{-l} in @code{xargs}.
@item max-load
-@samp{-l} in Make.
+@samp{-l} in @code{make}.
@item max-procs
@samp{-P} in @code{xargs}.
@samp{-a} in @code{shar}.
@item new-file
-@samp{-W} in Make.
+@samp{-W} in @code{make}.
@item no-builtin-rules
-@samp{-r} in Make.
+@samp{-r} in @code{make}.
@item no-character-count
@samp{-w} in @code{shar}.
@samp{-2} in @code{wdiff}.
@item no-keep-going
-@samp{-S} in Make.
+@samp{-S} in @code{make}.
@item no-lines
@samp{-l} in Bison.
@samp{-o} in @code{tar}.
@item old-file
-@samp{-o} in Make.
+@samp{-o} in @code{make}.
@item one-file-system
@samp{-l} in @code{tar}, @code{cp}, and @code{du}.
@samp{-L} in @code{cmp}.
@item print-data-base
-@samp{-p} in Make.
+@samp{-p} in @code{make}.
@item print-directory
-@samp{-w} in Make.
+@samp{-w} in @code{make}.
@item print-file-name
@samp{-o} in @code{nm}.
@samp{-X} in @code{shar}.
@item question
-@samp{-q} in Make.
+@samp{-q} in @code{make}.
@item quiet
Used in many programs to inhibit the usual output. Every
Used in GDB.
@item recon
-@samp{-n} in Make.
+@samp{-n} in @code{make}.
@item record-number
@samp{-R} in @code{tar}.
Used in @code{chgrp}, @code{chown}, @code{cp}, @code{ls}, @code{diff},
and @code{rm}.
-@item reference-limit
-Used in @code{makeinfo}.
+@item reference
+@samp{-r} in @code{touch}.
@item references
@samp{-r} in @code{ptx}.
@samp{-S} in @code{shar}.
@item stop
-@samp{-S} in Make.
+@samp{-S} in @code{make}.
@item strict
@samp{-s} in @code{recode}.
@samp{-c} in @code{du}.
@item touch
-@samp{-t} in Make, @code{ranlib}, and @code{recode}.
+@samp{-t} in @code{make}, @code{ranlib}, and @code{recode}.
@item trace
@samp{-t} in @code{m4}.
@samp{-V} in @code{tar}.
@item what-if
-@samp{-W} in Make.
+@samp{-W} in @code{make}.
@item whole-size-limit
@samp{-l} in @code{shar}.
@samp{-z} in @code{gprof}.
@end table
+@node OID Allocations
+@section OID Allocations
+@cindex OID allocations for GNU
+@cindex SNMP
+@cindex LDAP
+@cindex X.509
+
+The OID (object identifier) 1.3.6.1.4.1.11591 has been assigned to the
+GNU Project (thanks to Werner Koch). These are used for SNMP, LDAP,
+X.509 certificates, and so on. The web site
+@url{http://www.alvestrand.no/objectid} has a (voluntary) listing of
+many OID assignments.
+
+If you need a new slot for your GNU package, write
+@email{maintainers@@gnu.org}. Here is a list of arcs currently
+assigned:
+
+@example
+@include gnu-oids.texi
+@end example
+
+
@node Memory Usage
@section Memory Usage
@cindex memory usage
Each GNU distribution should come with a shell script named
@code{configure}. This script is given arguments which describe the
kind of machine and system you want to compile the program for.
-
The @code{configure} script must record the configuration options so
that they affect compilation.
-One way to do this is to make a link from a standard name such as
-@file{config.h} to the proper configuration file for the chosen system.
-If you use this technique, the distribution should @emph{not} contain a
-file named @file{config.h}. This is so that people won't be able to
-build the program without configuring it first.
+The description here is the specification of the interface for the
+@code{configure} script in GNU packages. Many packages implement it
+using GNU Autoconf (@pxref{Top,, Introduction, autoconf, Autoconf})
+and/or GNU Automake (@pxref{Top,, Introduction, automake, Automake}),
+but you do not have to use these tools. You can implement it any way
+you like; for instance, by making @code{configure} be a wrapper around
+a completely different configuration system.
+
+Another way for the @code{configure} script to operate is to make a
+link from a standard name such as @file{config.h} to the proper
+configuration file for the chosen system. If you use this technique,
+the distribution should @emph{not} contain a file named
+@file{config.h}. This is so that people won't be able to build the
+program without configuring it first.
Another thing that @code{configure} can do is to edit the Makefile. If
you do this, the distribution should @emph{not} contain a file named