summaryrefslogtreecommitdiff
path: root/gnulib/doc/maintain.texi
diff options
context:
space:
mode:
Diffstat (limited to 'gnulib/doc/maintain.texi')
m---------gnulib0
-rw-r--r--gnulib/doc/maintain.texi2319
2 files changed, 2319 insertions, 0 deletions
diff --git a/gnulib b/gnulib
deleted file mode 160000
-Subproject 443bc5ffcf7429e557f4a371b0661abe98ddbc1
diff --git a/gnulib/doc/maintain.texi b/gnulib/doc/maintain.texi
new file mode 100644
index 0000000..40e37ba
--- /dev/null
+++ b/gnulib/doc/maintain.texi
@@ -0,0 +1,2319 @@
+\input texinfo.tex @c -*-texinfo-*-
+@c %**start of header
+@setfilename maintain.info
+@settitle Information for Maintainers of GNU Software
+@c For double-sided printing, uncomment:
+@c @setchapternewpage odd
+@c This date is automagically updated when you save this file:
+@set lastupdate December 2, 2011
+@c %**end of header
+
+@dircategory GNU organization
+@direntry
+* Maintaining: (maintain). Maintaining GNU software.
+@end direntry
+
+@setchapternewpage off
+
+@c Put everything in one index (arbitrarily chosen to be the concept index).
+@syncodeindex fn cp
+@syncodeindex pg cp
+
+@copying
+Information for maintainers of GNU software, last updated @value{lastupdate}.
+
+Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010, 2011 Free Software Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the section entitled
+``GNU Free Documentation License''.
+@end quotation
+@end copying
+
+@titlepage
+@title Information for Maintainers of GNU Software
+@author Richard Stallman
+@author last updated @value{lastupdate}
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top
+@top Version
+
+@insertcopying
+@end ifnottex
+
+@menu
+* Preface::
+* Getting Help::
+* Getting a GNU Account::
+* Stepping Down::
+* Recruiting Developers::
+* Legal Matters::
+* Clean Ups::
+* Platforms::
+* Mail::
+* Old Versions::
+* Distributions::
+* Web Pages::
+* Ethical and Philosophical Consideration::
+* Terminology::
+* Hosting::
+* Donations::
+* Free Software Directory::
+* Using the Proofreaders List::
+* GNU Free Documentation License::
+* Index::
+@end menu
+
+
+@node Preface
+@chapter About This Document
+
+This file contains guidelines and advice for someone who is the
+maintainer of a GNU program on behalf of the GNU Project. Everyone is
+entitled to change and redistribute GNU software; you need not pay
+attention to this file to get permission. But if you want to maintain
+a version for widespread distribution, we suggest you follow these
+guidelines. If you are or would like to be a GNU maintainer, then it
+is essential to follow these guidelines.
+
+In addition to this document, please read and follow the GNU Coding
+Standards (@pxref{Top, , Contents, standards, GNU Coding Standards}).
+
+@cindex @code{bug-standards@@gnu.org} email address
+@cindex Savannah repository for @code{gnustandards}
+@cindex @code{gnustandards} project repository
+Please send corrections or suggestions for this document to
+@email{bug-standards@@gnu.org}. If you make a suggestion, please
+include suggested new wording if you can. We prefer a context diff to
+the Texinfo source, but if that's difficult for you, you can make a
+diff for some other version of this document, or propose it in any way
+that makes it clear. The source repository for this document can be
+found at @url{http://savannah.gnu.org/projects/gnustandards}.
+
+@cindex @code{gnustandards-commit@@gnu.org} mailing list
+If you want to receive diffs for every change to these GNU documents,
+join the mailing list @code{gnustandards-commit@@gnu.org}, for
+instance via the web interface at
+@url{http://lists.gnu.org/mailman/listinfo/gnustandards-commit}.
+Archives are also available there.
+
+@cindex Piercy, Marge
+This document uses the gender-neutral third-person pronouns ``person'',
+``per'', ``pers'' and ``perself'' which were promoted, and perhaps
+invented, by Marge Piercy in @cite{Woman on the Edge of Time}. They are
+used just like ``she'', ``her'', ``hers'' and ``herself'', except that
+they apply equally to males and females. For example, ``Person placed
+per new program under the GNU GPL, to let the public benefit from per
+work, and to enable per to feel person has done the right thing.''
+
+This release of the GNU Maintainer Information was last updated
+@value{lastupdate}.
+
+
+@node Getting Help
+@chapter Getting Help
+@cindex help, getting
+
+@cindex @code{mentors@@gnu.org} mailing list
+If you have any general questions or encounter a situation where it
+isn't clear how to get something done or who to ask, you (as a GNU
+contributor) can always write to @email{mentors@@gnu.org}, which is a
+list of a few experienced GNU folks who have volunteered to answer
+questions. Any GNU-related question is fair game for the
+@code{mentors} list.
+
+@cindex advisory committee
+The GNU Advisory Committee helps to coordinate activities in the GNU
+project on behalf of RMS (Richard Stallman, the Chief GNUisance). If
+you have any organizational questions or concerns you can contact the
+committee at @email{gnu-advisory@@gnu.org}. See
+@url{http://www.gnu.org/contact/gnu-advisory.html} for the current
+committee members. Additional information is in
+@file{/gd/gnuorg/advisory}.
+
+@cindex down, when GNU machines are
+@cindex outage, of GNU machines
+@cindex @url{http://identi.ca/group/fsfstatus}
+If you find that any GNU computer systems (@code{fencepost.gnu.org},
+@code{ftp.gnu.org}, @code{www.gnu.org}, @code{savannah.gnu.org},
+@dots{}) seem to be down, you can check the current status at
+@url{http://identi.ca/group/fsfstatus}. Most likely the problem, if
+it can be alleviated at the FSF end, is already being worked on.
+
+@cindex sysadmin, FSF
+@cindex FSF system administrators
+@cindex GNU system administrators
+The FSF system administrators are responsible for the network and GNU
+hardware. You can email them at @email{sysadmin@@fsf.org}, but please
+try not to burden them unnecessarily.
+
+
+@node Getting a GNU Account
+@chapter Getting a GNU Account
+@cindex shell account, on fencepost
+@cindex @code{fencepost.gnu.org} GNU machine
+
+@c We want to repeat this text later, so define a macro.
+@macro gdgnuorgtext
+The directory @file{/gd/gnuorg} mentioned throughout this document is
+available on the general GNU server, currently
+@code{fencepost.gnu.org}. If you are the maintainer of a GNU package,
+you should have an account there. If you don't have one already,
+@url{http://www.gnu.org/software/README.accounts.html}. You can also
+ask for accounts for people who significantly help you in working on
+the package.
+@end macro
+
+@gdgnuorgtext{}
+
+
+@node Stepping Down
+@chapter Stepping Down
+@cindex stepping down as maintainer
+@cindex resigning as maintainer
+
+With good fortune, you will continue maintaining your package for many
+decades. But sometimes for various reasons maintainers decide to step
+down.
+
+If you're the official maintainer of a GNU package and you decide to
+step down, please inform the GNU Project (@email{maintainers@@gnu.org}).
+We need to know that the package no longer has a maintainer, so we can
+look for and appoint a new maintainer.
+
+@cindex @email{maintainers@@gnu.org}
+If you have an idea for who should take over, please tell
+@email{maintainers@@gnu.org} your suggestion. The appointment of a new
+maintainer needs the GNU Project's confirmation, but your judgment that
+a person is capable of doing the job will carry a lot of weight.
+
+As your final act as maintainer, it would be helpful to set up or
+update the package under @code{savannah.gnu.org} (@pxref{Old
+Versions}). This will make it much easier for the new maintainer to
+pick up where you left off and will ensure that the source tree is not
+misplaced if it takes us a while to find a new maintainer.
+
+
+@node Recruiting Developers
+@chapter Recruiting Developers
+
+Unless your package is a fairly small, you probably won't do all the
+work on it yourself. Most maintainers recruit other developers to help.
+
+Sometimes people will offer to help. Some of them will be capable,
+while others will not. It's up to you to determine who provides useful
+help, and encourage those people to participate more.
+
+Some of the people who offer to help will support the GNU Project, while
+others may be interested for other reasons. Some will support the goals
+of the Free Software Movement, but some may not. They are all welcome
+to help with the work---we don't ask people's views or motivations
+before they contribute to GNU packages.
+
+As a consequence, you cannot expect all contributors to support the GNU
+Project, or to have a concern for its policies and standards. So part
+of your job as maintainer is to exercise your authority on these points
+when they arise. No matter how much of the work other people do, you
+are in charge of what goes in the release. When a crucial point arises,
+you should calmly state your decision and stick to it.
+
+Sometimes a package has several co-maintainers who share the role of
+maintainer. Unlike developers who help, co-maintainers have actually
+been appointed jointly as the maintainers of the package, and they carry
+out the maintainer's functions together. If you would like to propose
+some of your developers as co-maintainers, please contact
+@email{maintainers@@gnu.org}.
+
+We're happy to acknowledge all major contributors to GNU packages on
+the @url{http://www.gnu.org/people/people.html} web page. Please send
+an entry for yourself to @email{webmasters@@gnu.org}, and feel free to
+suggest it to other significant developers on your package.
+
+
+@node Legal Matters
+@chapter Legal Matters
+@cindex legal matters
+
+This chapter describes procedures you should follow for legal reasons
+as you maintain the program, to avoid legal difficulties.
+
+@menu
+* Copyright Papers::
+* Legally Significant::
+* Recording Contributors::
+* Copying from Other Packages::
+* Copyright Notices::
+* License Notices::
+* External Libraries::
+@end menu
+
+@node Copyright Papers
+@section Copyright Papers
+@cindex copyright papers
+
+If you maintain an FSF-copyrighted package
+certain legal procedures are required when incorporating legally significant
+changes written by other people. This ensures that the FSF has the
+legal right to distribute the package, and the standing to defend its
+GPL-covered status in court if necessary.
+
+@strong{Before} incorporating significant changes, make sure that the
+person who wrote the changes has signed copyright papers and that the
+Free Software Foundation has received and signed them. We may also need
+an employer's disclaimer from the person's employer.
+
+@cindex data base of GNU copyright assignments
+To check whether papers have been received, look in
+@file{/gd/gnuorg/copyright.list}. If you can't look there directly,
+@email{fsf-records@@gnu.org} can check for you. Our clerk can also
+check for papers that are waiting to be entered and inform you when
+expected papers arrive.
+
+@cindex @file{/gd/gnuorg} directory
+@c This paragraph intentionally duplicates information given
+@c near the beginning of the file--to make sure people don't miss it.
+@gdgnuorgtext{}
+
+In order for the contributor to know person should sign papers, you need
+to ask per for the necessary papers. If you don't know per well, and you
+don't know that person is used to our ways of handling copyright papers,
+then it might be a good idea to raise the subject with a message like
+this:
+
+@quotation
+Would you be willing to assign the copyright to the Free Software
+Foundation, so that we could install it in @var{package}?
+@end quotation
+
+@noindent
+or
+
+@quotation
+Would you be willing to sign a copyright disclaimer to put this change
+in the public domain, so that we can install it in @var{package}?
+@end quotation
+
+If the contributor then wants more information, you can send per the file
+@file{/gd/gnuorg/conditions.text}, which explains per options (assign
+vs.@: disclaim) and their consequences.
+
+Once the conversation is under way and the contributor is ready for
+more details, you should send one of the templates that are found in
+the directory @file{/gd/gnuorg/Copyright/}; they are also available
+from the @file{doc/Copyright/} directory of the @code{gnulib} project
+at @url{http://savannah.gnu.org/projects/gnulib}. This section
+explains which templates you should use in which circumstances.
+@strong{Please don't use any of the templates except for those listed
+here, and please don't change the wording.}
+
+Once the conversation is under way, you can send the contributor the
+precise wording and instructions by email. Before you do this, make
+sure to get the current version of the template you will use! We change
+these templates occasionally---don't keep using an old version.
+
+For large changes, ask the contributor for an assignment. Send per a
+copy of the file @file{request-assign.changes}. (Like all the
+@samp{request-} files, it is in @file{/gd/gnuorg/Copyright} and in
+@code{gnulib}.)
+
+For medium to small changes, request a personal disclaimer by sending
+per the file @file{request-disclaim.changes}.
+
+If the contributor is likely to keep making changes, person might want
+to sign an assignment for all per future changes to the program. So it
+is useful to offer per that alternative. If person wants to do it that
+way, send per the @file{request-assign.future}.
+
+When you send a @file{request-} file, you don't need to fill in anything
+before sending it. Just send the file verbatim to the contributor. The
+file gives per instructions for how to ask the FSF to mail per the
+papers to sign. The @file{request-} file also raises the issue of
+getting an employer's disclaimer from the contributor's employer.
+
+When the contributor emails the form to the FSF, the FSF sends per an
+electronic (usually PDF) copy of the assignment. All contributors
+then print the assignment and sign it. Contributors residing outside
+the U.S. must mail the signed form to the FSF via the post.
+Contributors located in the U.S. can then email or fax a scanned copy
+back to the FSF (or use postal mail, if they prefer). (To emphasize,
+the necessary distinction is between US residents and non-residents,
+citizenship does not matter.)
+
+For less common cases, we have template files you should send to the
+contributor. Be sure to fill in the name of the person and the name
+of the program in these templates, where it says @samp{NAME OF PERSON}
+and @samp{NAME OF PROGRAM}, before sending; otherwise person might
+sign without noticing them, and the papers would be useless. Note
+that in some templates there is more than one place to put the name of
+the program or the name of the person; be sure to change all of them.
+All the templates raise the issue of an employer's disclaimer as well.
+
+@cindex legal papers for changes in manuals
+You do not need to ask for separate papers for a manual that is
+distributed only in the software package it describes. But if we
+sometimes distribute the manual separately (for instance, if we publish
+it as a book), then we need separate legal papers for changes in the
+manual. For smaller changes, use
+@file{disclaim.changes.manual}; for larger ones, use
+@file{assign.changes.manual}. To cover both past and future
+changes to a manual, you can use @file{assign.future.manual}.
+For a translation of a manual, use @file{assign.translation.manual}.
+
+For translations of program strings (as used by GNU Gettext, for
+example; @pxref{Internationalization,,, standards, GNU Coding
+Standards}), use @file{disclaim.translation}. If you make use of the
+Translation Project (@url{http://translationproject.org}) facilities,
+please check with the TP coordinators that they have sent the
+contributor the papers; if they haven't, then you should send the
+papers. In any case, you should wait for the confirmation from the
+FSF that the signed papers have been received and accepted before
+integrating the new contributor's material, as usual.
+
+If a contributor is reluctant to sign an assignment for a large change,
+and is willing to sign a disclaimer instead, that is acceptable, so you
+should offer this alternative if it helps you reach agreement. We
+prefer an assignment for a larger change, so that we can enforce the GNU
+GPL for the new text, but a disclaimer is enough to let us use the text.
+
+If you maintain a collection of programs, occasionally someone will
+contribute an entire separate program or manual that should be added to
+the collection. Then you can use the files
+@file{request-assign.program}, @file{disclaim.program},
+@file{assign.manual}, and @file{disclaim.manual}. We very much prefer
+an assignment for a new separate program or manual, unless it is quite
+small, but a disclaimer is acceptable if the contributor insists on
+handling the matter that way.
+
+If a contributor wants the FSF to publish only a pseudonym, that is
+ok. The contributor should say this, and state the desired pseudonym,
+when answering the @file{request-} form. The actual legal papers will
+use the real name, but the FSF will publish only the pseudonym. When
+using one of the other forms, fill in the real name but ask the
+contributor to discuss the use of a pseudonym with
+@email{assign@@gnu.org} before sending back the signed form.
+
+@strong{Although there are other templates besides the ones listed here,
+they are for special circumstances; please do not use them without
+getting advice from @email{assign@@gnu.org}.}
+
+If you are not sure what to do, then please ask @email{assign@@gnu.org} for
+advice; if the contributor asks you questions about the meaning and
+consequences of the legal papers, and you don't know the answers, you
+can forward them to @email{assign@@gnu.org} and we will answer.
+
+@strong{Please do not try changing the wording of a template yourself.
+If you think a change is needed, please talk with @email{assign@@gnu.org},
+and we will work with a lawyer to decide what to do.}
+
+@node Legally Significant
+@section Legally Significant Changes
+
+If a person contributes more than around 15 lines of code and/or text
+that is legally significant for copyright purposes, we
+need copyright papers for that contribution, as described above.
+
+A change of just a few lines (less than 15 or so) is not legally
+significant for copyright. A regular series of repeated changes, such
+as renaming a symbol, is not legally significant even if the symbol
+has to be renamed in many places. Keep in mind, however, that a
+series of minor changes by the same person can add up to a significant
+contribution. What counts is the total contribution of the person; it
+is irrelevant which parts of it were contributed when.
+
+Copyright does not cover ideas. If someone contributes ideas but no
+text, these ideas may be morally significant as contributions, and
+worth giving credit for, but they are not significant for copyright
+purposes. Likewise, bug reports do not count for copyright purposes.
+
+When giving credit to people whose contributions are not legally
+significant for copyright purposes, be careful to make that fact
+clear. The credit should clearly say they did not contribute
+significant code or text.
+
+When people's contributions are not legally significant because they
+did not write code, do this by stating clearly what their contribution
+was. For instance, you could write this:
+
+@example
+/*
+ * Ideas by:
+ * Richard Mlynarik <mly@@adoc.xerox.com> (1997)
+ * Masatake Yamato <masata-y@@is.aist-nara.ac.jp> (1999)
+ */
+@end example
+
+@noindent
+@code{Ideas by:} makes it clear that Mlynarik and Yamato here
+contributed only ideas, not code. Without the @code{Ideas by:} note,
+several years from now we would find it hard to be sure whether they
+had contributed code, and we might have to track them down and ask
+them.
+
+When you record a small patch in a change log file, first search for
+previous changes by the same person, and see if per past
+contributions, plus the new one, add up to something legally
+significant. If so, you should get copyright papers for all per
+changes before you install the new change.
+
+If that is not so, you can install the small patch. Write @samp{(tiny
+change)} after the patch author's name, like this:
+
+@example
+2002-11-04 Robert Fenk <Robert.Fenk@@gmx.de> (tiny change)
+@end example
+
+@node Recording Contributors
+@section Recording Contributors
+@cindex recording contributors
+
+@strong{Keep correct records of which portions were written by whom.}
+This is very important. These records should say which files or
+parts of files were written by each person, and which files or
+parts of files were revised by each person. This should include
+installation scripts as well as manuals and documentation
+files---everything.
+
+These records don't need to be as detailed as a change log. They
+don't need to distinguish work done at different times, only different
+people. They don't need describe changes in more detail than which
+files or parts of a file were changed. And they don't need to say
+anything about the function or purpose of a file or change---the
+Register of Copyrights doesn't care what the text does, just who wrote
+or contributed to which parts.
+
+The list should also mention if certain files distributed in the same
+package are really a separate program.
+
+Only the contributions that are legally significant for copyright
+purposes (@pxref{Legally Significant}) need to be listed. Small
+contributions, bug reports, ideas, etc., can be omitted.
+
+For example, this would describe an early version of GAS:
+
+@display
+Dean Elsner first version of all files except gdb-lines.c and m68k.c.
+Jay Fenlason entire files gdb-lines.c and m68k.c, most of app.c,
+ plus extensive changes in messages.c, input-file.c, write.c
+ and revisions elsewhere.
+
+Note: GAS is distributed with the files obstack.c and obstack.h, but
+they are considered a separate package, not part of GAS proper.
+@end display
+
+@cindex @file{AUTHORS} file
+Please keep these records in a file named @file{AUTHORS} in the source
+directory for the program itself.
+
+You can use the change log as the basis for these records, if you
+wish. Just make sure to record the correct author for each change
+(the person who wrote the change, @emph{not} the person who installed
+it), and add @samp{(tiny change)} for those changes that are too
+trivial to matter for copyright purposes. Later on you can update the
+@file{AUTHORS} file from the change log. This can even be done
+automatically, if you are careful about the formatting of the change
+log entries.
+
+It is ok to include other email addresses, names, and program
+information in @file{AUTHORS}, such as bug-reporting information.
+@xref{Standard Mailing Lists}.
+
+
+@node Copying from Other Packages
+@section Copying from Other Packages
+
+When you copy legally significant code from another free software
+package with a GPL-compatible license, you should look in the
+package's records to find out the authors of the part you are copying,
+and list them as the contributors of the code that you copied. If all
+you did was copy it, not write it, then for copyright purposes you are
+@emph{not} one of the contributors of @emph{this} code.
+
+Especially when code has been released into the public domain, authors
+sometimes fail to write a license statement in each file. In this
+case, please first be sure that all the authors of the code have
+disclaimed copyright interest. Then, when copying the new files into
+your project, add a brief note at the beginning of the files recording
+the authors, the public domain status, and anything else relevant.
+
+On the other hand, when merging some public domain code into an
+existing file covered by the GPL (or LGPL or other free software
+license), there is no reason to indicate the pieces which are public
+domain. The notice saying that the whole file is under the GPL (or
+other license) is legally sufficient.
+
+Using code that is released under a GPL-compatible free license,
+rather than being in the public domain, may require preserving
+copyright notices or other steps. Of course, you should do what is
+needed.
+
+If you are maintaining an FSF-copyrighted package, please verify we
+have papers for the code you are copying, @emph{before} copying it.
+If you are copying from another FSF-copyrighted package, then we
+presumably have papers for that package's own code, but you must check
+whether the code you are copying is part of an external library; if
+that is the case, we don't have papers for it, so you should not copy
+it. It can't hurt in any case to double-check with the developer of
+that package.
+
+When you are copying code for which we do not already have papers, you
+need to get papers for it. It may be difficult to get the papers if
+the code was not written as a contribution to your package, but that
+doesn't mean it is ok to do without them. If you cannot get papers
+for the code, you can only use it as an external library
+(@pxref{External Libraries}).
+
+
+@node Copyright Notices
+@section Copyright Notices
+@cindex copyright notices in program files
+
+You should maintain a proper copyright notice and a license
+notice in each nontrivial file in the package. (Any file more than ten
+lines long is nontrivial for this purpose.) This includes header files
+and interface definitions for
+building or running the program, documentation files, and any supporting
+files. If a file has been explicitly placed in the public domain, then
+instead of a copyright notice, it should have a notice saying explicitly
+that it is in the public domain.
+
+Even image files and sound files should contain copyright notices and
+license notices, if their format permits. Some formats do not have
+room for textual annotations; for these files, state the copyright and
+copying permissions in a @file{README} file in the same directory.
+
+Change log files should have a copyright notice and license notice at
+the end, since new material is added at the beginning but the end
+remains the end.
+
+When a file is automatically generated from some other file in the
+distribution, it is useful for the automatic procedure to copy the
+copyright notice and permission notice of the file it is generated
+from, if possible. Alternatively, put a notice at the beginning saying
+which file it is generated from.
+
+A copyright notice looks like this:
+
+@example
+Copyright (C) @var{year1}, @var{year2}, @var{year3} @var{copyright-holder}
+@end example
+
+The word @samp{Copyright} must always be in English, by international
+convention.
+
+The @var{copyright-holder} may be the Free Software Foundation, Inc., or
+someone else; you should know who is the copyright holder for your
+package.
+
+Replace the @samp{(C)} with a C-in-a-circle symbol if it is available.
+For example, use @samp{@@copyright@{@}} in a Texinfo file. However,
+stick with parenthesized @samp{C} unless you know that C-in-a-circle
+will work. For example, a program's standard @option{--version}
+message should use parenthesized @samp{C} by default, though message
+translations may use C-in-a-circle in locales where that symbol is
+known to work. Alternatively, the @samp{(C)} or C-in-a-circle can be
+omitted entirely; the word @samp{Copyright} suffices.
+
+To update the list of year numbers, add each year in which you have
+made nontrivial changes to the package. (Here we assume you're using
+a publicly accessible revision control server, so that every revision
+installed is also immediately and automatically published.) When you
+add the new year, it is not required to keep track of which files have
+seen significant changes in the new year and which have not. It is
+recommended and simpler to add the new year to all files in the
+package, and be done with it for the rest of the year.
+
+Don't delete old year numbers, though; they are significant since they
+indicate when older versions might theoretically go into the public
+domain, if the movie companies don't continue buying laws to further
+extend copyright. If you copy a file into the package from some other
+program, keep the copyright years that come with the file.
+
+You can use a range (@samp{2008-2010}) instead of listing individual
+years (@samp{2008, 2009, 2010}) if and only if: 1)@tie{}every year in
+the range, inclusive, really is a ``copyrightable'' year that would be
+listed individually; @emph{and} 2)@tie{}you make an explicit statement
+in a @file{README} file about this usage.
+
+For files which are regularly copied from another project (such as
+@samp{gnulib}), leave the copyright notice as it is in the original.
+
+The copyright statement may be split across multiple lines, both in
+source files and in any generated output. This often happens for
+files with a long history, having many different years of
+publication.
+
+For an FSF-copyrighted package, if you have followed the procedures to
+obtain legal papers, each file should have just one copyright holder:
+the Free Software Foundation, Inc. You should edit the file's
+copyright notice to list that name and only that name.
+
+But if contributors are not all assigning their copyrights to a single
+copyright holder, it can easily happen that one file has several
+copyright holders. Each contributor of nontrivial text is a copyright
+holder.
+
+In that case, you should always include a copyright notice in the name
+of main copyright holder of the file. You can also include copyright
+notices for other copyright holders as well, and this is a good idea
+for those who have contributed a large amount and for those who
+specifically ask for notices in their names. (Sometimes the license
+on code that you copy in may require preserving certain copyright
+notices.) But you don't have to include a notice for everyone who
+contributed to the file (which would be rather inconvenient).
+
+Sometimes a program has an overall copyright notice that refers to the
+whole program. It might be in the @file{README} file, or it might be
+displayed when the program starts up. This copyright notice should
+mention the year of completion of the most recent major version; it
+can mention years of completion of previous major versions, but that
+is optional.
+
+
+@node License Notices
+@section License Notices
+@cindex license notices in program files
+
+Every nontrivial file needs a license notice as well as the copyright
+notice. (Without a license notice giving permission to copy and
+change the file, the file is non-free.)
+
+The package itself should contain a full copy of GPL in plain text
+(conventionally in a file named @file{COPYING}) and the GNU Free
+Documentation License (included within your documentation, so there is
+no need for a separate plain text version). If the package contains
+any files distributed under the Lesser GPL, it should contain a full
+copy of its plain text version also (conventionally in a file named
+@file{COPYING.LESSER}).
+
+If you have questions about licensing issues for your GNU package,
+please write @email{licensing@@gnu.org}.
+
+@menu
+* Which: Licensing of GNU Packages.
+* Canonical: Canonical License Sources.
+* Code: License Notices for Code.
+* Documentation: License Notices for Documentation.
+* Other: License Notices for Other Files.
+@end menu
+
+
+@node Licensing of GNU Packages
+@subsection Licensing of GNU Packages
+
+Normally, GNU packages should use the latest version of the GNU GPL,
+with the ``or any later version'' formulation. @xref{License Notices
+for Code}, for the exact wording of the license notice.
+
+Occasionally, a GNU library may provide functionality which is already
+widely available to proprietary programs through alternative
+implementations; for example, the GNU C Library. In such cases, the
+Lesser GPL should be used (again, for the notice wording,
+@pxref{License Notices for Code}). If a GNU library provides unique
+functionality, however, the GNU GPL should be used.
+@url{http://www.gnu.org/licenses/why-not-lgpl.html} discusses this
+strategic choice.
+
+Some of these libraries need to work with programs released under
+GPLv2-only; that is, which allow the GNU GPL version 2 but not later
+versions. In this case, the GNU package should be released under a
+dual license: GNU GPL version 2 (or any later version) and the GNU
+Lesser GPL version 3 (or any later version). Here is the notice for
+that case:
+
+@smallexample
+This file is part of GNU @var{package}.
+
+GNU @var{package} is free software: you can redistribute it and/or
+modify it under the terms of either:
+
+ * the GNU Lesser General Public License as published by the Free
+ Software Foundation; either version 3 of the License, or (at your
+ option) any later version.
+
+or
+
+ * the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your
+ option) any later version.
+
+or both in parallel, as here.
+
+GNU @var{package} is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received copies of the GNU General Public License and
+the GNU Lesser General Public License along with this program. If
+not, see @url{http://www.gnu.org/licenses/}.
+@end smallexample
+
+For small packages, you can use ``This program'' instead of ``GNU
+@var{package}''.
+
+
+@node Canonical License Sources
+@subsection Canonical License Sources
+
+You can get the official versions of these files from several places.
+You can use whichever is the most convenient for you.
+
+@itemize @bullet
+@item
+@uref{http://www.gnu.org/licenses/}.
+
+@item
+The @code{gnulib} project on @code{savannah.gnu.org}, which you
+can access via anonymous Git or CVS. See
+@uref{http://savannah.gnu.org/projects/gnulib}.
+
+@end itemize
+
+The official Texinfo sources for the licenses are also available in
+those same places, so you can include them in your documentation. A
+GFDL-covered manual should include the GFDL in this way. @xref{GNU
+Sample Texts,,, texinfo, Texinfo}, for a full example in a Texinfo
+manual.
+
+
+@node License Notices for Code
+@subsection License Notices for Code
+
+Typically the license notice for program files (including build scripts,
+configure files and makefiles) should cite the GPL, like this:
+
+@quotation
+This file is part of GNU @var{package}.
+
+GNU @var{package} is free software: you can redistribute it and/or
+modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+GNU @var{package} is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see @url{http://www.gnu.org/licenses/}.
+@end quotation
+
+But in a small program which is just a few files, you can use
+this instead:
+
+@quotation
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see @url{http://www.gnu.org/licenses/}.
+@end quotation
+
+In either case, for those few packages which use the Lesser GPL
+(@pxref{Licensing of GNU Packages}), insert the word ``Lesser'' before
+``General'' in @emph{all three} places.
+@url{http://@/www.gnu.org/@/licenses/@/gpl-howto.html} discusses application
+the GPL in more detail.
+
+
+@node License Notices for Documentation
+@subsection License Notices for Documentation
+
+Documentation files should have license notices also. Manuals should
+use the GNU Free Documentation License. Following is an example of the
+license notice to use after the copyright line(s) using all the
+features of the GFDL.
+
+@smallexample
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being ``GNU General Public License'', with the
+Front-Cover Texts being ``A GNU Manual'', and with the Back-Cover Texts
+as in (a) below. A copy of the license is included in the section
+entitled ``GNU Free Documentation License''.
+
+(a) The FSF's Back-Cover Text is: ``You have the freedom to
+copy and modify this GNU manual. Buying copies from the FSF
+supports it in developing GNU and promoting software freedom.''
+@end smallexample
+
+If the FSF does not publish this manual on paper, then omit the last
+sentence in (a) that talks about copies from GNU Press. If the FSF is
+not the copyright holder, then replace @samp{FSF} with the appropriate
+name.
+
+Please adjust the list of invariant sections as appropriate for your
+manual. If there are none, then say ``with no Invariant Sections''.
+If your manual is not published by the FSF, and under 400 pages, you
+can omit both cover texts.
+
+@xref{GNU Sample Texts,,, texinfo, Texinfo}, for a full example in a
+Texinfo manual, and see
+@url{http://www.gnu.org/licenses/fdl-howto.html} for more advice about
+how to use the GNU FDL.
+
+If the manual is over 400 pages, or if the FSF thinks it might be a
+good choice for publishing on paper, then please include the GNU GPL,
+as in the notice above. Please also include our standard invariant
+section which explains the importance of free documentation. Write to
+@email{assign@@gnu.org} to get a copy of this section.
+
+When you distribute several manuals together in one software package,
+their on-line forms can share a single copy of the GFDL (see
+section@tie{}6). However, the printed (@samp{.dvi}, @samp{.pdf},
+@dots{}) forms should each contain a copy of the GFDL, unless they are
+set up to be printed and published only together. Therefore, it is
+usually simplest to include the GFDL in each manual.
+
+
+@node License Notices for Other Files
+@subsection License Notices for Other Files
+
+Small supporting files, short manuals (under 300 lines long) and rough
+documentation (@file{README} files, @file{INSTALL} files, etc.)@: can
+use a simple all-permissive license like this one:
+
+@smallexample
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without any warranty.
+@end smallexample
+
+Older versions of this license did not have the second sentence with
+the express warranty disclaimer. There is no urgent need to update
+existing files, but new files should use the new text.
+
+If your package distributes Autoconf macros that are intended to be
+used (hence distributed) by third-party packages under possibly
+incompatible licenses, you may also use the above all-permissive
+license for these macros.
+
+
+@node External Libraries
+@section External Libraries
+
+When maintaining an FSF-copyrighted GNU package, you may occasionally
+want to use a general-purpose free software module which offers a
+useful functionality, as a ``library'' facility (though the module is
+not always packaged technically as a library).
+
+In a case like this, it would be unreasonable to ask the author of that
+module to assign the copyright to the FSF. After all, person did not
+write it specifically as a contribution to your package, so it would be
+impertinent to ask per, out of the blue, ``Please give the FSF your
+copyright.''
+
+So the thing to do in this case is to make your program use the module,
+but not consider it a part of your program. There are two reasonable
+methods of doing this:
+
+@enumerate
+@item
+Assume the module is already installed on the system, and use it when
+linking your program. This is only reasonable if the module really has
+the form of a library.
+
+@item
+Include the module in your package, putting the source in a separate
+subdirectory whose @file{README} file says, ``This is not part of the
+GNU FOO program, but is used with GNU FOO.'' Then set up your makefiles
+to build this module and link it into the executable.
+
+For this method, it is not necessary to treat the module as a library
+and make a @samp{.a} file from it. You can link with the @samp{.o}
+files directly in the usual manner.
+@end enumerate
+
+Both of these methods create an irregularity, and our lawyers have told
+us to minimize the amount of such irregularity. So consider using these
+methods only for general-purpose modules that were written for other
+programs and released separately for general use. For anything that was
+written as a contribution to your package, please get papers signed.
+
+
+@node Clean Ups
+@chapter Cleaning Up Changes
+@cindex contributions, accepting
+@cindex quality of changes suggested by others
+
+Don't feel obligated to include every change that someone asks you to
+include. You must judge which changes are improvements---partly based
+on what you think the users will like, and partly based on your own
+judgment of what is better. If you think a change is not good, you
+should reject it.
+
+If someone sends you changes which are useful, but written in an ugly
+way or hard to understand and maintain in the future, don't hesitate to
+ask per to clean up their changes before you merge them. Since the
+amount of work we can do is limited, the more we convince others to help
+us work efficiently, the faster GNU will advance.
+
+If the contributor will not or can not make the changes clean enough,
+then it is legitimate to say ``I can't install this in its present form;
+I can only do so if you clean it up.'' Invite per to distribute per
+changes another way, or to find other people to make them clean enough
+for you to install and maintain.
+
+The only reason to do these cleanups yourself is if (1) it is easy, less
+work than telling the author what to clean up, or (2) the change is an
+important one, important enough to be worth the work of cleaning it up.
+
+The GNU Coding Standards are a good thing to send people when you ask
+them to clean up changes (@pxref{Top, , Contents, standards, GNU Coding
+Standards}). The Emacs Lisp manual contains an appendix that gives
+coding standards for Emacs Lisp programs; it is good to urge Lisp authors to
+read it (@pxref{Tips, , Tips and Conventions, elisp, The GNU Emacs Lisp
+Reference Manual}).
+
+
+@node Platforms
+@chapter Platforms to Support
+
+Most GNU packages run on a wide range of platforms. These platforms are
+not equally important.
+
+The most important platforms for a GNU package to support are GNU and
+GNU/Linux. Developing the GNU operating system is the whole point of
+the GNU Project; a GNU package exists to make the whole GNU system more
+powerful. So please keep that goal in mind and let it shape your work.
+For instance, every new feature you add should work on GNU, and
+GNU/Linux if possible too. If a new feature only runs on GNU and
+GNU/Linux, it could still be acceptable. However, a feature that runs
+only on other systems and not on GNU or GNU/Linux makes no sense in a
+GNU package.
+
+You will naturally want to keep the program running on all the platforms
+it supports. But you personally will not have access to most of these
+platforms---so how should you do it?
+
+Don't worry about trying to get access to all of these platforms. Even
+if you did have access to all the platforms, it would be inefficient for
+you to test the program on each platform yourself. Instead, you should
+test the program on a few platforms, including GNU or GNU/Linux, and let
+the users test it on the other platforms. You can do this through a
+pretest phase before the real release; when there is no reason to expect
+problems, in a package that is mostly portable, you can just make a
+release and let the users tell you if anything unportable was
+introduced.
+
+It is important to test the program personally on GNU or GNU/Linux,
+because these are the most important platforms for a GNU package. If
+you don't have access to one of these platforms, as a GNU maintainer
+you can get access to the general GNU login machine; see
+@url{http://www.gnu.org/software/README.accounts.html}.
+
+Supporting other platforms is optional---we do it when that seems like
+a good idea, but we don't consider it obligatory. If the users don't
+take care of a certain platform, you may have to desupport it unless
+and until users come forward to help. Conversely, if a user offers
+changes to support an additional platform, you will probably want to
+install them, but you don't have to. If you feel the changes are
+complex and ugly, if you think that they will increase the burden of
+future maintenance, you can and should reject them. This includes
+both free or mainly-free platforms such as OpenBSD, FreeBSD, and
+NetBSD, and non-free platforms such as Windows.
+
+
+@node Mail
+@chapter Dealing With Mail
+@cindex email
+
+This chapter describes setting up mailing lists for your package, and
+gives advice on how to handle bug reports and random requests once you
+have them.
+
+@menu
+* Standard Mailing Lists:: @samp{bug-pkg@@gnu.org} and other standard names.
+* Creating Mailing Lists:: The best way is to use Savannah.
+* Replying to Mail:: Advice on replying to incoming mail.
+@end menu
+
+
+@node Standard Mailing Lists
+@section Standard Mailing Lists
+
+@cindex standard mailing lists
+@cindex mailing lists, standard names of
+
+@cindex mailing list for bug reports
+Once a program is in use, you will get bug reports for it. Most GNU
+programs have their own special lists for sending bug reports. The
+advertised bug-reporting email address should always be
+@samp{bug-@var{package}@@gnu.org}, to help show users that the program
+is a GNU package, but it is ok to set up that list to forward to another
+site if you prefer.
+
+@cindex @email{bug-gnu-utils@@gnu.org}
+We also have a catch-all list, @email{bug-gnu-utils@@gnu.org}, which is
+used for all GNU programs that don't have their own specific lists. But
+nowadays we want to give each program its own bug-reporting list and
+move away from using @email{bug-gnu-utils}.
+
+@xref{Replying to Mail}, for more about handling and tracking bug
+reports.
+
+@cindex help for users, mailing list for
+Some GNU programs with many users have another mailing list,
+@samp{help-@var{package}.org}, for people to ask other users for help.
+If your program has many users, you should create such a list for it.
+For a fairly new program, which doesn't have a large user base yet, it
+is better not to bother with this.
+
+@cindex announcements, mailing list for
+If you wish, you can also have a mailing list
+@samp{info-@var{package}} for announcements (@pxref{Announcements}).
+Any other mailing lists you find useful can also be created.
+
+The package distribution should state the name of all the package's
+mailing lists in a prominent place, and ask users to help us by
+reporting bugs appropriately. The top-level @file{README} file and/or
+@file{AUTHORS} file are good places. Mailing list information should
+also be included in the manual and the package web pages (@pxref{Web
+Pages}).
+
+
+
+@node Creating Mailing Lists
+@section Creating Mailing Lists
+
+@cindex creating mailing lists
+@cindex mailing lists, creating
+
+Using the web interface on @code{savannah.gnu.org} is by far the
+easiest way to create normal mailing lists, managed through Mailman on
+the GNU mail server. Once you register your package on Savannah, you
+can create (and remove) lists yourself through the `Mailing Lists'
+menu, without needing to wait for intervention by anyone else.
+Furthermore, lists created through Savannah will have a reasonable
+default configuration for antispam purposes (see below).
+
+To create and maintain simple aliases and unmanaged lists, you can
+edit @file{/com/mailer/aliases} on the main GNU server. If you don't
+have an account there, please read
+@url{http://www.gnu.org/software/README.accounts.html} (@pxref{Getting
+a GNU Account}).
+
+But if you don't want to learn how to do those things, you can
+alternatively ask @email{alias-file@@gnu.org} to add you to the
+bug-reporting list for your program. To set up a new list, contact
+@email{new-mailing-list@@gnu.org}. You can subscribe to a list managed
+by Mailman by sending mail to the corresponding @samp{-request} address.
+
+@cindex spam prevention
+You should moderate postings from non-subscribed addresses on your
+mailing lists, to prevent propagation of unwanted messages (``spam'')
+to subscribers and to the list archives. For lists controlled by
+Mailman, you can do this by setting @code{Privacy Options - Sender
+Filter - generic_nonmember_action} to @code{Hold}, and then
+periodically (daily is best) reviewing the held messages, accepting
+the real ones and discarding the junk.
+
+Lists created through Savannah will have this setting, and a number of
+others, such that spam will be automatically deleted (after a short
+delay). The Savannah mailing list page describes all the details.
+You should still review the held messages in order to approve any that
+are real.
+
+
+@node Replying to Mail
+@section Replying to Mail
+
+@cindex responding to bug reports
+@cindex bug reports, handling
+@cindex help requests, handling
+
+When you receive bug reports, keep in mind that bug reports are crucial
+for your work. If you don't know about problems, you cannot fix them.
+So always thank each person who sends a bug report.
+
+You don't have an obligation to give more response than that, though.
+The main purpose of bug reports is to help you contribute to the
+community by improving the next version of the program. Many of the
+people who report bugs don't realize this---they think that the point is
+for you to help them individually. Some will ask you to focus on that
+@emph{instead of} on making the program better. If you comply with
+their wishes, you will have been distracted from the job of maintaining
+the program.
+
+For example, people sometimes report a bug in a vague (and therefore
+useless) way, and when you ask for more information, they say, ``I just
+wanted to see if you already knew the solution'' (in which case the bug
+report would do nothing to help improve the program). When this
+happens, you should explain to them the real purpose of bug reports. (A
+canned explanation will make this more efficient.)
+
+When people ask you to put your time into helping them use the program,
+it may seem ``helpful'' to do what they ask. But it is much @emph{less}
+helpful than improving the program, which is the maintainer's real job.
+
+By all means help individual users when you feel like it, if you feel
+you have the time available. But be careful to limit the amount of time
+you spend doing this---don't let it eat away the time you need to
+maintain the program! Know how to say no; when you are pressed for
+time, just ``thanks for the bug report---I will fix it'' is enough
+response.
+
+Some GNU packages, such as Emacs and GCC, come with advice about how
+to make bug reports useful. Copying and adapting that could be very
+useful for your package.
+
+@cindex @url{http://bugs.gnu.org}
+@cindex bug reports, email tracker for
+@cindex bug reports, web tracker for
+If you would like to use an email-based bug tracking system, see
+@url{http://bugs.gnu.org}; this can be connected with the regular
+bug-reporting address. Alternatively, if you would like to use a
+web-based bug tracking system, Savannah supports this (@pxref{Old
+Versions}), but please don't fail to accept bugs by regular email as
+well---we don't want to put up unnecessary barriers against users
+submitting reports.
+
+
+@node Old Versions
+@chapter Recording Old Versions
+@cindex version control
+
+It is very important to keep backup files of all source files of GNU.
+You can do this using a source control system (such as Bazaar, RCS,
+CVS, Git, Subversion, @dots{}) if you like. An easy way to use
+many such systems is via the Version Control library in Emacs
+(@pxref{Introduction to VC,, Introduction to Version Control, emacs,
+The GNU Emacs Manual}).
+
+The history of previous revisions and log entries is very important for
+future maintainers of the package, so even if you do not make it
+publicly accessible, be careful not to put anything in the repository or
+change log that you would not want to hand over to another maintainer
+some day.
+
+@cindex @code{savannah-hackers@@gnu.org}
+The GNU Project provides a server that GNU packages can use
+for source control and other package needs: @code{savannah.gnu.org}.
+Savannah is managed by @email{savannah-hackers@@gnu.org}. For more
+details on using and contributing to Savannah, see
+@url{http://savannah.gnu.org/maintenance}.
+
+It's not an absolute requirement, but all GNU maintainers are strongly
+encouraged to take advantage of Savannah, as sharing such a central
+point can serve to foster a sense of community among GNU developers as
+well as help in keeping up with project management. Please don't mark
+Savannah projects for GNU packages as private; that defeats a large
+part of the purpose of using Savannah in the first place.
+
+@cindex @code{savannah-announce@@gnu.org} mailing list
+If you do use Savannah, please subscribe to the
+@email{savannah-announce@@gnu.org} mailing list
+(@url{http://lists.gnu.org/mailman/listinfo/savannah-announce}). This
+is a very low-volume list to keep Savannah users informed of system
+upgrades, problems, and the like.
+
+
+@node Distributions
+@chapter Distributions
+
+It is important to follow the GNU conventions when making GNU software
+distributions.
+
+@menu
+* Distribution tar Files::
+* Distribution Patches::
+* Distribution on ftp.gnu.org::
+* Test Releases::
+* Automated FTP Uploads::
+* Announcements::
+@end menu
+
+@node Distribution tar Files
+@section Distribution tar Files
+@cindex distribution, tar files
+
+The tar file for version @var{m}.@var{n} of program @code{foo} should be
+named @file{foo-@var{m}.@var{n}.tar}. It should unpack into a
+subdirectory named @file{foo-@var{m}.@var{n}}. Tar files should not
+unpack into files in the current directory, because this is inconvenient
+if the user happens to unpack into a directory with other files in it.
+
+Here is how the @file{Makefile} for Bison creates the tar file.
+This method is good for other programs.
+
+@example
+dist: bison.info
+ echo bison-`sed -e '/version_string/!d' \
+ -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q version.c` > .fname
+ -rm -rf `cat .fname`
+ mkdir `cat .fname`
+ dst=`cat .fname`; for f in $(DISTFILES); do \
+ ln $(srcdir)/$$f $$dst/$$f || @{ echo copying $$f; \
+ cp -p $(srcdir)/$$f $$dst/$$f ; @} \
+ done
+ tar --gzip -chf `cat .fname`.tar.gz `cat .fname`
+ -rm -rf `cat .fname` .fname
+@end example
+
+Source files that are symbolic links to other file systems cannot be
+installed in the temporary directory using @code{ln}, so use @code{cp}
+if @code{ln} fails.
+
+@pindex automake
+Using Automake is a good way to take care of writing the @code{dist}
+target.
+
+@node Distribution Patches
+@section Distribution Patches
+@cindex patches, against previous releases
+
+If the program is large, it is useful to make a set of diffs for each
+release, against the previous important release.
+
+At the front of the set of diffs, put a short explanation of which
+version this is for and which previous version it is relative to.
+Also explain what else people need to do to update the sources
+properly (for example, delete or rename certain files before
+installing the diffs).
+
+The purpose of having diffs is that they are small. To keep them
+small, exclude files that the user can easily update. For example,
+exclude info files, DVI files, tags tables, output files of Bison or
+Flex. In Emacs diffs, we exclude compiled Lisp files, leaving it up
+to the installer to recompile the patched sources.
+
+When you make the diffs, each version should be in a directory suitably
+named---for example, @file{gcc-2.3.2} and @file{gcc-2.3.3}. This way,
+it will be very clear from the diffs themselves which version is which.
+
+@pindex diff
+@pindex patch
+@cindex time stamp in diffs
+If you use GNU @code{diff} to make the patch, use the options
+@samp{-rc2P}. That will put any new files into the output as ``entirely
+different''. Also, the patch's context diff headers should have dates
+and times in Universal Time using traditional Unix format, so that patch
+recipients can use GNU @code{patch}'s @samp{-Z} option. For example,
+you could use the following Bourne shell command to create the patch:
+
+@example
+LC_ALL=C TZ=UTC0 diff -rc2P gcc-2.3.2 gcc-2.3.3 | \
+gzip -9 >gcc-2.3.2-2.3.3.patch.gz
+@end example
+
+If the distribution has subdirectories in it, then the diffs probably
+include some files in the subdirectories. To help users install such
+patches reliably, give them precise directions for how to run patch.
+For example, say this:
+
+@display
+To apply these patches, cd to the main directory of the program
+and then use `patch -p1'. `-p1' avoids guesswork in choosing
+which subdirectory to find each file in.
+@end display
+
+It's wise to test your patch by applying it to a copy of the old
+version, and checking that the result exactly matches the new version.
+
+@node Distribution on ftp.gnu.org
+@section Distribution on @code{ftp.gnu.org}
+@cindex GNU ftp site
+@cindex @code{ftp.gnu.org}, the GNU release site
+
+GNU packages are distributed through the directory @file{/gnu} on
+@code{ftp.gnu.org}, via both HTTP and FTP. Each package should have a
+subdirectory named after the package, and all the distribution files
+for the package should go in that subdirectory.
+
+@xref{Automated FTP Uploads}, for procedural details of putting new
+versions on @code{ftp.gnu.org}.
+
+@node Test Releases
+@section Test Releases
+@cindex test releases
+@cindex beta releases
+@cindex pretest releases
+
+@cindex @code{alpha.gnu.org}, test release site
+When you release a greatly changed new major version of a program, you
+might want to do so as a pretest. This means that you make a tar file,
+but send it only to a group of volunteers that you have recruited. (Use
+a suitable GNU mailing list/newsgroup to recruit them.)
+
+We normally use the server @code{alpha.gnu.org} for pretests and
+prerelease versions. @xref{Automated FTP Uploads}, for procedural details
+of putting new versions on @code{alpha.gnu.org}.
+
+Once a program gets to be widely used and people expect it to work
+solidly, it is a good idea to do pretest releases before each ``real''
+release.
+
+There are two ways of handling version numbers for pretest versions.
+One method is to treat them as versions preceding the release you are going
+to make.
+
+In this method, if you are about to release version 4.6 but you want
+to do a pretest first, call it 4.5.90. If you need a second pretest,
+call it 4.5.91, and so on. If you are really unlucky and ten pretests
+are not enough, after 4.5.99 you could advance to 4.5.990 and so on.
+(You could also use 4.5.100, but 990 has the advantage of sorting in
+the right order.)
+
+The other method is to attach a date to the release number that is
+coming. For a pretest for version 4.6, made on Dec 10, 2002, this
+would be 4.6.20021210. A second pretest made the same day could be
+4.6.20021210.1.
+
+For development snapshots that are not formal pretests, using just
+the date without the version numbers is ok too.
+
+One thing that you should never do is to release a pretest with the same
+version number as the planned real release. Many people will look only
+at the version number (in the tar file name, in the directory name that
+it unpacks into, or wherever they can find it) to determine whether a
+tar file is the latest version. People might look at the test release
+in this way and mistake it for the real release. Therefore, always
+change the number when you release changed code.
+
+
+@node Automated FTP Uploads
+@section Automated FTP Uploads
+
+@cindex ftp uploads, automated
+In order to upload new releases to @code{ftp.gnu.org} or
+@code{alpha.gnu.org}, you first need to register the necessary
+information. Then, you can perform uploads yourself, with no
+intervention needed by the system administrators.
+
+The general idea is that releases should be crytographically signed
+before they are made publicly available.
+
+@menu
+* Automated Upload Registration::
+* Automated Upload Procedure::
+* FTP Upload Directive File - v1.1::
+* FTP Upload Directive File - v1.0::
+@end menu
+
+
+@node Automated Upload Registration
+@subsection Automated Upload Registration
+
+@cindex registration for uploads
+@cindex uploads, registration for
+
+Here is how to register your information so you can perform uploads
+for your GNU package:
+
+@enumerate
+
+@item
+Create an account for yourself at @url{http://savannah.gnu.org}, if
+you don't already have one. By the way, this is also needed to
+maintain the web pages at @url{http://www.gnu.org} for your project
+(@pxref{Web Pages}).
+
+@item
+In the @samp{My Account Conf} page on @code{savannah}, upload the GPG
+key you will use to sign your packages. If you haven't created one
+before, you can do so with the command @code{gpg --gen-key} (you can
+accept all the default answers to its questions).
+
+Optional but recommended: Send your key to a GPG public key server:
+@code{gpg --keyserver keys.gnupg.net --send-keys @var{keyid}}, where
+@var{keyid} is the eight hex digits reported by @code{gpg
+--list-public-keys} on the @code{pub} line before the date. For full
+information about GPG, see @url{http://www.gnu.org/software/gpg}.
+
+@item
+Compose a message with the following items in some @var{msgfile}.
+Then GPG-sign it by running @code{gpg --clearsign @var{msgfile}}, and
+finally email the resulting @file{@var{msgfile}.asc} to
+@email{ftp-upload@@gnu.org}.
+
+@enumerate
+@item
+Name of package(s) that you are the maintainer for, your
+preferred email address, and your Savannah username.
+
+@item
+An ASCII armored copy of your GPG key, as an attachment. (@samp{gpg
+--export -a @var{your_key_id} >mykey.asc} should give you this.)
+
+@item
+A list of names and preferred email addresses of other individuals you
+authorize to make releases for which packages, if any (in the case that you
+don't make all releases yourself).
+
+@item
+ASCII armored copies of GPG keys for any individuals listed in (3).
+@end enumerate
+@end enumerate
+
+The administrators will acknowledge your message when they have added
+the proper GPG keys as authorized to upload files for the
+corresponding packages.
+
+The upload system will email receipts to the given email addresses
+when an upload is made, either successfully or unsuccessfully.
+
+
+@node Automated Upload Procedure
+@subsection Automated Upload Procedure
+
+@cindex uploads
+
+Once you have registered your information as described in the previous
+section, you will be able to do ftp uploads for yourself using the
+following procedure.
+
+For each upload destined for @code{ftp.gnu.org} or
+@code{alpha.gnu.org}, three files (a @dfn{triplet}) need to be
+uploaded via ftp to the host @code{ftp-upload.gnu.org}.
+
+@enumerate
+@item
+The file to be distributed; for example, @file{foo.tar.gz}.
+
+@item
+Detached GPG binary signature file for (1); for example,
+@file{foo.tar.gz.sig}. Make this with @samp{gpg -b foo.tar.gz}.
+
+@item
+A clearsigned @dfn{directive file}; for example,
+@file{foo.tar.gz.directive.asc}. Make this by preparing the plain
+text file @file{foo.tar.gz.directive} and then run @samp{gpg
+--clearsign foo.tar.gz.directive}. @xref{FTP Upload Directive File -
+v1.1}, for the contents of the directive file.
+@end enumerate
+
+The names of the files are important. The signature file must have the
+same name as the file to be distributed, with an additional
+@file{.sig} extension. The directive file must have the same name as
+the file to be distributed, with an additional @file{.directive.asc}
+extension. If you do not follow this naming convention, the upload
+@emph{will not be processed}.
+
+Since v1.1 of the upload script, it is also possible to upload a
+clearsigned directive file on its own (no accompanying @file{.sig} or
+any other file) to perform certain operations on the server.
+@xref{FTP Upload Directive File - v1.1}, for more information.
+
+Upload the file(s) via anonymous ftp to @code{ftp-upload.gnu.org}. If
+the upload is destined for @code{ftp.gnu.org}, place the file(s) in
+the @file{/incoming/ftp} directory. If the upload is destined for
+@code{alpha.gnu.org}, place the file(s) in the @file{/incoming/alpha}
+directory.
+
+Uploads are processed every five minutes. Uploads that are in
+progress while the upload processing script is running are handled
+properly, so do not worry about the timing of your upload. Uploaded
+files that belong to an incomplete triplet are deleted automatically
+after 24 hours.
+
+Your designated upload email addresses (@pxref{Automated Upload Registration})
+are sent a message if there are any problems processing an upload for your
+package. You also receive a message when your upload has been successfully
+processed.
+
+One automated way to create and transfer the necessary files is to use
+the @code{gnupload} script, which is available from the
+@file{build-aux/} directory of the @code{gnulib} project at
+@url{http://savannah.gnu.org/projects/gnulib}. @code{gnupload} can
+also remove uploaded files. Run @code{gnupload --help} for a
+description and examples.
+
+@code{gnupload} uses the @code{ncftpput} program to do the actual
+transfers; if you don't happen to have the @code{ncftp} package
+installed, the @code{ncftpput-ftp} script in the @file{build-aux/}
+directory of @code{gnulib} serves as a replacement which uses plain
+command line @code{ftp}.
+
+If you have difficulties with an upload, email
+@email{ftp-upload@@gnu.org}. You can check the archive of uploads
+processed at
+@url{https://lists.gnu.org/archive/html/ftp-upload-report}.
+
+
+@node FTP Upload Directive File - v1.1
+@subsection FTP Upload Directive File - v1.1
+
+The directive file name must end in @file{directive.asc}.
+
+When part of a triplet, the directive file must always contain the
+directives @code{version}, @code{directory} and @code{filename}, as
+described. In addition, a 'comment' directive is allowed.
+
+The @code{version} directive must always have the value @samp{1.1}.
+
+The @code{directory} directive specifies the final destination
+directory where the uploaded file and its @file{.sig} companion are to
+be placed.
+
+The @code{filename} directive must contain the name of the file to be
+distributed (item@tie{}(1) above).
+
+For example, as part of an uploaded triplet, a
+@file{foo.tar.gz.directive.asc} file might contain these lines (before
+being gpg clearsigned):
+
+@example
+version: 1.1
+directory: bar/v1
+filename: foo.tar.gz
+comment: hello world!
+@end example
+
+This directory line indicates that @file{foo.tar.gz} and
+@file{foo.tar.gz.sig} are part of package @code{bar}. If you uploaded
+this triplet to @file{/incoming/ftp} and the system positively
+authenticates the signatures, the files @file{foo.tar.gz} and
+@file{foo.tar.gz.sig} will be placed in the directory
+@file{gnu/bar/v1} of the @code{ftp.gnu.org} site.
+
+The directive file can be used to create currently non-existent
+directory trees, as long as they are under the package directory for
+your package (in the example above, that is @code{bar}).
+
+If you upload a file that already exists in the FTP directory, the
+original will simply be archived and replaced with the new upload.
+
+@subheading Standalone directives
+
+When uploaded by itself, the directive file must contain one or more
+of the directives @code{symlink}, @code{rmsymlink} or @code{archive},
+in addition to the obligatory @code{directory} and @code{version}
+directives. A @code{filename} directive is not allowed, and a
+@code{comment} directive remains optional.
+
+If you use more than one directive, the directives are executed in the
+sequence they are specified in. If a directive results in an error,
+further execution of the upload is aborted.
+
+Removing a symbolic link (with @code{rmsymlink}) which does not exist
+results in an error. However, attempting to create a symbolic link
+that already exists (with @code{symlink}) is not an error. In this
+case @code{symlink} behaves like the command @command{ln -s -f}: any
+existing symlink is removed before creating the link. (But an
+existing regular file or directory is not removed.)
+
+Here are a few examples. The first removes a symlink:
+
+@example
+version: 1.1
+directory: bar/v1
+rmsymlink: foo-latest.tgz
+comment: remove a symlink
+@end example
+
+@noindent
+Archive an old file, taking it offline:
+
+@example
+version: 1.1
+directory: bar/v1
+archive: foo-1.1.tar.gz
+comment: archive an old file; it will not be
+comment: available through FTP any more.
+@end example
+
+@noindent
+Archive an old directory (with all contents), taking it offline:
+
+@example
+version: 1.1
+directory: bar/v1
+archive: foo
+comment: archive an old directory; it and its entire
+comment: contents will not be available through FTP anymore
+@end example
+
+@noindent
+Create a new symlink:
+
+@example
+version: 1.1
+directory: bar/v1
+symlink: foo-1.2.tar.gz foo-latest.tgz
+comment: create a new symlink
+@end example
+
+@noindent
+Do everything at once:
+
+@example
+version: 1.1
+directory: bar/v1
+rmsymlink: foo-latest.tgz
+symlink: foo-1.2.tar.gz foo-latest.tgz
+archive: foo-1.1.tar.gz
+comment: now do everything at once
+@end example
+
+
+@node FTP Upload Directive File - v1.0
+@subsection FTP Upload Directive File - v1.0
+
+@dfn{As of June 2006, the upload script is running in compatibility
+mode, allowing uploads with either version@tie{}1.1 or
+version@tie{}1.0 of the directive file syntax. Support for v1.0
+uploads will be phased out by the end of 2006, so please upgrade
+to@tie{}v1.1.}
+
+The directive file should contain one line, excluding the clearsigned
+data GPG that inserts, which specifies the final destination directory
+where items (1) and (2) are to be placed.
+
+For example, the @file{foo.tar.gz.directive.asc} file might contain the
+single line:
+
+@example
+directory: bar/v1
+@end example
+
+This directory line indicates that @file{foo.tar.gz} and
+@file{foo.tar.gz.sig} are part of package @code{bar}. If you were to
+upload the triplet to @file{/incoming/ftp}, and the system can
+positively authenticate the signatures, then the files
+@file{foo.tar.gz} and @file{foo.tar.gz.sig} will be placed in the
+directory @file{gnu/bar/v1} of the @code{ftp.gnu.org} site.
+
+The directive file can be used to create currently non-existent
+directory trees, as long as they are under the package directory for
+your package (in the example above, that is @code{bar}).
+
+
+@node Announcements
+@section Announcing Releases
+@cindex announcements
+
+@cindex @code{info-gnu} mailing list
+When you have a new release, please make an announcement. For
+official new releases, including those made just to fix bugs, we
+strongly recommend using the (moderated) general GNU announcements
+list, @email{info-gnu@@gnu.org}. Doing so makes it easier for users
+and developers to find the latest GNU releases. On the other hand,
+please do not announce test releases on @code{info-gnu} unless it's a
+highly unusual situation.
+
+@cindex @url{http://planet.gnu.org}
+@cindex Savannah, news area
+Please also post release announcements in the news section of your
+Savannah project site. Here, it is fine to also write news entries
+for test releases and any other newsworthy events. The news feeds
+from all GNU projects at savannah are aggregated at
+@url{http://planet.gnu.org} (GNU Planet). You can also post items
+directly, or arrange for feeds from other locations; see information
+on the GNU Planet web page.
+
+@cindex announcement mailing list, project-specific
+You can maintain your own mailing list (typically
+@email{info-@var{package}@@gnu.org}) for announcements as well if you
+like. For your own list, of course you decide as you see fit what
+events are worth announcing. (@xref{Mail}, for setting this up, and
+more suggestions on handling mail for your package.)
+
+@cindex contents of announcements
+When writing an announcement, please include the following:
+
+@itemize @bullet
+@item
+A very brief description (a few sentences at most) of the general
+purpose of your package.
+
+@item
+Your package's web page (normally
+@indicateurl{http://www.gnu.org/software/@var{package}/}).
+
+@item
+Your package's download location (normally
+@indicateurl{http://ftp.gnu.org/gnu/@var{package}/}). It is also
+useful to mention the mirror list at
+@url{http://www.gnu.org/order/ftp.html}, and that
+@url{http://ftpmirror.gnu.org/@var{package/}} will automatically
+redirect to a nearby mirror.
+
+@item
+The @t{NEWS} (@pxref{NEWS File,,, standards, GNU Coding Standards}) for
+the present release.
+@end itemize
+
+
+@node Web Pages
+@chapter Web Pages
+@cindex web pages
+
+Please write web pages about your package, and install them on
+@code{www.gnu.org}. They should follow our usual standards for web
+pages (see @url{http://www.gnu.org/server/@/fsf-html-style-sheet.html}).
+The overall goals are to support a wide variety of browsers, to focus
+on information rather than flashy eye candy, and to keep the site
+simple and uniform.
+
+We encourage you to use the standard @code{www.gnu.org} template as
+the basis for your pages:
+@url{http://www.gnu.org/server/@/standards/@/boilerplate-source.html}.
+
+Some GNU packages have just simple web pages, but the more information
+you provide, the better. So please write as much as you usefully can,
+and put all of it on @code{www.gnu.org}. However, pages that access
+databases (including mail archives and bug tracking) are an exception;
+set them up on whatever site is convenient for you, and make the pages
+on @code{www.gnu.org} link to that site.
+
+@menu
+* Hosting for Web Pages::
+* Freedom for Web Pages::
+* Manuals on Web Pages::
+* CVS Keywords in Web Pages::
+@end menu
+
+
+@node Hosting for Web Pages
+@section Hosting for Web Pages
+
+The best way to maintain the web pages for your project is to register
+the project on @code{savannah.gnu.org}. Then you can edit the pages
+using CVS, using the separate ``web repository'' available on
+Savannah, which corresponds to
+@indicateurl{http://www.gnu.org/software/@var{package}/}. You can
+keep your source files there too (using any of a variety of version
+control systems), but you can use @code{savannah.gnu.org} only for
+your gnu.org web pages if you wish; simply register a ``web-only''
+project.
+
+If you don't want to use that method, please talk with
+@email{webmasters@@gnu.org} about other possible methods. For
+instance, you can mail them pages to install, if necessary. But that
+is more work for them, so please use Savannah if you can.
+
+If you use Savannah, you can use a special file named @file{.symlinks}
+in order to create symbolic links, which are not supported in CVS.
+For details, see
+@url{http://www.gnu.org/server/standards/README.webmastering.html#symlinks}.
+
+
+@node Freedom for Web Pages
+@section Freedom for Web Pages
+
+If you use a site other than @code{www.gnu.org}, please make sure that
+the site runs on free software alone. (It is ok if the site uses
+unreleased custom software, since that is free in a trivial sense:
+there's only one user and it has the four freedoms.) If the web site
+for a GNU package runs on non-free software, the public will see this,
+and it will have the effect of granting legitimacy to the non-free
+program.
+
+If you use multiple sites, they should all follow that criterion.
+Please don't link to a site that is about your package, which the
+public might perceive as connected with it and reflecting the position
+of its developers, unless it follows that criterion.
+
+Historically, web pages for GNU packages did not include GIF images,
+because of patent problems (@pxref{Ethical and Philosophical
+Consideration}). Although the GIF patents expired in 2006, using GIF
+images is still not recommended, as the PNG and JPEG formats are
+generally superior. See @url{http://www.gnu.org/philosophy/gif.html}.
+
+
+@node Manuals on Web Pages
+@section Manuals on Web Pages
+
+The web pages for the package should include its manuals, in HTML,
+DVI, Info, PostScript, PDF, plain ASCII, and Texinfo format (source).
+All of these can be generated automatically from the Texinfo source
+using Makeinfo and other programs.
+
+When there is only one manual, put it in a subdirectory called
+@file{manual}; the file @file{manual/index.html} should have a link to
+the manual in each of its forms.
+
+If the package has more than one manual, put each one in a
+subdirectory of @file{manual}, set up @file{index.html} in each
+subdirectory to link to that manual in all its forms, and make
+@file{manual/index.html} link to each manual through its subdirectory.
+
+See the section below for details on a script to make the job of
+creating all these different formats and index pages easier.
+
+We would like to list all GNU manuals on the page
+@url{http://www.gnu.org/manual}, so if yours isn't there, please send
+mail to @code{webmasters@@gnu.org}, asking them to add yours, and they
+will do so based on the contents of your @file{manual} directory.
+
+@menu
+* Invoking gendocs.sh::
+@end menu
+
+
+@node Invoking gendocs.sh
+@subsection Invoking @command{gendocs.sh}
+@pindex gendocs.sh
+@cindex generating documentation output
+
+The script @command{gendocs.sh} eases the task of generating the
+Texinfo documentation output for your web pages
+section above. It has a companion template file, used as the basis
+for the HTML index pages. Both are available from the Texinfo CVS
+sources:
+
+@smallformat
+@uref{http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs.sh}
+@uref{http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs_template}
+@end smallformat
+
+There is also a minimalistic template, available from:
+
+@smallformat
+@uref{http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs_template_min}
+@end smallformat
+
+Invoke the script like this, in the directory containing the Texinfo
+source:
+
+@smallexample
+gendocs.sh --email @var{yourbuglist} @var{yourmanual} "GNU @var{yourmanual} manual"
+@end smallexample
+
+@noindent where @var{yourmanual} is the short name for your package
+and @var{yourbuglist} is the email address for bug reports (which
+should be @code{bug-@var{package}@@gnu.org}). The script processes
+the file @file{@var{yourmanual}.texinfo} (or @file{.texi} or
+@file{.txi}). For example:
+
+@smallexample
+cd .../texinfo/doc
+# download gendocs.sh and gendocs_template
+gendocs.sh --email bug-texinfo@@gnu.org texinfo "GNU Texinfo manual"
+@end smallexample
+
+@command{gendocs.sh} creates a subdirectory @file{manual/} containing
+the manual generated in all the standard output formats: Info, HTML,
+DVI, and so on, as well as the Texinfo source. You then need to move
+all those files, retaining the subdirectories, into the web pages for
+your package.
+
+You can specify the option @option{-o @var{outdir}} to override the
+name @file{manual}. Any previous contents of @var{outdir} will be deleted.
+
+The second argument, with the description, is included as part of the
+HTML @code{<title>} of the overall @file{manual/index.html} file. It
+should include the name of the package being documented, as shown.
+@file{manual/index.html} is created by substitution from the file
+@file{gendocs_template}. (Feel free to modify the generic template
+for your own purposes.)
+
+If you have several manuals, you'll need to run this script several
+times with different arguments, specifying a different output
+directory with @option{-o} each time, and moving all the output to
+your web page. Then write (by hand) an overall index.html with links
+to them all. For example:
+
+@smallexample
+cd .../texinfo/doc
+gendocs.sh --email bug-texinfo@@gnu.org -o texinfo texinfo "GNU Texinfo manual"
+gendocs.sh --email bug-texinfo@@gnu.org -o info info "GNU Info manual"
+gendocs.sh --email bug-texinfo@@gnu.org -o info-stnd info-stnd "GNU info-stnd manual"
+@end smallexample
+
+By default, the script uses @command{makeinfo} for generating
+@acronym{HTML} output. If you prefer to use @command{texi2html}, use
+the @option{--texi2html} command line option, e.g.:
+
+@smallexample
+gendocs --texi2html -o texinfo texinfo "GNU Texinfo manual"
+@end smallexample
+
+The template files will automatically produce entries for additional
+HTML output generated by @command{texi2html} (i.e., split by sections
+and chapters).
+
+You can set the environment variables @env{MAKEINFO}, @env{TEXI2DVI},
+@env{TEXI2HTML} and @env{DVIPS} to control the programs that get
+executed, and @env{GENDOCS_TEMPLATE_DIR} to control where the
+@file{gendocs_template} file is found.
+
+As usual, run @samp{gendocs.sh --help} for a description of all the
+options, environment variables, and more information.
+
+Please email bug reports, enhancement requests, or other
+correspondence to @email{bug-texinfo@@gnu.org}.
+
+
+@node CVS Keywords in Web Pages
+@section CVS Keywords in Web Pages
+@cindex CVS keywords in web pages
+@cindex RCS keywords in web pages
+@cindex $ keywords in web pages
+@cindex web pages, and CVS keywords
+
+Since @code{www.gnu.org} works through CVS, CVS keywords in your
+manual, such as @code{@w{$}Log$}, need special treatment (even if you
+don't happen to maintain your manual in CVS).
+
+If these keywords end up in the generated output as literal strings,
+they will be expanded. The most robust way to handle this is to turn
+off keyword expansion for such generated files. For existing files,
+this is done with:
+
+@example
+cvs admin -ko @var{file1} @var{file2} ...
+@end example
+
+@noindent
+For new files:
+
+@example
+cvs add -ko @var{file1} @var{file2} ...
+@end example
+
+@c The CVS manual is now built with numeric references and no nonsplit
+@c form, so it's not worth trying to give a direct link.
+See the ``Keyword Substitution'' section in the CVS manual, available
+at @url{http://ximbiot.com/cvs/manual}.
+
+In Texinfo source, the recommended way to literally specify a
+``dollar'' keyword is:
+
+@example
+@@w@{$@}Log$
+@end example
+
+The @code{@@w} prevents keyword expansion in the Texinfo source
+itself. Also, @code{makeinfo} notices the @code{@@w} and generates
+output avoiding the literal keyword string.
+
+
+@node Ethical and Philosophical Consideration
+@chapter Ethical and Philosophical Consideration
+@cindex ethics
+@cindex philosophy
+
+The GNU project takes a strong stand for software freedom. Many
+times, this means you'll need to avoid certain technologies when their
+use would conflict with our long-term goals.
+
+Software patents threaten the advancement of free software and freedom
+to program. There are so many software patents in the US that any
+large program probably implements hundreds of patented techniques,
+unknown to the program's developers. It would be futile and
+self-defeating to try to find and avoid all these patents. But there
+are some patents which we know are likely to be used to threaten free
+software, so we make an effort to avoid the patented techniques. If
+you are concerned about the danger of a patent and would like advice,
+write to @email{licensing@@gnu.org}, and we will try to help you get
+advice from a lawyer.
+
+Sometimes the GNU project takes a strong stand against a particular
+patented technology in order to encourage society to reject it.
+
+For example, the MP3 audio format is covered by a software patent in
+the USA and some other countries. A patent holder has threatened
+lawsuits against the developers of free programs (these are not GNU
+programs) to produce and play MP3, and some GNU/Linux distributors are
+afraid to include them. Development of the programs continues, but we
+campaign for the rejection of MP3 format in favor of Ogg Vorbis format.
+
+A GNU package should not recommend use of any non-free program, nor
+should it require a non-free program (such as a non-free compiler or
+IDE) to build. Thus, a GNU package cannot be written in a programming
+language that does not have a free software implementation. Now that
+GNU/Linux systems are widely available, all GNU packages should
+provide full functionality on a 100% free GNU/Linux system, and should
+not require any non-free software to build or function.
+The GNU Coding Standards say a lot more about this issue.
+
+A GNU package should not refer the user to any non-free documentation
+for free software. The need for free documentation to come with free
+software is now a major focus of the GNU project; to show that we are
+serious about the need for free documentation, we must not contradict
+our position by recommending use of documentation that isn't free.
+
+Finally, new issues concerning the ethics of software freedom come up
+frequently. We ask that GNU maintainers, at least on matters that
+pertain specifically to their package, stand with the rest of the GNU
+project when such issues come up.
+
+
+@node Terminology
+@chapter Terminology Issues
+@cindex terminology
+
+This chapter explains a couple of issues of terminology which are
+important for correcting two widespread and important misunderstandings
+about GNU.
+
+@menu
+* Free Software and Open Source::
+* GNU and Linux::
+@end menu
+
+@node Free Software and Open Source
+@section Free Software and Open Source
+@cindex free software movement
+@cindex open source
+@cindex movement, free software
+@cindex development method, open source
+
+The terms ``free software'' and ``open source'', while describing
+almost the same category of software, stand for views based on
+fundamentally different values. The free software movement is
+idealistic, and raises issues of freedom, ethics, principle and what
+makes for a good society. The term open source, initiated in 1998, is
+associated with a philosophy which studiously avoids such questions.
+For a detailed explanation, see
+@url{http://www.gnu.org/philosophy/open-source-misses-the-point.html}.
+
+The GNU Project is aligned with the free software movement. This
+doesn't mean that all GNU contributors and maintainers have to agree;
+your views on these issues are up to you, and you're entitled to express
+them when speaking for yourself.
+
+However, due to the much greater publicity that the term ``open source''
+receives, the GNU Project needs to overcome a widespread
+mistaken impression that GNU is @emph{and always was} an ``open
+source'' activity. For this reason, please use the term ``free
+software'', not ``open source'', in GNU software releases, GNU
+documentation, and announcements and articles that you publish in your
+role as the maintainer of a GNU package. A reference to the URL given
+above, to explain the difference, is a useful thing to include as
+well.
+
+
+@node GNU and Linux
+@section GNU and Linux
+@cindex Linux
+@cindex GNU/Linux
+
+The GNU Project was formed to develop a free Unix-like operating system,
+GNU. The existence of this system is our major accomplishment.
+However, the widely used version of the GNU system, in which Linux is
+used as the kernel, is often called simply ``Linux''. As a result, most
+users don't know about the GNU Project's major accomplishment---or more
+precisely, they know about it, but don't realize it is the GNU Project's
+accomplishment and reason for existence. Even people who believe they
+know the real history often believe that the goal of GNU was to develop
+``tools'' or ``utilities''.
+
+To correct this confusion, we have made a years-long effort to
+distinguish between Linux, the kernel that Linus Torvalds wrote, and
+GNU/Linux, the operating system that is the combination of GNU and
+Linux. The resulting increased awareness of what the GNU Project has
+already done helps every activity of the GNU Project recruit more
+support and contributors.
+
+Please make this distinction consistently in GNU software releases, GNU
+documentation, and announcements and articles that you publish in your
+role as the maintainer of a GNU package. If you want to explain the
+terminology and its reasons, you can refer to the URL
+@url{http://www.gnu.org/gnu/linux-and-gnu.html}.
+
+To contrast the GNU system properly with respect to GNU/Linux, you can
+call it ``GNU/Hurd'' or ``the GNU/Hurd system''. However, when that
+contrast is not specifically the focus, please call it just ``GNU'' or
+``the GNU system''.
+
+When referring to the collection of servers that is the higher level
+of the GNU kernel, please call it ``the Hurd'' or ``the GNU Hurd''.
+Note that this uses a space, not a slash.
+
+
+@node Hosting
+@chapter Hosting
+@cindex CVS repository
+@cindex repository
+@cindex source repository
+@cindex version control system
+@cindex FTP site
+@cindex release site
+@cindex hosting
+
+We recommend using @code{savannah.gnu.org} for the source code
+repository for your package, but that's not required. @xref{Old
+Versions}, for more information about Savannah.
+
+We strongly urge you to use @code{ftp.gnu.org} as the standard
+distribution site for releases. Doing so makes it easier for
+developers and users to find the latest GNU releases. However, it is
+ok to use another server if you wish, provided it allows access from
+the general public without limitation (for instance, without excluding
+any country).
+
+If you use a company's machine to hold the repository for your
+program, or as its release distribution site, please put this
+statement in a prominent place on the site, so as to prevent people
+from getting the wrong idea about the relationship between the package
+and the company:
+
+@smallexample
+The programs <list of them> hosted here are free software packages
+of the GNU Project, not products of <company name>. We call them
+"free software" because you are free to copy and redistribute them,
+following the rules stated in the license of each package. For more
+information, see http://www.gnu.org/philosophy/free-sw.html.
+
+If you are looking for service or support for GNU software, see
+http://www.gnu.org/gethelp/ for suggestions of where to ask.
+
+If you would like to contribute to the development of one of these
+packages, contact the package maintainer or the bug-reporting address
+of the package (which should be listed in the package itself), or look
+on www.gnu.org for more information on how to contribute.
+@end smallexample
+
+
+@node Donations
+@chapter Donations
+@cindex Donations, for packages
+@cindex Money, donated to packages
+
+As a maintainer, you might want to accept donations for your work,
+especially if you pay for any of your own hosting/development
+infrastructure. Following is some text you can adapt to your own
+situation, and use on your package's web site, @file{README}, or
+in wherever way you find it useful:
+
+@smallexample
+We appreciate contributions of any size -- donations enable us to spend
+more time working on the project, and help cover our infrastructure
+expenses.
+
+If you'd like to make a small donation, please visit @var{url1} and do
+it through @var{payment-service}. Since our project isn't a
+tax-exempt organization, we can't offer you a tax deduction, but for
+all donations over @var{amount1}, we'd be happy to recognize your
+contribution on @var{url2}.
+
+We are also happy to consider making particular improvements or
+changes, or giving specific technical assistance, in return for a
+substantial donation over @var{amount2}. If you would like to discuss
+this possibility, write to us at @var{address}.
+
+Another possibility is to pay a software maintenance fee. Again,
+write to us about this at @var{address} to discuss how much you want
+to pay and how much maintenance we can offer in return. If you pay
+more than @var{amount1}, we can give you a document for your records.
+
+Thanks for your support!
+@end smallexample
+
+We don't recommend any specific payment service. However, GNU
+developers should not use a service that requires them to sign a
+proprietary software license, such as Google's payment service.
+
+Of course, it is also good to encourage people to join or contribute
+to the FSF (@url{http://www.fsf.org}), either instead of or as well as
+package-specific donations.
+
+
+@node Free Software Directory
+@chapter Free Software Directory
+@cindex Free Software Directory
+@cindex Directory, Free Software
+
+The Free Software Directory aims to be a complete list of free
+software packages, within certain criteria. Every GNU package should
+be listed there, so please see
+@url{http://www.gnu.org/help/directory.html#adding-entries} for
+information on how to write an entry for your package. Contact
+@email{bug-directory@@gnu.org} with any questions or suggestions for
+the Free Software Directory.
+
+
+@node Using the Proofreaders List
+@chapter Using the Proofreaders List
+@cindex proofreading
+
+If you want help finding errors in documentation,
+or help improving the quality of writing,
+or if you are not a native speaker of English
+and want help producing good English documentation,
+you can use the GNU proofreaders mailing list:
+@email{proofreaders@@gnu.org}.
+
+But be careful when you use the list,
+because there are over 200 people on it.
+If you simply ask everyone on the list to read your work,
+there will probably be tremendous duplication of effort
+by the proofreaders,
+and you will probably get the same errors reported 100 times.
+This must be avoided.
+
+Also, the people on the list do not want to get
+a large amount of mail from it.
+So do not ever ask people on the list to send mail to the list!
+
+Here are a few methods that seem reasonable to use:
+
+@itemize @bullet
+@item
+For something small, mail it to the list,
+and ask people to pick a random number from 1 to 20,
+and read it if the number comes out as 10.
+This way, assuming 50% response, some 5 people will read the piece.
+
+@item
+For a larger work, divide your work into around 20 equal-sized parts,
+tell people where to get it,
+and ask each person to pick randomly which part to read.
+
+Be sure to specify the random choice procedure;
+otherwise people will probably use a mental procedure
+that is not really random,
+such as ``pick a part near the middle'',
+and you will not get even coverage.
+
+You can either divide up the work physically, into 20 separate files,
+or describe a virtual division, such as by sections
+(if your work has approximately 20 sections).
+If you do the latter, be sure to be precise about it---for example,
+do you want the material before the first section heading
+to count as a section, or not?
+
+@item
+For a job needing special skills, send an explanation of it,
+and ask people to send you mail if they volunteer for the job.
+When you get enough volunteers, send another message to the list saying
+``I have enough volunteers, no more please.''
+@end itemize
+
+
+@node GNU Free Documentation License
+@appendix GNU Free Documentation License
+
+@cindex FDL, GNU Free Documentation License
+@include fdl.texi
+
+
+@node Index
+@unnumbered Index
+@printindex cp
+
+@bye
+
+Local variables:
+eval: (add-hook 'write-file-hooks 'time-stamp)
+time-stamp-start: "@set lastupdate "
+time-stamp-start: "@set lastupdate "
+time-stamp-end: "$"
+time-stamp-format: "%:b %:d, %:y"
+compile-command: "make -C work.m"
+End: