regex: Use space optimization also with clang.
[gnulib.git] / doc / maintain.texi
blob57d03ff015b4b6060ce88741ca3b3fbd2abae426
1 \input texinfo.tex    @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename maintain.info
4 @settitle Information for Maintainers of GNU Software
5 @c For double-sided printing, uncomment:
6 @c @setchapternewpage odd
7 @c This date is automagically updated when you save this file:
8 @set lastupdate April 24, 2020
9 @c %**end of header
10 @documentencoding UTF-8
12 @dircategory GNU organization
13 @direntry
14 * Maintaining: (maintain).        Maintaining GNU software.
15 @end direntry
17 @setchapternewpage off
19 @c Put everything in one index (arbitrarily chosen to be the concept index).
20 @syncodeindex fn cp
21 @syncodeindex pg cp
23 @copying
24 Information for maintainers of GNU software, last updated @value{lastupdate}.
26 Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
27 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
28 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019 Free Software Foundation,
29 Inc.
31 Permission is granted to copy, distribute and/or modify this document
32 under the terms of the GNU Free Documentation License, Version 1.3 or
33 any later version published by the Free Software Foundation; with no
34 Invariant Sections, no Front-Cover Texts, and no Back-Cover
35 Texts.  A copy of the license is included in the section entitled
36 ``GNU Free Documentation License''.
37 @end copying
39 @titlepage
40 @title Information for Maintainers of GNU Software
41 @author Richard Stallman
42 @author last updated @value{lastupdate}
43 @page
44 @vskip 0pt plus 1filll
45 @insertcopying
46 @end titlepage
48 @contents
50 @ifnottex
51 @node Top
52 @top Version
54 @insertcopying
55 @end ifnottex
57 @menu
58 * Preface::
59 * Getting Help::
60 * GNU Accounts and Resources::
61 * Stepping Down::
62 * Recruiting Developers::
63 * Legal Matters::
64 * Clean Ups::
65 * Platforms::
66 * Mail::
67 * Old Versions::
68 * Distributions::
69 * Web Pages::
70 * Ethical and Philosophical Consideration::
71 * Humor::
72 * Other Politics::
73 * Terminology::
74 * Interviews and Speeches::
75 * Hosting::
76 * Donations::
77 * Free Software Directory::
78 * Using the Proofreaders List::
79 * GNU Free Documentation License::
80 * Index::
81 @end menu
84 @node Preface
85 @chapter About This Document
87 This file contains guidelines and advice for someone who is the
88 maintainer of a GNU program on behalf of the GNU Project.  Everyone is
89 entitled to change and redistribute GNU software; you need not pay
90 attention to this file to get permission.  But if you want to maintain
91 a version for widespread distribution, we suggest you follow these
92 guidelines.  If you are or would like to be a GNU maintainer, then it
93 is essential to follow these guidelines.
95 In addition to this document, please read and follow the GNU Coding
96 Standards (@pxref{Top, , Contents, standards, GNU Coding Standards}).
97 You may also usefully check the ``Tips for new GNU maintainers''
98 (@url{https://www.gnu.org/software/maintainer-tips}), a list of the
99 most important things you will need to do as a new maintainer.
101 @cindex @code{bug-standards@@gnu.org} email address
102 @cindex Savannah repository for @code{gnustandards}
103 @cindex @code{gnustandards} project repository
104 Please send corrections or suggestions for this document to
105 @email{bug-standards@@gnu.org}.  If you make a suggestion, please
106 include suggested new wording if you can.  We prefer a context diff to
107 the Texinfo source, but if that's difficult for you, you can make a
108 diff for some other version of this document, or propose it in any way
109 that makes it clear.  The source repository for this document can be
110 found at @url{https://savannah.gnu.org/projects/gnustandards}.
112 @cindex @code{gnustandards-commit@@gnu.org} mailing list
113 If you want to receive diffs for every change to these GNU documents,
114 join the mailing list @code{gnustandards-commit@@gnu.org}, for
115 instance via the web interface at
116 @url{https://lists.gnu.org/mailman/listinfo/gnustandards-commit}.
117 Archives are also available there.
119 @cindex Piercy, Marge
120 This document uses the gender-neutral third-person pronouns ``person''
121 (which can be shortened to ``perse''), ``per'', ``pers'' and
122 ``perself.''  These pronouns (aside from ``perse'') were promoted, and
123 perhaps invented, by Marge Piercy in @cite{Woman on the Edge of Time}.
124 They are used just like ``she'', ``her'', ``hers'' and ``herself'',
125 except that they apply regardless of gender.  For example, ``Person
126 placed per new program under the GNU GPL, to maintain freedom for all
127 users of per work, and this way perse knows perse has done the right
128 thing.''
130 This release of the GNU Maintainer Information was last updated
131 @value{lastupdate}.
133 @node Getting Help
134 @chapter Getting Help
135 @cindex help, getting
137 @cindex @code{mentors@@gnu.org} mailing list
138 If you have any general questions or encounter a situation where it
139 isn't clear how to get something done or who to ask, you (as a GNU
140 contributor) can always write to @email{mentors@@gnu.org}, which is a
141 list of a few experienced GNU folks who have volunteered to answer
142 questions.  Any GNU-related question is fair game for the
143 @code{mentors} list.
145 @cindex advisory committee
146 The GNU Advisory Committee helps to coordinate activities in the GNU
147 project on behalf of RMS (Richard Stallman, the Chief GNUisance).  If
148 you have any organizational questions or concerns you can contact the
149 committee at @email{gnu-advisory@@gnu.org}.  See
150 @url{https://www.gnu.org/contact/gnu-advisory.html} for the current
151 committee members.  Additional information is in
152 @file{/gd/gnuorg/advisory}.
154 @cindex down, when GNU machines are
155 @cindex outage, of GNU machines
156 @cindex @url{https://hostux.social/@@fsfstatus}
157 If you find that any GNU computer systems (@code{fencepost.gnu.org},
158 @code{ftp.gnu.org}, @code{www.gnu.org}, @code{savannah.gnu.org},
159 @dots{}) seem to be down, you can check the current status at
160 @url{https://hostux.social/@@fsfstatus}.  Most likely the problem, if
161 it can be alleviated at the FSF end, is already being worked on.
163 @cindex sysadmin, FSF
164 @cindex FSF system administrators
165 @cindex GNU system administrators
166 The FSF system administrators maintain the GNU network and server
167 hardware.  You can email them at @email{sysadmin@@fsf.org}.  Please
168 report any failures in GNU servers to them without delay.  Aside from
169 that, please try not to burden them unnecessarily.
171 @node GNU Accounts and Resources
172 @chapter GNU Accounts and Resources
173 @cindex shell account, on fencepost
174 @cindex @code{fencepost.gnu.org} GNU login host
175 @cindex resources for GNU developers
176 @cindex development resources
178 @c We want to repeat this text later, so define a macro.
179 @macro gdgnuorgtext
180 The directory @file{/gd/gnuorg} mentioned throughout this document is
181 available on the general GNU server, currently
182 @code{fencepost.gnu.org}.  If you are the maintainer of a GNU package,
183 you should have an account there.  If you don't have one already, see
184 @url{https://www.gnu.org/software/README.accounts.html}.  Such GNU
185 login accounts include email (see
186 @url{https://www.fsf.org/about/systems/sending-mail-via-fencepost}).
188 You can request for accounts for people who significantly help you in
189 working on the package; we will do this in special cases when there is
190 a good reason.
191 @end macro
193 @gdgnuorgtext{}
195 Other resources available to GNU maintainers are described at
196 @url{https://www.gnu.org/software/devel.html}, as well as throughout
197 this document.  In brief:
199 @itemize @bullet
200 @item Login accounts (see above).
202 @item Version control (@pxref{Old Versions}).
204 @item Mailing lists (@pxref{Mail}).
206 @item Web pages (@pxref{Web Pages}).
208 @item Mirrored release areas (@pxref{Distributions}).
210 @cindex Hydra
211 @cindex @code{platform-testers} mailing list
212 @item Pre-release portability testing, both automated (via Hydra) and
213 on request (via volunteers).
215 @end itemize
218 @node Stepping Down
219 @chapter Stepping Down
220 @cindex stepping down as maintainer
221 @cindex resigning as maintainer
223 With good fortune, you will continue maintaining your package for many
224 decades.  But sometimes for various reasons maintainers decide to step
225 down.
227 If you're the official maintainer of a GNU package and you decide to
228 step down, please inform the GNU Project (@email{maintainers@@gnu.org}).
229 We need to know that the package no longer has a maintainer, so we can
230 look for and appoint a new maintainer.
232 @cindex @email{maintainers@@gnu.org}
233 If you have an idea for who should take over, please tell
234 @email{maintainers@@gnu.org} your suggestion.  The appointment of a new
235 maintainer needs the GNU Project's confirmation, but your judgment that
236 a person is capable of doing the job will carry a lot of weight.
238 As your final act as maintainer, it would be helpful to set up or
239 update the package under @code{savannah.gnu.org} (@pxref{Old
240 Versions}).  This will make it much easier for the new maintainer to
241 pick up where you left off and will ensure that the source tree is not
242 misplaced if it takes us a while to find a new maintainer.
245 @node Recruiting Developers
246 @chapter Recruiting Developers
248 Unless your package is a fairly small, you probably won't do all the
249 work on it yourself.  Most maintainers recruit other developers to help.
251 Sometimes people will offer to help.  Some of them will be capable,
252 while others will not.  It's up to you to determine who provides useful
253 help, and encourage those people to participate more.
255 Some of the people who offer to help will support the GNU Project, while
256 others may be interested for other reasons.  Some will support the goals
257 of the Free Software Movement, but some may not.  They are all welcome
258 to help with the work---we don't ask people's views or motivations
259 before they contribute to GNU packages.
261 As a consequence, you cannot expect all contributors to support the GNU
262 Project, or to have a concern for its policies and standards.  So part
263 of your job as maintainer is to exercise your authority on these points
264 when they arise.  No matter how much of the work other people do, you
265 are in charge of what goes in the release.  When a crucial point arises,
266 you should calmly state your decision and stick to it.
268 Sometimes a package has several co-maintainers who share the role of
269 maintainer.  Unlike developers who help, co-maintainers have actually
270 been appointed jointly as the maintainers of the package, and they carry
271 out the maintainer's functions together.  If you would like to propose
272 some of your developers as co-maintainers, please contact
273 @email{maintainers@@gnu.org}.
275 We're happy to acknowledge all major contributors to GNU packages on
276 the @url{https://www.gnu.org/people/people.html} web page.  Please send
277 an entry for yourself to @email{webmasters@@gnu.org}, and feel free to
278 suggest it to other significant developers on your package.
281 @node Legal Matters
282 @chapter Legal Matters
283 @cindex legal matters
285 This chapter describes procedures you should follow for legal reasons
286 as you maintain the program, to avoid legal difficulties.
288 @menu
289 * Copyright Papers::
290 * Legally Significant::
291 * Recording Contributors::
292 * Copying from Other Packages::
293 * Copyright Notices::
294 * License Notices::
295 * External Libraries::
296 * Crediting Authors::
297 @end menu
299 @node Copyright Papers
300 @section Copyright Papers
301 @cindex copyright papers
302 @cindex assignments, copyright
303 @cindex disclaimers
305 If you maintain an FSF-copyrighted package, certain legal procedures
306 are required when incorporating legally significant changes written by
307 other people.  This ensures that the FSF has the legal right to
308 distribute the package, and the standing to defend its GPL-covered
309 status in court if necessary.
311 GNU packages need not be FSF-copyrighted; this is up to the author(s),
312 generally at the time the package is dubbed GNU@.  When copyright is
313 assigned to the FSF, the FSF can act to stop GPL violations about the
314 package.  Otherwise, legal actions are up to the author(s).  The rest
315 of this section is about the case when a package is FSF-copyrighted.
317 @emph{Before} incorporating significant changes, make sure that the
318 person who wrote the changes has signed copyright papers and that the
319 Free Software Foundation has received and signed them.  We may also
320 need an employer's disclaimer from the person's employer, which
321 confirms that the work was not part of the person's job and the
322 employer makes no claim on it.  However, a copy of the person's
323 employment contract, showing that the employer can't claim any rights
324 to this work, is often sufficient.
326 If the employer does claim the work was part of the person's job, and
327 there is no clear basis to say that claim is invalid, then we have to
328 consider it valid.  Then the person cannot assign copyright, but the
329 employer can.  Many companies have done this.  Please ask the
330 appropriate managers to contact @code{assign@@gnu.org}.
332 @cindex data base of GNU copyright assignments
333 To check whether papers have been received, look in
334 @file{/gd/gnuorg/copyright.list}.  If you can't look there directly,
335 @email{fsf-records@@gnu.org} can check for you.  Our clerk can also
336 check for papers that are waiting to be entered and inform you when
337 expected papers arrive.
339 @cindex @file{/gd/gnuorg} directory
340 @c This paragraph intentionally duplicates information given
341 @c near the beginning of the file--to make sure people don't miss it.
342 @gdgnuorgtext{}
344 In order for the contributor to know person should sign papers, you need
345 to ask per for the necessary papers.  If you don't know per well, and you
346 don't know that person is used to our ways of handling copyright papers,
347 then it might be a good idea to raise the subject with a message like
348 this:
350 @quotation
351 Would you be willing to assign the copyright to the Free Software
352 Foundation, so that we could install it in @var{package}?
353 @end quotation
355 @noindent
358 @quotation
359 Would you be willing to sign a copyright disclaimer to put this change
360 in the public domain, so that we can install it in @var{package}?
361 @end quotation
363 If the contributor then wants more information, you can send per the file
364 @file{/gd/gnuorg/conditions.text}, which explains per options (assign
365 vs.@: disclaim) and their consequences.
367 Once the conversation is under way and the contributor is ready for
368 more details, you should send one of the templates that are found in
369 the directory @file{/gd/gnuorg/Copyright/}; they are also available
370 from the @file{doc/Copyright/} directory of the @code{gnulib} project
371 at @url{https://savannah.gnu.org/projects/gnulib}.  This section
372 explains which templates you should use in which circumstances.
373 @strong{Please don't use any of the templates except for those listed
374 here, and please don't change the wording.}
376 Once the conversation is under way, you can send the contributor the
377 precise wording and instructions by email.  Before you do this, make
378 sure to get the current version of the template you will use!  We change
379 these templates occasionally---don't keep using an old version.
381 For large changes, ask the contributor for an assignment.  Send per a
382 copy of the file @file{request-assign.changes}.  (Like all the
383 @samp{request-} files, it is in @file{/gd/gnuorg/Copyright} and in
384 @code{gnulib}.)
386 For medium to small changes, request a personal disclaimer by sending
387 per the file @file{request-disclaim.changes}.
389 If the contributor is likely to keep making changes, person might want
390 to sign an assignment for all per future changes to the program.  So it
391 is useful to offer per that alternative.  If person wants to do it that
392 way, send per the @file{request-assign.future}.
394 When you send a @file{request-} file, you don't need to fill in anything
395 before sending it.  Just send the file verbatim to the contributor.  The
396 file gives per instructions for how to ask the FSF to mail per the
397 papers to sign.  The @file{request-} file also raises the issue of
398 getting an employer's disclaimer from the contributor's employer.
400 When the contributor emails the form to the FSF, the FSF sends per an
401 electronic (usually PDF) copy of the assignment.  This, or whatever
402 response is required, should happen within five business days of the
403 initial request.  If no reply from the FSF comes after that time,
404 please send a reminder.  If there is still no response after an
405 additional week, please write to @email{maintainers@@gnu.org} about it.
407 After receiving the necessary form, the contributor needs to sign
408 it. Contributors residing in the USA or Italy may use GPG in order to
409 sign their assignment. Contributors located anywhere else can print,
410 sign, and then email (or fax) a scanned copy back to the
411 FSF@. (Specific instructions for both cases are sent with the
412 assignment form.) They may use postal mail, if they prefer. To
413 emphasize, the necessary distinction is between residents and
414 non-residents of these countries; citizenship does not matter.
416 For less common cases, we have template files you should send to the
417 contributor.  Be sure to fill in the name of the person and the name
418 of the program in these templates, where it says @samp{NAME OF PERSON}
419 and @samp{NAME OF PROGRAM}, before sending; otherwise person might
420 sign without noticing them, and the papers would be useless.  Note
421 that in some templates there is more than one place to put the name of
422 the program or the name of the person; be sure to change all of them.
423 All the templates raise the issue of an employer's disclaimer as well.
425 @cindex legal papers for changes in manuals
426 You do not need to ask for separate papers for a manual that is
427 distributed only in the software package it describes.  But if we
428 sometimes distribute the manual separately (for instance, if we publish
429 it as a book), then we need separate legal papers for changes in the
430 manual.  For smaller changes, use
431 @file{disclaim.changes.manual}; for larger ones, use
432 @file{assign.changes.manual}.  To cover both past and future
433 changes to a manual, you can use @file{assign.future.manual}.
434 For a translation of a manual, use @file{assign.translation.manual}.
436 For translations of program strings (as used by GNU Gettext, for
437 example; @pxref{Internationalization,,, standards, GNU Coding
438 Standards}), use @file{disclaim.translation}.  If you make use of the
439 Translation Project (@url{https://translationproject.org}) facilities,
440 please check with the TP coordinators that they have sent the
441 contributor the papers; if they haven't, then you should send the
442 papers.  In any case, you should wait for the confirmation from the
443 FSF that the signed papers have been received and accepted before
444 integrating the new contributor's material, as usual.
446 If a contributor is reluctant to sign an assignment for a large change,
447 and is willing to sign a disclaimer instead, that is acceptable, so you
448 should offer this alternative if it helps you reach agreement.  We
449 prefer an assignment for a larger change, so that we can enforce the GNU
450 GPL for the new text, but a disclaimer is enough to let us use the text.
452 If you maintain a collection of programs, occasionally someone will
453 contribute an entire separate program or manual that should be added to
454 the collection.  Then you can use the files
455 @file{request-assign.program}, @file{disclaim.program},
456 @file{assign.manual}, and @file{disclaim.manual}.  We very much prefer
457 an assignment for a new separate program or manual, unless it is quite
458 small, but a disclaimer is acceptable if the contributor insists on
459 handling the matter that way.
461 When a copyright holder has signed an assignment for all future
462 changes to the package, and contributes a change made up of new files
463 which require no change to any of the old files, we want to avoid any
464 uncertainty about whether these files are intended as a change to the
465 package and thus covered by that assignment.  The way to do this is to
466 ask the contributor to say so in a message to you --- for instance,
467 ``My modules `frog' and `kangaroo' are intended as changes to the
468 program Hoppers.''  Forward the message to @email{assign@@gnu.org},
469 who will save it permanently.  A variation on this procedure: the
470 contributor who wrote the new files can send copies of the new files
471 which contain such a message.
473 If a contributor wants the FSF to publish only a pseudonym, that is
474 ok.  The contributor should say this, and state the desired pseudonym,
475 when answering the @file{request-} form.  The actual legal papers will
476 use the real name, but the FSF will publish only the pseudonym.  When
477 using one of the other forms, fill in the real name but ask the
478 contributor to discuss the use of a pseudonym with
479 @email{assign@@gnu.org} before sending back the signed form.
481 @strong{Although there are other templates besides the ones listed here,
482 they are for special circumstances; please do not use them without
483 getting advice from @email{assign@@gnu.org}.}
485 If you are not sure what to do, then please ask @email{assign@@gnu.org} for
486 advice; if the contributor asks you questions about the meaning and
487 consequences of the legal papers, and you don't know the answers, you
488 can forward them to @email{assign@@gnu.org} and we will answer.
490 @strong{Please do not try changing the wording of a template yourself.
491 If you think a change is needed, please talk with @email{assign@@gnu.org},
492 and we will work with a lawyer to decide what to do.}
494 @node Legally Significant
495 @section Legally Significant Changes
497 If a person contributes more than around 15 lines of code and/or text
498 that is legally significant for copyright purposes, we
499 need copyright papers for that contribution, as described above.
501 A change of just a few lines (less than 15 or so) is not legally
502 significant for copyright.  A regular series of repeated changes, such
503 as renaming a symbol, is not legally significant even if the symbol
504 has to be renamed in many places.  Keep in mind, however, that a
505 series of minor changes by the same person can add up to a significant
506 contribution.  What counts is the total contribution of the person; it
507 is irrelevant which parts of it were contributed when.
509 Copyright does not cover ideas.  If someone contributes ideas but no
510 text, these ideas may be morally significant as contributions, and
511 worth giving credit for, but they are not significant for copyright
512 purposes.  Likewise, bug reports do not count for copyright purposes.
514 When giving credit to people whose contributions are not legally
515 significant for copyright purposes, be careful to make that fact
516 clear.  The credit should clearly say they did not contribute
517 significant code or text.
519 When people's contributions are not legally significant because they
520 did not write code, do this by stating clearly what their contribution
521 was.  For instance, you could write this:
523 @example
525  * Ideas by:
526  *   Richard Mlynarik <mly@@adoc.xerox.com> (1997)
527  *   Masatake Yamato <masata-y@@is.aist-nara.ac.jp> (1999)
528  */
529 @end example
531 @noindent
532 @code{Ideas by:} makes it clear that Mlynarik and Yamato here
533 contributed only ideas, not code.  Without the @code{Ideas by:} note,
534 several years from now we would find it hard to be sure whether they
535 had contributed code, and we might have to track them down and ask
536 them.
538 When you record a small patch in a change log file, first search for
539 previous changes by the same person, and see if per past
540 contributions, plus the new one, add up to something legally
541 significant.  If so, you should get copyright papers for all per
542 changes before you install the new change.
544 If that is not so, you can install the small patch.  Write @samp{(tiny
545 change)} after the patch author's name, like this:
547 @example
548 2002-11-04  Robert Fenk  <Robert.Fenk@@gmx.de>  (tiny change)
549 @end example
551 @node Recording Contributors
552 @section Recording Contributors
553 @cindex recording contributors
555 @strong{Keep correct records of which portions were written by whom.}
556 This is very important.  These records should say which files or
557 parts of files were written by each person, and which files or
558 parts of files were revised by each person.  This should include
559 installation scripts as well as manuals and documentation
560 files---everything.
562 These records don't need to be as detailed as a change log.  They
563 don't need to distinguish work done at different times, only different
564 people.  They don't need describe changes in more detail than which
565 files or parts of a file were changed.  And they don't need to say
566 anything about the function or purpose of a file or change---the
567 Register of Copyrights doesn't care what the text does, just who wrote
568 or contributed to which parts.
570 The list should also mention if certain files distributed in the same
571 package are really a separate program.
573 Only the contributions that are legally significant for copyright
574 purposes (@pxref{Legally Significant}) need to be listed.  Small
575 contributions, bug reports, ideas, etc., can be omitted.
577 For example, this would describe an early version of GAS:
579 @display
580 Dean Elsner   first version of all files except gdb-lines.c and m68k.c.
581 Jay Fenlason  entire files gdb-lines.c and m68k.c, most of app.c,
582               plus extensive changes in messages.c, input-file.c, write.c
583               and revisions elsewhere.
585 Note: GAS is distributed with the files obstack.c and obstack.h, but
586 they are considered a separate package, not part of GAS proper.
587 @end display
589 @cindex @file{AUTHORS} file
590 Please keep these records in a file named @file{AUTHORS} in the source
591 directory for the program itself.
593 You can use the change log as the basis for these records, if you
594 wish.  Just make sure to record the correct author for each change
595 (the person who wrote the change, @emph{not} the person who installed
596 it), and add @samp{(tiny change)} for those changes that are too
597 trivial to matter for copyright purposes.  Later on you can update the
598 @file{AUTHORS} file from the change log.  This can even be done
599 automatically, if you are careful about the formatting of the change
600 log entries.
602 It is ok to include other email addresses, names, and program
603 information in @file{AUTHORS}, such as bug-reporting information.
604 @xref{Standard Mailing Lists}.
607 @node Copying from Other Packages
608 @section Copying from Other Packages
610 This section explains legal considerations when merging code from
611 other packages into your package.  Using an entire module as a whole,
612 and maintaining its separate identity, is a different issue;
613 see @ref{External Libraries}.
615 @menu
616 * Non-FSF-Copyrighted Package::
617 * FSF-Copyrighted Package::
618 @end menu
620 @node Non-FSF-Copyrighted Package
621 @subsection Non-FSF-Copyrighted Package
623 Here we suppose that your package is not FSF-copyrighted.
625 When you copy legally significant code from another free software
626 package with a GPL-compatible license, you should look in the
627 package's records to find out the authors of the part you are copying,
628 and list them as the contributors of the code that you copied.  If all
629 you did was copy it, not write it, then for copyright purposes you are
630 @emph{not} one of the contributors of @emph{this} code.
632 If the code is supposed to be in the public domain, make sure that is
633 really true: that all the authors of the code have disclaimed
634 copyright interest.  Then, when copying the new files into your
635 project, add a brief note at the beginning of the files recording the
636 authors, the public domain status, and anything else relevant.
638 On the other hand, when merging some public domain code into an
639 existing file covered by the GPL (or LGPL or other free software
640 license), there is no reason to indicate the pieces which are public
641 domain.  The notice saying that the whole file is under the GPL (or
642 other license) is legally sufficient.
644 Using code that is not in the public domain, but rather released under
645 a GPL-compatible free license, may require preserving copyright
646 notices or other steps.  Of course, you should follow the requirements
647 stated.
649 @node FSF-Copyrighted Package
650 @subsection FSF-Copyrighted Package
652 If you are maintaining an FSF-copyrighted package, please don't copy
653 in any code without verifying first that we have suitable legal papers
654 for that code.
656 If you are copying from another FSF-copyrighted package, then we
657 presumably have papers for that package's own code, but you must check
658 whether the code you are copying is part of an external library; if
659 that is the case, we don't have papers for it, so you should not copy
660 it.  It can't hurt in any case to double-check with the developer of
661 that package.
663 When you are copying code for which we do not already have papers, you
664 need to get papers for it.  It may be difficult to get the papers if
665 the code was not written as a contribution to your package, but that
666 doesn't mean it is ok to do without them.  If you cannot get papers
667 for the code, you can only use it as an external library
668 (@pxref{External Libraries}).
671 @node Copyright Notices
672 @section Copyright Notices
673 @cindex copyright notices in program files
675 You should maintain a proper copyright notice and a license
676 notice in each nontrivial file in the package.  (Any file more than ten
677 lines long is nontrivial for this purpose.)  This includes header files
678 and interface definitions for
679 building or running the program, documentation files, and any supporting
680 files.  If a file has been explicitly placed in the public domain, then
681 instead of a copyright notice, it should have a notice saying explicitly
682 that it is in the public domain.
684 Even image files and sound files should contain copyright notices and
685 license notices, if their format permits.  Some formats do not have
686 room for textual annotations; for these files, state the copyright and
687 copying permissions in a @file{README} file in the same directory.
689 Change log files should have a copyright notice and license notice at
690 the end, since new material is added at the beginning but the end
691 remains the end.
693 When a file is automatically generated from some other file in the
694 distribution, it is useful for the automatic procedure to copy the
695 copyright notice and permission notice of the file it is generated
696 from, if possible.  Alternatively, put a notice at the beginning saying
697 which file it is generated from.
699 A copyright notice looks like this:
701 @example
702 Copyright (C) @var{year1}, @var{year2}, @var{year3} @var{copyright-holder}
703 @end example
705 The word @samp{Copyright} must always be in English, by international
706 convention.
708 The @var{copyright-holder} may be the Free Software Foundation, Inc., or
709 someone else; you should know who is the copyright holder for your
710 package.
712 Replace the @samp{(C)} with a C-in-a-circle symbol if it is available.
713 For example, use @samp{@@copyright@{@}} in a Texinfo file.  However,
714 stick with parenthesized @samp{C} unless you know that C-in-a-circle
715 will work.  For example, a program's standard @option{--version}
716 message should use parenthesized @samp{C} by default, though message
717 translations may use C-in-a-circle in locales where that symbol is
718 known to work.  Alternatively, the @samp{(C)} or C-in-a-circle can be
719 omitted entirely; the word @samp{Copyright} suffices.
721 To update the list of year numbers, add each year in which you have
722 made nontrivial changes to the package.  (Here we assume you're using
723 a publicly accessible revision control server, so that every revision
724 installed is also immediately and automatically published.)  When you
725 add the new year, it is not required to keep track of which files have
726 seen significant changes in the new year and which have not.  It is
727 recommended and simpler to add the new year to all files in the
728 package, and be done with it for the rest of the year.
730 Don't delete old year numbers, though; they are significant since they
731 indicate when older versions might theoretically go into the public
732 domain, if the movie companies don't continue buying laws to further
733 extend copyright.  If you copy a file into the package from some other
734 program, keep the copyright years that come with the file.
736 You can use a range (@samp{2008-2010}) instead of listing individual
737 years (@samp{2008, 2009, 2010}) if and only if: 1)@tie{}every year in
738 the range, inclusive, really is a ``copyrightable'' year that would be
739 listed individually; @emph{and} 2)@tie{}you make an explicit statement
740 in a @file{README} file about this usage.
742 For files which are regularly copied from another project (such as
743 @samp{gnulib}), leave the copyright notice as it is in the original.
745 The copyright statement may be split across multiple lines, both in
746 source files and in any generated output.  This often happens for
747 files with a long history, having many different years of
748 publication.
750 For an FSF-copyrighted package, if you have followed the procedures to
751 obtain legal papers, each file should have just one copyright holder:
752 the Free Software Foundation, Inc.  You should edit the file's
753 copyright notice to list that name and only that name.
755 But if contributors are not all assigning their copyrights to a single
756 copyright holder, it can easily happen that one file has several
757 copyright holders.  Each contributor of nontrivial text is a copyright
758 holder.
760 In that case, you should always include a copyright notice in the name
761 of main copyright holder of the file.  You can also include copyright
762 notices for other copyright holders as well, and this is a good idea
763 for those who have contributed a large amount and for those who
764 specifically ask for notices in their names.  (Sometimes the license
765 on code that you copy in may require preserving certain copyright
766 notices.)  But you don't have to include a notice for everyone who
767 contributed to the file (which would be rather inconvenient).
769 Sometimes a program has an overall copyright notice that refers to the
770 whole program.  It might be in the @file{README} file, or it might be
771 displayed when the program starts up.  This copyright notice should
772 mention the year of completion of the most recent major version; it
773 can mention years of completion of previous major versions, but that
774 is optional.
777 @node License Notices
778 @section License Notices
779 @cindex license notices in program files
781 Every nontrivial file needs a license notice as well as the copyright
782 notice.  (Without a license notice giving permission to copy and
783 change the file, the file is non-free.)
785 The package itself should contain a full copy of GPL in plain text
786 (conventionally in a file named @file{COPYING}) and the GNU Free
787 Documentation License (included within your documentation, so there is
788 no need for a separate plain text version).  If the package contains
789 any files distributed under the Lesser GPL, it should contain a full
790 copy of its plain text version also (conventionally in a file named
791 @file{COPYING.LESSER}).
793 If you have questions about licensing issues for your GNU package,
794 please write @email{licensing@@gnu.org}.
796 @menu
797 * Which:         Licensing of GNU Packages.
798 * Canonical:     Canonical License Sources.
799 * Code:          License Notices for Code.
800 * Documentation: License Notices for Documentation.
801 * Examples:      License Notices for Code Examples.
802 * Other:         License Notices for Other Files.
803 @end menu
806 @node Licensing of GNU Packages
807 @subsection Licensing of GNU Packages
809 Normally, GNU packages should use the latest version of the GNU GPL,
810 with the ``or any later version'' formulation.  @xref{License Notices
811 for Code}, for the exact wording of the license notice.
813 Occasionally, a GNU library may provide functionality which is already
814 widely available to proprietary programs through alternative
815 implementations; for example, the GNU C Library.  In such cases, the
816 Lesser GPL should be used (again, for the notice wording,
817 @pxref{License Notices for Code}).  If a GNU library provides unique
818 functionality, however, the GNU GPL should be used.
819 @url{https://www.gnu.org/licenses/why-not-lgpl.html} discusses this
820 strategic choice.
822 Some of these libraries need to work with programs released under
823 GPLv2-only; that is, which allow the GNU GPL version 2 but not later
824 versions.  In this case, the GNU package should be released under a
825 dual license: GNU GPL version 2 (or any later version) and the GNU
826 Lesser GPL version 3 (or any later version).  Here is the notice for
827 that case:
829 @smallexample
830 This file is part of GNU @var{package}.
832 GNU @var{package} is free software: you can redistribute it and/or
833 modify it under the terms of either:
835   * the GNU Lesser General Public License as published by the Free
836     Software Foundation; either version 3 of the License, or (at your
837     option) any later version.
841   * the GNU General Public License as published by the Free
842     Software Foundation; either version 2 of the License, or (at your
843     option) any later version.
845 or both in parallel, as here.
847 GNU @var{package} is distributed in the hope that it will be useful,
848 but WITHOUT ANY WARRANTY; without even the implied warranty of
849 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE@.  See the GNU
850 General Public License for more details.
852 You should have received copies of the GNU General Public License and
853 the GNU Lesser General Public License along with this program.  If
854 not, see @url{https://www.gnu.org/licenses/}.
855 @end smallexample
857 For small packages, you can use ``This program'' instead of ``GNU
858 @var{package}''.
861 @node Canonical License Sources
862 @subsection Canonical License Sources
864 You can get the official versions of these files from several places.
865 You can use whichever is the most convenient for you.
867 @itemize @bullet
868 @item
869 @uref{https://www.gnu.org/licenses/}.
871 @item
872 The @code{gnulib} project on @code{savannah.gnu.org}, which you
873 can access via anonymous Git or CVS@.  See
874 @uref{https://savannah.gnu.org/projects/gnulib}.
876 @end itemize
878 The official Texinfo sources for the licenses are also available in
879 those same places, so you can include them in your documentation.  A
880 GFDL-covered manual should include the GFDL in this way.  @xref{GNU
881 Sample Texts,,, texinfo, Texinfo}, for a full example in a Texinfo
882 manual.
885 @node License Notices for Code
886 @subsection License Notices for Code
888 Typically the license notice for program files (including build scripts,
889 configure files and makefiles) should cite the GPL, like this:
891 @quotation
892 This file is part of GNU @var{package}.
894 GNU @var{package} is free software: you can redistribute it and/or
895 modify it under the terms of the GNU General Public License as
896 published by the Free Software Foundation, either version 3 of the
897 License, or (at your option) any later version.
899 GNU @var{package} is distributed in the hope that it will be useful,
900 but WITHOUT ANY WARRANTY; without even the implied warranty of
901 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE@.  See the
902 GNU General Public License for more details.
904 You should have received a copy of the GNU General Public License
905 along with this program.  If not, see @url{https://www.gnu.org/licenses/}.
906 @end quotation
908 But in a small program which is just a few files, you can use
909 this instead:
911 @quotation
912 This program is free software: you can redistribute it and/or modify
913 it under the terms of the GNU General Public License as published by
914 the Free Software Foundation; either version 3 of the License, or
915 (at your option) any later version.
917 This program is distributed in the hope that it will be useful,
918 but WITHOUT ANY WARRANTY; without even the implied warranty of
919 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE@.  See the
920 GNU General Public License for more details.
922 You should have received a copy of the GNU General Public License
923 along with this program.  If not, see @url{https://www.gnu.org/licenses/}.
924 @end quotation
926 In either case, for those few packages which use the Lesser GPL
927 (@pxref{Licensing of GNU Packages}), insert the word ``Lesser'' before
928 ``General'' in @emph{all three} places.
929 @url{https://@/www.gnu.org/@/licenses/@/gpl-howto.html} discusses application
930 the GPL in more detail.
933 @node License Notices for Documentation
934 @subsection License Notices for Documentation
936 Documentation files should have license notices also.  Manuals should
937 use the GNU Free Documentation License.  Following is an example of the
938 license notice to use after the copyright line(s) using all the
939 features of the GFDL.
941 @smallexample
942 Permission is granted to copy, distribute and/or modify this document
943 under the terms of the GNU Free Documentation License, Version 1.3 or
944 any later version published by the Free Software Foundation; with the
945 Invariant Sections being ``GNU General Public License'', with the
946 Front-Cover Texts being ``A GNU Manual'', and with the Back-Cover Texts
947 as in (a) below.  A copy of the license is included in the section
948 entitled ``GNU Free Documentation License''.
950 (a) The FSF's Back-Cover Text is: ``You have the freedom to
951 copy and modify this GNU manual.  Buying copies from the FSF
952 supports it in developing GNU and promoting software freedom.''
953 @end smallexample
955 If the FSF does not publish this manual on paper, then omit the last
956 sentence in (a) that talks about copies from GNU Press.  If the FSF is
957 not the copyright holder, then replace @samp{FSF} with the appropriate
958 name.
960 Please adjust the list of invariant sections as appropriate for your
961 manual.  If there are none, then say ``with no Invariant Sections''.
962 If your manual is not published by the FSF, and under 400 pages, you
963 can omit both cover texts.  However, if it is copyright FSF, always
964 ask the FSF what to do.
966 @xref{GNU Sample Texts,,, texinfo, Texinfo}, for a full example in a
967 Texinfo manual, and see
968 @url{https://www.gnu.org/licenses/fdl-howto.html} for more advice about
969 how to use the GNU FDL.
971 If you write a manual that people might want to buy on paper, please
972 write to @email{maintainers@@gnu.org} to tell the FSF about it.  We
973 might want to publish it.
975 If the manual is over 400 pages, or if the FSF thinks it might be a
976 good choice for publishing on paper, then please include the GNU GPL,
977 as in the notice above.  Please also include our standard invariant
978 section which explains the importance of free documentation.  Write to
979 @email{assign@@gnu.org} to get a copy of this section.
981 When you distribute several manuals together in one software package,
982 their on-line forms can share a single copy of the GFDL (see
983 section@tie{}6).  However, the printed (@samp{.dvi}, @samp{.pdf},
984 @dots{}) forms should each contain a copy of the GFDL, unless they are
985 set up to be printed and published only together.  Therefore, it is
986 usually simplest to include the GFDL in each manual.
988 @node License Notices for Code Examples
989 @subsection License Notices for Code Examples
991 When a code example in documentation is more than two or three lines,
992 and specific enough that people might want to copy and adapt it, we
993 suggest putting a copy of the example in a file of code and releasing
994 that under some free software license.  That means it will be
995 released under two different licenses: in the manual under the GFDL,
996 and in the code example file under a software license.
998 If the example is important and nontrivial, and 40 lines or more, we
999 suggest releasing the code copy under the same license as the program
1000 it pertains to.  Otherwise, we recommend releasing it under the X11 license.
1002 @node License Notices for Other Files
1003 @subsection License Notices for Other Files
1005 Small supporting files, short manuals (under 300 lines long) and rough
1006 documentation (@file{README} files, @file{INSTALL} files, etc.)@: can
1007 use a simple all-permissive license like this one:
1009 @smallexample
1010 Copying and distribution of this file, with or without modification,
1011 are permitted in any medium without royalty provided the copyright
1012 notice and this notice are preserved.  This file is offered as-is,
1013 without any warranty.
1014 @end smallexample
1016 Older versions of this license did not have the second sentence with
1017 the express warranty disclaimer.  There is no urgent need to update
1018 existing files, but new files should use the new text.
1020 If your package distributes Autoconf macros that are intended to be
1021 used (hence distributed) by third-party packages under possibly
1022 incompatible licenses, you may also use the above all-permissive
1023 license for these macros.
1025 These kinds of files can also be put in the public domain.  If
1026 publishing in the US, it is enough to insert a notice saying so.
1027 Otherwise, use Creative Commons's CC0---See
1028 @url{https://creativecommons.org/choose/zero/}.
1030 @node External Libraries
1031 @section External Libraries
1033 As maintainer of an FSF-copyrighted GNU package, how do you use
1034 separately-published general-purpose free modules?  (We also call them
1035 ``libraries'' because we are using them as libraries; it doesn't
1036 matter whether they are packaged as libraries or not.)
1038 It would be unreasonable to ask their authors to assign copyright to
1039 the FSF@.  They didn't write those modules as contributions to GNU@.  We
1040 just happen to want to use them, as any developer might.  It would be
1041 rude to ask developers, out of the blue, to give the FSF their
1042 copyright.  Please don't ask for that in cases like these.
1044 The proper way to use those modules is to link your package with them
1045 and say they are @emph{not} part of your package.  See below for the
1046 mechanics of this.
1048 To avoid present or future legal trouble, you must make sure the
1049 license of the module is compatible with current @emph{and future} GPL
1050 versions.  ``GNU GPL version 3 or later'' is good, and so is anything
1051 which includes permission for use under those GPL versions (including
1052 ``GNU GPL version 2 or later'', ``LGPL version @var{n} or later'',
1053 ``LGPL version 2.1'', ``GNU Affero GPL version 3 or later'').  Lax
1054 permissive licenses are ok too, since they are compatible with all GPL
1055 versions.
1057 ``GPL version 2 only'' is obviously unacceptable because it is
1058 incompatible with GPL version 3.  ``GPL version 3 only'' and ``GPL
1059 version 2 or 3 only'' have a subtler problem: they would be incompatible
1060 with GPL version 4, if we ever make one, so the module would become an
1061 obstacle to upgrading your package's license to ``GPL version 4 or
1062 later''.  Don't use such modules.
1064 One library you need to avoid is @code{goffice}, since it allows only
1065 GPL versions 2 and 3.
1067 So, here are the mechanics of how to arrange your package to use the
1068 unrelated free module.
1070 @enumerate
1071 @item
1072 Assume the module is already installed on the system, and link with it
1073 when linking your program.  This is only reasonable if the module
1074 really has the form of a library.
1076 @item
1077 Include the module in your package's distribution, putting the source
1078 in a separate subdirectory whose @file{README} file says, ``This is
1079 not part of the GNU FOO program, but is used with GNU FOO.''  Then set
1080 up your makefiles to build this module and link it into the
1081 executable.
1083 With this method, it is not necessary to treat the module as a library
1084 and make a @samp{.a} file from it.  You can link directly with the
1085 @samp{.o} files in the usual manner.
1086 @end enumerate
1088 Both of these methods create an irregularity, and our lawyers have
1089 told us to minimize the amount of such irregularity.  So use these
1090 methods only for general-purpose modules that were @emph{not} written
1091 for your package.  For anything that was written as a contribution to
1092 your package, please get papers signed.
1094 @node Crediting Authors
1095 @section Crediting Authors
1096 @cindex crediting authors
1098 Strictly speaking, this is not a legal issue, but it seems to belong
1099 with copyright notices.
1101 In any FSF-copyrighted GNU package, the authors of a file are not
1102 named in the copyright notice.  Therefore, it is nice to include a
1103 comment line @samp{Authors: @var{authors of this file}} at the top
1104 near the copyright notice, to give them credit in close association
1105 with their contribution.
1107 @node Clean Ups
1108 @chapter Cleaning Up Changes
1109 @cindex contributions, accepting
1110 @cindex quality of changes suggested by others
1112 Don't feel obligated to include every change that someone asks you to
1113 include.  You must judge which changes are improvements---partly based
1114 on what you think the users will like, and partly based on your own
1115 judgment of what is better.  If you think a change is not good, you
1116 should reject it.
1118 If someone sends you changes which are useful, but written in an ugly
1119 way or hard to understand and maintain in the future, don't hesitate to
1120 ask per to clean up their changes before you merge them.  Since the
1121 amount of work we can do is limited, the more we convince others to help
1122 us work efficiently, the faster GNU will advance.
1124 If the contributor will not or can not make the changes clean enough,
1125 then it is legitimate to say ``I can't install this in its present form;
1126 I can only do so if you clean it up.''  Invite per to distribute per
1127 changes another way, or to find other people to make them clean enough
1128 for you to install and maintain.
1130 The only reason to do these cleanups yourself is if (1) it is easy, less
1131 work than telling the author what to clean up, or (2) the change is an
1132 important one, important enough to be worth the work of cleaning it up.
1134 The GNU Coding Standards are a good thing to send people when you ask
1135 them to clean up changes (@pxref{Top, , Contents, standards, GNU Coding
1136 Standards}).  The Emacs Lisp manual contains an appendix that gives
1137 coding standards for Emacs Lisp programs; it is good to urge Lisp authors to
1138 read it (@pxref{Tips, , Tips and Conventions, elisp, The GNU Emacs Lisp
1139 Reference Manual}).
1141 @node Platforms
1142 @chapter Platforms to Support
1144 Most GNU packages run on a wide range of platforms.  These platforms are
1145 not equally important.
1147 The most important platforms for a GNU package to support are GNU and
1148 GNU/Linux.  Developing the GNU operating system is the whole point of
1149 the GNU Project; a GNU package exists to make the whole GNU system more
1150 powerful.  So please keep that goal in mind and let it shape your work.
1151 For instance, every new feature you add should work on GNU, and
1152 GNU/Linux if possible too.  If a new feature only runs on GNU and
1153 GNU/Linux, it could still be acceptable.  However, a feature that runs
1154 only on other systems and not on GNU or GNU/Linux makes no sense in a
1155 GNU package.
1157 You will naturally want to keep the program running on all the platforms
1158 it supports.  But you personally will not have access to most of these
1159 platforms---so how should you do it?
1161 Don't worry about trying to get access to all of these platforms.  Even
1162 if you did have access to all the platforms, it would be inefficient for
1163 you to test the program on each platform yourself.  Instead, you should
1164 test the program on a few platforms, including GNU or GNU/Linux, and let
1165 the users test it on the other platforms.  You can do this through a
1166 pretest phase before the real release; when there is no reason to expect
1167 problems, in a package that is mostly portable, you can just make a
1168 release and let the users tell you if anything unportable was
1169 introduced.
1171 It is important to test the program personally on GNU or GNU/Linux,
1172 because these are the most important platforms for a GNU package.  If
1173 you don't have access to one of these platforms, as a GNU maintainer
1174 you can get access to the general GNU login machine; see
1175 @url{https://www.gnu.org/software/README.accounts.html}.
1177 Supporting other platforms is optional---we do it when that seems like
1178 a good idea, but we don't consider it obligatory.  If the users don't
1179 take care of a certain platform, you may have to desupport it unless
1180 and until users come forward to help.  Conversely, if a user offers
1181 changes to support an additional platform, you will probably want to
1182 install them, but you don't have to.  If you feel the changes are
1183 complex and ugly, if you think that they will increase the burden of
1184 future maintenance, you can and should reject them.  This includes
1185 both free or mainly-free platforms such as OpenBSD, FreeBSD, and
1186 NetBSD, and non-free platforms such as Windows.
1189 @node Mail
1190 @chapter Dealing With Mail
1191 @cindex email
1193 This chapter describes setting up mailing lists for your package, and
1194 gives advice on how to handle bug reports and random requests once you
1195 have them.
1197 @menu
1198 * Standard Mailing Lists::  @samp{bug-pkg@@gnu.org} and other standard names.
1199 * Creating Mailing Lists::  The best way is to use Savannah.
1200 * Replying to Mail::        Advice on replying to incoming mail.
1201 @end menu
1204 @node Standard Mailing Lists
1205 @section Standard Mailing Lists
1207 @cindex standard mailing lists
1208 @cindex mailing lists, standard names of
1210 @cindex mailing list for bug reports
1211 Once a program is in use, you will get bug reports for it.  Most GNU
1212 programs have their own special lists for sending bug reports.  The
1213 advertised bug-reporting email address should always be
1214 @samp{bug-@var{package}@@gnu.org}, to help show users that the program
1215 is a GNU package, but it is ok to set up that list to forward to another
1216 site if you prefer.
1218 @cindex @email{bug-gnu-utils@@gnu.org}
1219 We also have a catch-all list, @email{bug-gnu-utils@@gnu.org}, which is
1220 used for all GNU programs that don't have their own specific lists.  But
1221 nowadays we want to give each program its own bug-reporting list and
1222 move away from using @email{bug-gnu-utils}.
1224 @xref{Replying to Mail}, for more about handling and tracking bug
1225 reports.
1227 @cindex help for users, mailing list for
1228 Some GNU programs with many users have another mailing list,
1229 @samp{help-@var{package}@@gnu.org}, for people to ask other users for
1230 help.  If your program has many users, you should create such a list
1231 for it.  For a fairly new program, which doesn't have a large user
1232 base yet, it is better not to bother with this.
1234 @cindex announcements, mailing list for
1235 If you wish, you can also have a mailing list
1236 @samp{info-@var{package}@@gnu.org} for announcements
1237 (@pxref{Announcements}).  Any other mailing lists you find useful can
1238 also be created.
1240 The package distribution should state the name of all the package's
1241 mailing lists in a prominent place, and ask users to help us by
1242 reporting bugs appropriately.  The top-level @file{README} file and/or
1243 @file{AUTHORS} file are good places.  Mailing list information should
1244 also be included in the manual and the package web pages (@pxref{Web
1245 Pages}).
1249 @node Creating Mailing Lists
1250 @section Creating Mailing Lists
1252 @cindex creating mailing lists
1253 @cindex mailing lists, creating
1255 Using the web interface on @code{savannah.gnu.org} is by far the
1256 easiest way to create normal mailing lists, managed through Mailman on
1257 the GNU mail server.  Once you register your package on Savannah, you
1258 can create (and remove) lists yourself through the `Mailing Lists'
1259 menu, without needing to wait for intervention by anyone else.
1260 Furthermore, lists created through Savannah will have a reasonable
1261 default configuration for antispam purposes (see below).
1263 To create and maintain simple aliases and unmanaged lists, you can
1264 edit @file{/com/mailer/aliases} on the main GNU server.  If you don't
1265 have an account there, please read
1266 @url{https://www.gnu.org/software/README.accounts.html} (@pxref{GNU
1267 Accounts and Resources}).
1269 But if you don't want to learn how to do those things, you can ask
1270 @email{new-mailing-list@@gnu.org} to help you.
1272 @cindex spam prevention
1273 You should moderate postings from non-subscribed addresses on your
1274 mailing lists, to prevent propagation of unwanted messages (``spam'')
1275 to subscribers and to the list archives.  For lists controlled by
1276 Mailman, you can do this by setting @code{Privacy Options - Sender
1277 Filter - generic_nonmember_action} to @code{Hold}, and then
1278 periodically (daily is best) reviewing the held messages, accepting
1279 the real ones and discarding the junk.
1281 Lists created through Savannah will have this setting, and a number of
1282 others, such that spam will be automatically deleted (after a short
1283 delay).  The Savannah mailing list page describes all the details.
1284 You should still review the held messages in order to approve any that
1285 are real.
1288 @node Replying to Mail
1289 @section Replying to Mail
1291 @cindex responding to bug reports
1292 @cindex bug reports, handling
1293 @cindex help requests, handling
1295 When you receive bug reports, keep in mind that bug reports are crucial
1296 for your work.  If you don't know about problems, you cannot fix them.
1297 So always thank each person who sends a bug report.
1299 You don't have an obligation to give more response than that, though.
1300 The main purpose of bug reports is to help you contribute to the
1301 community by improving the next version of the program.  Many of the
1302 people who report bugs don't realize this---they think that the point is
1303 for you to help them individually.  Some will ask you to focus on that
1304 @emph{instead of} on making the program better.  If you comply with
1305 their wishes, you will have been distracted from the job of maintaining
1306 the program.
1308 For example, people sometimes report a bug in a vague (and therefore
1309 useless) way, and when you ask for more information, they say, ``I just
1310 wanted to see if you already knew the solution'' (in which case the bug
1311 report would do nothing to help improve the program).  When this
1312 happens, you should explain to them the real purpose of bug reports.  (A
1313 canned explanation will make this more efficient.)
1315 When people ask you to put your time into helping them use the program,
1316 it may seem ``helpful'' to do what they ask.  But it is much @emph{less}
1317 helpful than improving the program, which is the maintainer's real job.
1319 By all means help individual users when you feel like it, if you feel
1320 you have the time available.  But be careful to limit the amount of time
1321 you spend doing this---don't let it eat away the time you need to
1322 maintain the program!  Know how to say no; when you are pressed for
1323 time, just ``thanks for the bug report---I will fix it'' is enough
1324 response.
1326 Some GNU packages, such as Emacs and GCC, come with advice about how
1327 to make bug reports useful.  Copying and adapting that could be very
1328 useful for your package.
1330 @cindex @url{https://bugs.gnu.org}
1331 @cindex bug reports, email tracker for
1332 @cindex bug reports, web tracker for
1333 If you would like to use an email-based bug tracking system, see
1334 @url{https://bugs.gnu.org}; this can be connected with the regular
1335 bug-reporting address.  Alternatively, if you would like to use a
1336 web-based bug tracking system, Savannah supports this (@pxref{Old
1337 Versions}), but please don't fail to accept bugs by regular email as
1338 well---we don't want to put up unnecessary barriers against users
1339 submitting reports.
1342 @node Old Versions
1343 @chapter Recording Old Versions
1344 @cindex version control
1346 It is very important to keep backup files of all source files of GNU.
1347 You can do this using a source control system (such as Bazaar, RCS,
1348 CVS, Git, Subversion, @dots{}) if you like.  An easy way to use
1349 many such systems is via the Version Control library in Emacs
1350 (@pxref{Introduction to VC,, Introduction to Version Control, emacs,
1351 The GNU Emacs Manual}).
1353 The history of previous revisions and log entries is very important for
1354 future maintainers of the package, so even if you do not make it
1355 publicly accessible, be careful not to put anything in the repository or
1356 change log that you would not want to hand over to another maintainer
1357 some day.
1359 @cindex @code{savannah-hackers@@gnu.org}
1360 The GNU Project provides a server that GNU packages can use
1361 for source control and other package needs: @code{savannah.gnu.org}.
1362 Savannah is managed by @email{savannah-hackers@@gnu.org}.  For more
1363 details on using and contributing to Savannah, see
1364 @url{https://savannah.gnu.org/maintenance}.
1366 It's not an absolute requirement, but all GNU maintainers are strongly
1367 encouraged to take advantage of Savannah, as sharing such a central
1368 point can serve to foster a sense of community among GNU developers as
1369 well as help in keeping up with project management.  Please don't mark
1370 Savannah projects for GNU packages as private; that defeats a large
1371 part of the purpose of using Savannah in the first place.
1373 @cindex @code{savannah-announce@@gnu.org} mailing list
1374 If you do use Savannah, please subscribe to the
1375 @email{savannah-announce@@gnu.org} mailing list
1376 (@url{https://lists.gnu.org/mailman/listinfo/savannah-announce}).  This
1377 is a very low-volume list to keep Savannah users informed of system
1378 upgrades, problems, and the like.
1381 @node Distributions
1382 @chapter Distributions
1384 Please follow the GNU conventions when making GNU software
1385 distributions.
1387 @menu
1388 * Distribution tar Files::
1389 * Distribution Patches::
1390 * Binary Distribution::
1391 * Distribution on ftp.gnu.org::
1392 * Test Releases::
1393 * Automated FTP Uploads::
1394 * Announcements::
1395 @end menu
1397 @node Distribution tar Files
1398 @section Distribution tar Files
1399 @cindex distribution, tar files
1401 All packages should provide tar files for the distribution of their
1402 releases.  The tar file for version @var{m}.@var{n} of program
1403 @code{foo} should be named @file{foo-@var{m}.@var{n}.tar}.  It should
1404 unpack into a subdirectory named @file{foo-@var{m}.@var{n}}.  Tar
1405 files should not unpack into files in the current directory, because
1406 this is inconvenient if the user happens to unpack into a directory
1407 with other files in it.
1409 Here is how the @file{Makefile} for Bison creates the tar file.
1410 This method is good for other programs.
1412 @example
1413 dist: bison.info
1414         echo bison-`sed -e '/version_string/!d' \
1415           -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q version.c` > .fname
1416         -rm -rf `cat .fname`
1417         mkdir `cat .fname`
1418         dst=`cat .fname`; for f in $(DISTFILES); do \
1419            ln $(srcdir)/$$f $$dst/$$f || @{ echo copying $$f; \
1420              cp -p $(srcdir)/$$f $$dst/$$f ; @} \
1421         done
1422         tar --gzip -chf `cat .fname`.tar.gz `cat .fname`
1423         -rm -rf `cat .fname` .fname
1424 @end example
1426 Source files that are symbolic links to other file systems cannot be
1427 installed in the temporary directory using @code{ln}, so use @code{cp}
1428 if @code{ln} fails.
1430 @pindex automake
1431 Using Automake is a good way to take care of writing the @code{dist}
1432 target.
1434 @node Distribution Patches
1435 @section Distribution Patches
1436 @cindex patches, against previous releases
1438 If the program is large, it is useful to make a set of diffs for each
1439 release, against the previous important release.
1441 At the front of the set of diffs, put a short explanation of which
1442 version this is for and which previous version it is relative to.
1443 Also explain what else people need to do to update the sources
1444 properly (for example, delete or rename certain files before
1445 installing the diffs).
1447 The purpose of having diffs is that they are small.  To keep them
1448 small, exclude files that the user can easily update.  For example,
1449 exclude info files, DVI files, tags tables, output files of Bison or
1450 Flex.  In Emacs diffs, we exclude compiled Lisp files, leaving it up
1451 to the installer to recompile the patched sources.
1453 When you make the diffs, each version should be in a directory suitably
1454 named---for example, @file{gcc-2.3.2} and @file{gcc-2.3.3}.  This way,
1455 it will be very clear from the diffs themselves which version is which.
1457 @pindex diff
1458 @pindex patch
1459 @cindex time stamp in diffs
1460 If you use GNU @code{diff} to make the patch, use the options
1461 @samp{-rc2P}.  That will put any new files into the output as ``entirely
1462 different''.  Also, the patch's context diff headers should have dates
1463 and times in Universal Time using traditional Unix format, so that patch
1464 recipients can use GNU @code{patch}'s @samp{-Z} option.  For example,
1465 you could use the following Bourne shell command to create the patch:
1467 @example
1468 LC_ALL=C TZ=UTC0 diff -rc2P gcc-2.3.2 gcc-2.3.3 | \
1469 gzip -9 >gcc-2.3.2-2.3.3.patch.gz
1470 @end example
1472 If the distribution has subdirectories in it, then the diffs probably
1473 include some files in the subdirectories.  To help users install such
1474 patches reliably, give them precise directions for how to run patch.
1475 For example, say this:
1477 @display
1478 To apply these patches, cd to the main directory of the program
1479 and then use `patch -p1'.   `-p1' avoids guesswork in choosing
1480 which subdirectory to find each file in.
1481 @end display
1483 It's wise to test your patch by applying it to a copy of the old
1484 version, and checking that the result exactly matches the new version.
1486 @node Binary Distribution
1487 @section Binary Distribution for Nonfree Platforms
1489 Some package maintainers release pre-compiled binaries for proprietary
1490 systems such as Microsoft Windows or MacOS@.  It's entirely up to you
1491 whether to do that; we don't ask you to do it, but we don't object.
1492 Please do not let anyone make you feel you have an obligation to do
1493 this.
1495 If you distribute them, please inform their users prominently that
1496 those non-free platforms trample their freedom.  It is useful to refer
1497 them to
1498 @url{https://www.gnu.org/philosophy/free-software-even-more-important.html}.
1499 You can say, ``This program respects your freedom, but Windows does
1500 not.  To have freedom, you need to stop using Windows and other
1501 software that denies your freedom.''
1503 @node Distribution on ftp.gnu.org
1504 @section Distribution on @code{ftp.gnu.org}
1505 @cindex GNU ftp site
1506 @cindex @code{ftp.gnu.org}, the GNU release site
1508 We strongly recommend using @code{ftp.gnu.org} to distribute official
1509 releases.  If you want to also distribute the package from a site of
1510 your own, that is fine.  To use some other site instead of
1511 @code{ftp.gnu.org} is acceptable, provided it allows connections from
1512 anyone anywhere.
1514 @xref{Automated FTP Uploads}, for the procedural details of putting
1515 new versions on @code{ftp.gnu.org}.
1518 @node Test Releases
1519 @section Test Releases
1520 @cindex test releases
1521 @cindex beta releases
1522 @cindex pretest releases
1524 @cindex @code{alpha.gnu.org}, test release site
1525 When you release a greatly changed new major version of a program, you
1526 might want to do so as a pretest.  This means that you make a tar file,
1527 but send it only to a group of volunteers that you have recruited.  (Use
1528 a suitable GNU mailing list/newsgroup to recruit them.)
1530 We normally use the server @code{alpha.gnu.org} for pretests and
1531 prerelease versions.  @xref{Automated FTP Uploads}, for the procedural
1532 details of putting new versions on @code{alpha.gnu.org}.
1534 Once a program gets to be widely used and people expect it to work
1535 solidly, it is a good idea to do pretest releases before each ``real''
1536 release.
1538 There are three ways of handling version numbers for pretest versions.
1539 One method is to treat them as versions preceding the release you are going
1540 to make.
1542 In this method, if you are about to release version 4.6 but you want
1543 to do a pretest first, call it 4.5.90.  If you need a second pretest,
1544 call it 4.5.91, and so on.  If you are really unlucky and ten pretests
1545 are not enough, after 4.5.99 you could advance to 4.5.990 and so on.
1546 (You could also use 4.5.100, but 990 has the advantage of sorting in
1547 the right order.)
1549 Another method is to attach a date to the release number that is
1550 coming.  For a pretest for version 4.6, made on Dec 10, 2002, this
1551 would be 4.6.20021210.  A second pretest made the same day could be
1552 4.6.20021210.1.
1554 For development snapshots that are not formal pretests, using just
1555 the date without the version numbers is ok too.
1557 A third method, if the package uses Git, is to run the script
1558 @code{build-aux/git-version-gen} from Gnulib to generate test release
1559 version numbers.  It generates version numbers in the form
1560 @samp{@var{version}.@var{commits}-@var{commithash}}, where
1561 @var{version} is the latest version tag, @var{commits} is the number
1562 of commits since that tag, and @var{commithash} is a hash code for the
1563 latest commit.
1565 One thing that you should never do is to release a pretest with the same
1566 version number as the planned real release.  Many people will look only
1567 at the version number (in the tar file name, in the directory name that
1568 it unpacks into, or wherever they can find it) to determine whether a
1569 tar file is the latest version.  People might look at the test release
1570 in this way and mistake it for the real release.  Therefore, always
1571 change the number when you release changed code.
1574 @node Automated FTP Uploads
1575 @section Automated FTP Uploads
1577 @cindex ftp uploads, automated
1578 In order to upload new releases to @code{ftp.gnu.org} or
1579 @code{alpha.gnu.org}, you first need to register the necessary
1580 information.  Then, you can perform uploads yourself, with no
1581 intervention needed by the system administrators.
1583 The general idea is that releases should be cryptographically signed
1584 before they are made publicly available.
1586 @menu
1587 * Automated Upload Registration::
1588 * Automated Upload Procedure::
1589 * FTP Upload Release File Triplet::
1590 * FTP Upload Directive File::
1591 * FTP Upload Directory Trees::
1592 * FTP Upload File Replacement::
1593 * FTP Upload Standalone Directives::
1594 * FTP Upload Directive File - v1.1::
1595 * FTP Upload Directive File - v1.0::
1596 @end menu
1599 @node Automated Upload Registration
1600 @subsection Automated Upload Registration
1602 @cindex registration for uploads
1603 @cindex uploads, registration for
1605 Here is how to register your information so you can perform uploads
1606 for your GNU package:
1608 @enumerate
1609 @item
1610 Create an account for yourself at @url{https://savannah.gnu.org}, if
1611 you don't already have one.  By the way, this is also needed to
1612 maintain the web pages at @url{https://www.gnu.org} for your project
1613 (@pxref{Web Pages}).
1615 @item
1616 In the @samp{My Account Conf} page on @code{savannah}, upload the GPG
1617 key (in ASCII-armored format) that you will use to sign your packages.
1618 If you haven't created one before, you can do so with the command
1619 @code{gpg --gen-key} (you can accept and/or confirm the default
1620 answers to its questions).  Then, to get the ASCII-armored version,
1621 run @samp{gpg --export --armor @var{your_key_id}}.
1623 Optional but recommended: Send your key to a GPG public key server:
1624 @code{gpg --keyserver keys.gnupg.net --send-keys @var{keyid}}, where
1625 @var{keyid} is the eight hex digits reported by @code{gpg
1626 --list-public-keys} on the @code{pub} line before the date.  For full
1627 information about GPG, see @url{https://www.gnu.org/software/gpg}.
1629 @item
1630 Compose a message with the following items in some @var{msgfile}.
1631 Then GPG-sign it by running @code{gpg --clearsign @var{msgfile}}, and
1632 finally email the resulting @file{@var{msgfile}.asc} as an attachment to
1633 @email{ftp-upload@@gnu.org}.
1635 @enumerate
1636 @item
1637 Name of package(s) that you are the maintainer for, your
1638 preferred email address, and your Savannah username.
1640 @item
1641 The ASCII armored copy of your GPG key, as an attachment.
1643 @item
1644 A list of names and preferred email addresses of other individuals you
1645 authorize to make releases for which packages, if any (in the case that you
1646 don't make all releases yourself).
1648 @item
1649 ASCII armored copies of GPG keys for any individuals listed in (3).
1650 @end enumerate
1651 @end enumerate
1653 The administrators will acknowledge your message when they have added
1654 the proper GPG keys as authorized to upload files for the
1655 corresponding packages.
1657 The upload system will email receipts to the given email addresses
1658 when an upload is made, either successfully or unsuccessfully.
1660 Should you later have to update your GPG key, you'll have to re-submit
1661 it to both Savannah and @email{ftp-upload@@gnu.org}, as these systems
1662 are not connected.
1665 @node Automated Upload Procedure
1666 @subsection Automated Upload Procedure
1668 @cindex uploads
1670 Once you have registered your information as described in the previous
1671 section, you can and should do ftp uploads for your package.  There
1672 are two basic kinds of uploads (details in the following sections):
1674 @enumerate
1675 @item
1676 Three related files (a ``triplet'') to upload a file destined for
1677 @code{ftp.gnu.org} or @code{alpha.gnu.org}: @pxref{FTP Upload Release
1678 File Triplet}.
1680 @item
1681 A single (signed) standalone ``directive file'' to perform operations
1682 on the server: @pxref{FTP Upload Standalone Directives}.
1683 @end enumerate
1685 In either case, you upload the file(s) via anonymous ftp to the host
1686 @code{ftp-upload.gnu.org}.  If the upload is destined for
1687 @code{ftp.gnu.org}, place the file(s) in the directory
1688 @file{/incoming/ftp}.  If the upload is destined for
1689 @code{alpha.gnu.org}, place the file(s) in the directory
1690 @file{/incoming/alpha}.
1692 Uploads are processed every five minutes.  Uploads that are in
1693 progress while the upload processing script is running are handled
1694 properly, so do not worry about the timing of your upload.  Spurious
1695 and stale uploaded files are deleted automatically after 24 hours.
1697 Your designated upload email addresses (@pxref{Automated Upload
1698 Registration}) are sent a message if there are problems processing an
1699 upload for your package.  You also receive a message when an upload
1700 has been successfully processed.
1702 One programmatic way to create and transfer the necessary files is to
1703 use the @code{gnupload} script, which is available from the
1704 @file{build-aux/} directory of the @code{gnulib} project at
1705 @url{https://savannah.gnu.org/projects/gnulib}.  Run
1706 @code{gnupload@tie{}--help} for a description and examples.  (With
1707 @code{gnupload}, you specify a destination such as
1708 @samp{ftp.gnu.org:}@var{pkgname} rather than using the
1709 @samp{ftp-upload} hostname.)
1711 @code{gnupload} invokes the program @code{ncftpput} to do the actual
1712 transfers; if you don't happen to have the @code{ncftp} package
1713 installed, the @code{ncftpput-ftp} script in the @file{build-aux/}
1714 directory of @code{gnulib} can serve as a replacement.  It uses the
1715 plain command line @code{ftp} program.
1717 If you have difficulties with an upload, email
1718 @email{ftp-upload@@gnu.org}.  You can check the archive of uploads
1719 processed at
1720 @url{https://lists.gnu.org/archive/html/ftp-upload-report}.
1723 @node FTP Upload Release File Triplet
1724 @subsection FTP Upload Release File Triplet
1726 @cindex FTP uploads, of release files
1728 Ordinarily, the goal is to upload a new release of your package, let's
1729 say, the source archive @file{foo-1.0.tar.gz}.  To do this, you
1730 simultaneously upload three files:
1732 @enumerate
1733 @item
1734 The file to be distributed; in our example, @file{foo-1.0.tar.gz}.
1736 @item
1737 Detached GPG binary signature file for (1); for example,
1738 @file{foo-1.0.tar.gz.sig}.  Make this with @samp{gpg -b foo-1.0.tar.gz}.
1740 @item
1741 A clearsigned @dfn{directive file}; for example,
1742 @file{foo-1.0.tar.gz.directive.asc}, created with @samp{gpg
1743 --clearsign foo-1.0.tar.gz.directive}.  Its contents are described in
1744 the next section.
1745 @end enumerate
1747 The names of the files are important.  The signature file must have
1748 the same name as the file to be distributed, with an additional
1749 @file{.sig} extension.  The directive file must have the same name as
1750 the file to be distributed, with an additional @file{.directive.asc}
1751 extension.  If you do not follow this naming convention, the upload
1752 @emph{will not be processed}.
1755 @node FTP Upload Directive File
1756 @subsection FTP Upload Directive File
1758 @cindex directive file, for FTP uploads
1760 To repeat, a (signed) @dfn{directive file} must be part of every
1761 upload.  The unsigned original is just a plain text file you can
1762 create with any text editor.  Its name must be, e.g.,
1763 @file{foo-1.0.tar.gz.directive} for accompanying an upload of
1764 @file{foo-1.0.tar.gz}.
1766 After creating the file, run @samp{gpg --clearsign
1767 foo-1.0.tar.gz.directive}, which will create
1768 @file{foo-1.0.tar.gz.directive.asc}; this is the file to be uploaded.
1770 When part of a triplet for uploading a release file, the directive
1771 file must always contain the directives @code{version},
1772 @code{filename} and @code{directory}.  In addition, a @code{comment}
1773 directive is optional.  These directives can be given in any order.
1775 Continuing our example of uploading @file{foo-1.0.tar.gz} for a
1776 package named @code{foo} to @code{ftp.gnu.org}, the values would be as
1777 follows:
1779 @table @code
1780 @item version
1781 must be the value @samp{1.2} (the current version, as of May@tie{}2012):@*
1782 @t{version: 1.2}
1784 @item filename
1785 must be the name of the file to be distributed:@*
1786 @t{filename: foo-1.0.tar.gz}
1788 @item directory
1789 specifies the final destination directory where the uploaded file and
1790 its @file{.sig} companion are to be placed.  Here we will put our file
1791 in the top level directory of the package, as is the most common
1792 practice:@*
1793 @t{directory: foo}
1795 @item comment
1796 is optional, and ignored if present:@*
1797 @t{comment: let's hope this works!}
1798 @end table
1800 Putting all of the above together, the complete contents of the
1801 directive file @file{foo-1.0.tar.gz.directive} for our example would
1804 @example
1805 version: 1.2
1806 directory: foo
1807 filename: foo-1.0.tar.gz
1808 comment: let's hope this works!
1809 @end example
1811 Then you @samp{gpg --clearsign} the file as given above, and upload
1812 (using anonymous ftp) the three files:
1814 @table @file
1815 @item foo-1.0.tar.gz
1816 @item foo-1.0.tar.gz.sig
1817 @item foo-1.0.tar.gz.directive.asc
1818 @end table
1820 @noindent to the host @file{ftp-upload.gnu.org}, directory
1821 @file{/incoming/ftp} (for official releases), or the directory
1822 @file{/incoming/alpha} (for test releases).
1824 After the system authenticates the signatures, the files
1825 @file{foo-1.0.tar.gz} and @file{foo-1.0.tar.gz.sig} are placed in
1826 the directory @file{gnu/foo/} on @code{ftp.gnu.org}.  That is, we'll
1827 have made our release available at
1828 @indicateurl{https://ftp.gnu.org/gnu/foo/foo-1.0.tar.gz} (and then from
1829 our many mirrors via
1830 @indicateurl{https://ftpmirror.gnu.org/foo/foo-1.0.tar.gz}).  Whew.
1832 A common reason for the upload not succeeding is your GPG signature
1833 not being registered with the upload system.  There is nothing that
1834 makes this happen automatically.  You must email the system
1835 administrators as described above (@pxref{Automated Upload
1836 Registration}).
1839 @node FTP Upload Directory Trees
1840 @subsection FTP Upload Directory Trees
1842 @cindex directory trees, in ftp uploads
1843 @cindex hierarchy, under ftp upload directory
1844 @cindex uploads, directory trees in
1846 You can make any directory hierarchy you like under your package
1847 directory.  The system automatically creates any intermediate
1848 directories you specify in the @code{directory} directive.
1850 Slightly modifying the example above, the following directive file:
1852 @example
1853 version: 1.2
1854 directory: foo/foo-1.0
1855 filename: foo-1.0.tar.gz
1856 comment: creates per-version subdirectory as needed
1857 @end example
1859 @noindent
1860 would put the tar file in the @file{foo-1.0/} subdirectory of the
1861 package @code{foo}, thus ending up at
1862 @indicateurl{ftp.gnu.org:gnu/foo/foo-1.0/foo-1.0.tar.gz}.
1864 However, to keep things simpler for users, we recommend not using
1865 subdirectories, unless perhaps each release of your package consists
1866 of many separate files.
1869 @node FTP Upload File Replacement
1870 @subsection FTP Upload File Replacement
1872 @cindex replacing uploaded files
1873 @cindex uploads, replacing
1875 You can replace existing files that have already been uploaded by
1876 including a directive line @code{replace:@tie{}true}.  For example,
1877 you might like to provide a README file in the release directory and
1878 update it from time to time.  The full directive file for that would
1879 look like this:
1881 @example
1882 replace: true
1883 version: 1.2
1884 directory: foo
1885 filename: README
1886 comment: replaces an existing README
1887 @end example
1889 It is ok if the file to be replaced doesn't already exist; then the
1890 new file is simply added, i.e., the @file{replace} directive has no
1891 effect.
1893 When an existing file is replaced, the original is archived to a
1894 private location.  There is no automated or public access to such
1895 archived files; if you want to retrieve or view them, please email
1896 @email{sysadmin@@fsf.org}.
1898 We very strongly discourage replacing an actual software release file,
1899 such as @file{foo-1.0.tar.gz}.  Releases should be unique, and
1900 forever.  If you need to make fixes, make another release.  If you
1901 have an exigent reason for a particular release file to no longer be
1902 available, it can be explicitly archived, as described in the next
1903 section.
1905 If you want to make the current release available under a generic
1906 name, such as @code{foo-latest.tar.gz}, that is better done with
1907 symlinks, also as described in the next section.
1910 @node FTP Upload Standalone Directives
1911 @subsection FTP Upload Standalone Directives
1913 @cindex standalone directives, for ftp uploads
1914 @cindex directives for ftp uploads, standalone
1916 The previous sections describe how to upload a file to be publicly
1917 released.  It's also possible to upload a directive file by itself to
1918 perform a few operations on the upload directory.  The supported
1919 directives are:
1921 @table @code
1922 @item symlink
1923 creates a symlink.
1925 @item rmsymlink
1926 removes a symlink.
1928 @item archive
1929 takes a file or directory offline.
1930 @end table
1932 As for the directives described above, the @code{directory} and
1933 @code{version} directives are still required, the @code{comment}
1934 directive remains optional, and the @code{filename} directive is not
1935 allowed.
1937 The @file{.sig} file should not be explicitly mentioned in a directive.
1938 When you specify a directive to operate on a file, its corresponding
1939 @file{.sig} file will be handled automatically.
1941 When uploaded by itself, the name of the directive file is not
1942 important.  But it must be still be signed, using @samp{gpg
1943 --clearsign}; the resulting @file{.asc} file is what should be
1944 uploaded.
1946 Here's an example of the full directive file to create a
1947 @file{foo-latest.tar.gz} symlink:
1949 @example
1950 version: 1.2
1951 directory: foo
1952 symlink: foo-1.1.tar.gz foo-latest.tar.gz
1953 comment: create a symlink
1954 @end example
1956 If you include more than one directive in a standalone upload, the
1957 directives are executed in the sequence they are specified in.  If a
1958 directive results in an error, further execution of the upload is
1959 aborted.
1961 Removing a symbolic link (with @code{rmsymlink}) which does not exist
1962 results in an error.  On the other hand, attempting to create a
1963 symbolic link that already exists (with @code{symlink}) is not an
1964 error.  In this case @code{symlink} behaves like the command
1965 @command{ln -s -f}: any existing symlink is removed before creating
1966 the link.  (But an existing regular file or directory is not replaced.)
1968 Here's an example of removing a symlink, e.g., if you decide not to
1969 maintain a @file{foo-latest} link any more:
1971 @example
1972 version: 1.2
1973 directory: foo
1974 rmsymlink: foo-latest.tar.gz
1975 comment: remove a symlink
1976 @end example
1978 @noindent
1979 And here's an example of archiving a file, e.g., an unintended upload:
1981 @example
1982 version: 1.2
1983 directory: foo
1984 archive: foo-1.1x.tar.gz
1985 comment: archive an old file; it will not be
1986 comment: publicly available any more.
1987 @end example
1989 The @code{archive} directive causes the specified items to become
1990 inaccessible.  This should only be used when it is actively bad for
1991 them to be available, e.g., you uploaded something by mistake.
1993 If all you want to do is reduce how much stuff is in your release
1994 directory, an alternative is to email @email{sysadmin@@fsf.org} and
1995 ask them to move old items to the @file{https://ftp.gnu.org/old-gnu/}
1996 directory; then they will still be available.  In general, however, we
1997 recommend leaving all official releases in the main release directory.
2000 @node FTP Upload Directive File - v1.1
2001 @subsection FTP Upload Directive File - v1.1
2003 The v1.1 protocol for uploads lacked the @code{replace} directive;
2004 instead, file replacements were done automatically and silently
2005 (clearly undesirable).  This is the only difference between v1.2 and
2006 v1.1.
2009 @node FTP Upload Directive File - v1.0
2010 @subsection FTP Upload Directive File - v1.0
2012 Support for v1.0 uploads was discontinued in May 2012; please upgrade
2013 to@tie{}v1.2.
2015 In v1.0, the directive file contained one line, excluding the
2016 clearsigned data GPG that inserts, which specifies the final
2017 destination directory where items (1) and (2) are to be placed.
2019 For example, the @file{foo-1.0.tar.gz.directive.asc} file might contain the
2020 single line:
2022 @example
2023 directory: bar/v1
2024 @end example
2026 This directory line indicates that @file{foo-1.0.tar.gz} and
2027 @file{foo-1.0.tar.gz.sig} are part of package @code{bar}.  If you were to
2028 upload the triplet to @file{/incoming/ftp}, and the system can
2029 positively authenticate the signatures, then the files
2030 @file{foo-1.0.tar.gz} and @file{foo-1.0.tar.gz.sig} will be placed in the
2031 directory @file{gnu/bar/v1} of the @code{ftp.gnu.org} site.
2033 The directive file can be used to create currently non-existent
2034 directory trees, as long as they are under the package directory for
2035 your package (in the example above, that is @code{bar}).
2038 @node Announcements
2039 @section Announcing Releases
2040 @cindex announcements
2042 @cindex @code{info-gnu} mailing list
2043 When you have a new release, please make an announcement.  For
2044 official new releases, including those made just to fix bugs, we
2045 strongly recommend using the (moderated) general GNU announcements
2046 list, @email{info-gnu@@gnu.org}.  Doing so makes it easier for users
2047 and developers to find the latest GNU releases.  On the other hand,
2048 please do not announce test releases on @code{info-gnu} unless it's a
2049 highly unusual situation.
2051 @cindex @url{https://planet.gnu.org}
2052 @cindex Savannah, news area
2053 Please also post release announcements in the news section of your
2054 Savannah project site.  Here, it is fine to also write news entries
2055 for test releases and any other newsworthy events.  The news feeds
2056 from all GNU projects at savannah are aggregated at
2057 @url{https://planet.gnu.org} (GNU Planet), unless the text of the entry
2058 contains the string @samp{::noplanet::}.  You can also post items
2059 directly, or arrange for feeds from other locations; see information
2060 on the GNU Planet web page.
2062 @cindex announcement mailing list, project-specific
2063 You can maintain your own mailing list (typically
2064 @indicateurl{info-@var{package}@@gnu.org}) for announcements as well if you
2065 like.  For your own list, of course you decide as you see fit what
2066 events are worth announcing.  (@xref{Mail}, for setting this up, and
2067 more suggestions on handling mail for your package.)
2069 @cindex contents of announcements
2070 When writing an announcement, please include the following:
2072 @itemize @bullet
2073 @item
2074 A very brief description (a few sentences at most) of the general
2075 purpose of your package.
2077 @item
2078 Your package's web page (normally
2079 @indicateurl{https://www.gnu.org/software/@var{package}/}).
2081 @item
2082 Your package's download location (normally
2083 @indicateurl{https://ftp.gnu.org/gnu/@var{package}/}).  It is also
2084 useful to mention the mirror list at
2085 @url{https://www.gnu.org/order/ftp.html}, and that
2086 @indicateurl{https://ftpmirror.gnu.org/@var{package/}} will automatically
2087 redirect to a nearby mirror.
2089 @item
2090 The @t{NEWS} (@pxref{NEWS File,,, standards, GNU Coding Standards}) for
2091 the present release.
2092 @end itemize
2094 You may find the @file{announce-gen} script useful for creating
2095 announcements, which is available from the @file{build-aux/} directory
2096 of the @code{gnulib} project at
2097 @url{https://savannah.gnu.org/projects/gnulib}.
2100 @node Web Pages
2101 @chapter Web Pages
2102 @cindex web pages
2104 As soon as a new package is dubbed GNU, its home page
2105 (@indicateurl{https://www.gnu.org/software/@var{package}/})
2106 is listed on
2107 @url{https://www.gnu.org/software/software.html} and
2108 @url{https://www.gnu.org/manual/manual.html}.  To avoid broken links,
2109 the webmasters create a temporary home page as follows:
2111 @itemize @bullet
2112 @item
2113 If there is a Savannah project for this package (@pxref{Hosting for
2114 Web Pages}), the temporary home page redirects to the project's main
2115 page, @indicateurl{https://savannah.gnu.org/projects/@var{package}},
2116 where a short description should be available.
2118 @item
2119 Otherwise, the webmasters make a simple home page containing the short
2120 description provided with the original submission of the package to GNU.
2121 @end itemize
2123 This temporary home page ought to be replaced with the real one as soon
2124 as possible.
2126 Some GNU packages have just simple web pages, but the more information
2127 you provide, the better.  So please write as much as you usefully can,
2128 and put all of it on @code{www.gnu.org}.  However, pages that access
2129 databases (including mail archives and bug tracking) are an exception;
2130 set them up on whatever site is convenient for you, and make the pages
2131 on @code{www.gnu.org} link to that site.
2133 Your web pages should follow our usual standards (see
2134 @url{https://www.gnu.org/server/@/fsf-html-style-sheet.html}). The
2135 overall goals are to support a wide variety of browsers, to focus on
2136 information rather than visual adornments, and to keep gnu.org/software/
2137 consistent on certain important points.
2139 We encourage you to use the standard @code{www.gnu.org} template as
2140 the basis for your pages:
2141 @url{https://www.gnu.org/server/@/standards/@/boilerplate-source.html}.
2142 This template changes slightly from time to time for various reasons. If
2143 a change affects existing web pages, the webmasters will inform you;
2144 then you can make the change or they can.
2146 Please follow the best practices of accessibility in your web pages
2147 (see @url{https://www.gnu.org/accessibility/accessibility.html}).
2149 @menu
2150 * Hosting for Web Pages::
2151 * Freedom for Web Pages::
2152 * Manuals on Web Pages::
2153 * CVS Keywords in Web Pages::
2154 @end menu
2156 @node Hosting for Web Pages
2157 @section Hosting for Web Pages
2158 @cindex web pages, hosting for
2160 The best way to maintain the web pages for your project is to register
2161 the project on @code{savannah.gnu.org}.  Then you can edit the pages
2162 using CVS, using the separate ``web pages repository'' available on
2163 Savannah, which corresponds to
2164 @indicateurl{https://www.gnu.org/software/@var{package}/}.  You can
2165 keep your source files there too (using any of a variety of version
2166 control systems), but you can use @code{savannah.gnu.org} only for
2167 your gnu.org web pages if you wish; simply register a ``web-only''
2168 project.
2170 If you don't want to use that method, please talk with
2171 @email{webmasters@@gnu.org} about other possible methods.  For
2172 instance, you can mail them pages to install, if necessary.  But that
2173 is more work for them, so please use Savannah if you can.
2175 Please note that the GNU webmasters may fix technical details in your
2176 web pages (HTML, CSS, obvious typos, broken links in the footer, etc.)
2177 and inform you of the change afterwards.
2179 If you use Savannah, you can use a special file named @file{.symlinks}
2180 in order to create symbolic links, which are not supported in CVS.
2181 For details, see
2182 @url{https://www.gnu.org/server/standards/README.webmastering.html#symlinks}.
2185 @node Freedom for Web Pages
2186 @section Freedom for Web Pages
2187 @cindex web pages, freedom for
2189 If you use a site other than @code{www.gnu.org}, please make sure that
2190 the site runs on free software alone.  (It is ok if the site uses
2191 unreleased custom software, since that is free in a trivial sense:
2192 there's only one user and it has the four freedoms.)  If the web site
2193 for a GNU package runs on non-free software, the public will see this,
2194 and it will have the effect of granting legitimacy to the non-free
2195 program.
2197 If you use multiple sites, they should all follow that criterion.
2198 Please don't link to a site that is about your package, which the
2199 public might perceive as connected with it and reflecting the position
2200 of its developers, unless it follows that criterion.
2202 Please make sure it is possible to use the web site fully using the
2203 Lynx browser, and with the IceCat browser with LibreJS enabled.  It
2204 should work both with Tor and without Tor.  Of course, it is desirable
2205 for the site to support as many other browsers as possible.
2207 Historically, web pages for GNU packages did not include GIF images,
2208 because of patent problems (@pxref{Ethical and Philosophical
2209 Consideration}).  Although the GIF patents expired in 2006, using GIF
2210 images is still not recommended, as the PNG and JPEG formats are
2211 generally superior.  See @url{https://www.gnu.org/philosophy/gif.html}.
2213 Please make sure that any Javascript code in your web pages is covered
2214 by a free license, and has its license indicated in a way LibreJS can
2215 recognize.  See @url{https://gnu.org/philosophy/javascript-trap.html}.
2216 If the Javascript in the page is minified, or for any other reason is
2217 not the source code, it must point to its source code as described
2218 there.
2220 @node Manuals on Web Pages
2221 @section Manuals on Web Pages
2222 @cindex web pages, including manuals on
2223 @cindex formats for documentation, desired
2225 The web pages for the package should include its manuals, in HTML,
2226 DVI, Info, PDF, plain ASCII, and the source Texinfo.  All of these can
2227 be generated automatically from Texinfo using Makeinfo and other
2228 programs.  If the Texinfo itself is generated from some other source
2229 format, include that too.
2231 When there is only one manual, put it in a subdirectory called
2232 @file{manual}; the file @file{manual/index.html} should have a link to
2233 the manual in each of its forms.
2235 If the package has more than one manual, put each one in a
2236 subdirectory of @file{manual}, set up @file{index.html} in each
2237 subdirectory to link to that manual in all its forms, and make
2238 @file{manual/index.html} link to each manual through its subdirectory.
2240 See the section below for details on a script to make the job of
2241 creating all these different formats and index pages easier.
2243 We would like to list all GNU manuals on the page
2244 @url{https://www.gnu.org/manual}, so if yours isn't there, please send
2245 mail to @code{webmasters@@gnu.org}, asking them to add yours, and they
2246 will do so based on the contents of your @file{manual} directory.
2248 @menu
2249 * Invoking gendocs.sh::
2250 @end menu
2253 @node Invoking gendocs.sh
2254 @subsection Invoking @command{gendocs.sh}
2255 @pindex gendocs.sh
2256 @cindex generating documentation output
2257 @cindex documentation output, generating
2259 The script @command{gendocs.sh} eases the task of generating the
2260 Texinfo documentation output for your web pages
2261 section above.  It has a companion template file, used as the basis
2262 for the HTML index pages.  Both are available from the Gnulib
2263 development:
2265 @smallformat
2266 @uref{https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh}
2267 @uref{https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template}
2268 @end smallformat
2270 There is also a minimalistic template, available from:
2272 @smallformat
2273 @uref{https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template_min}
2274 @end smallformat
2276 Invoke the script like this, in the directory containing the Texinfo
2277 source:
2279 @smallexample
2280 gendocs.sh --email @var{yourbuglist} @var{yourmanual} "GNU @var{yourmanual} manual"
2281 @end smallexample
2283 @noindent where @var{yourmanual} is the short name for your package
2284 and @var{yourbuglist} is the email address for bug reports (which
2285 should be @code{bug-@var{package}@@gnu.org}).  The script processes
2286 the file @file{@var{yourmanual}.texinfo} (or @file{.texi} or
2287 @file{.txi}).  For example:
2289 @smallexample
2290 cd .../texinfo/doc
2291 # download gendocs.sh and gendocs_template
2292 gendocs.sh --email bug-texinfo@@gnu.org texinfo "GNU Texinfo manual"
2293 @end smallexample
2295 @command{gendocs.sh} creates a subdirectory @file{manual/} containing
2296 the manual generated in all the standard output formats: Info, HTML,
2297 DVI, and so on, as well as the Texinfo source.  You then need to move
2298 all those files, retaining the subdirectories, into the web pages for
2299 your package.
2301 You can specify the option @option{-o @var{outdir}} to override the
2302 name @file{manual}.  Any previous contents of @var{outdir} will be deleted.
2304 The second argument, with the description, is included as part of the
2305 HTML @code{<title>} of the overall @file{manual/index.html} file.  It
2306 should include the name of the package being documented, as shown.
2307 @file{manual/index.html} is created by substitution from the file
2308 @file{gendocs_template}.  (Feel free to modify the generic template
2309 for your own purposes.)
2311 If you have several manuals, you'll need to run this script several
2312 times with different arguments, specifying a different output
2313 directory with @option{-o} each time, and moving all the output to
2314 your web page.  Then write (by hand) an overall index.html with links
2315 to them all.  For example:
2317 @smallexample
2318 cd .../texinfo/doc
2319 gendocs.sh --email bug-texinfo@@gnu.org -o texinfo texinfo "GNU Texinfo manual"
2320 gendocs.sh --email bug-texinfo@@gnu.org -o info info "GNU Info manual"
2321 gendocs.sh --email bug-texinfo@@gnu.org -o info-stnd info-stnd "GNU info-stnd manual"
2322 @end smallexample
2324 By default, the script uses @command{makeinfo} for generating HTML
2325 output.  If you prefer to use @command{texi2html}, use the
2326 @option{--texi2html} command line option, e.g.:
2328 @smallexample
2329 gendocs --texi2html -o texinfo texinfo "GNU Texinfo manual"
2330 @end smallexample
2332 The template files will automatically produce entries for additional
2333 HTML output generated by @command{texi2html} (i.e., split by sections
2334 and chapters).
2336 You can set the environment variables @env{MAKEINFO}, @env{TEXI2DVI},
2337 etc., to control the programs that get executed, and
2338 @env{GENDOCS_TEMPLATE_DIR} to control where the
2339 @file{gendocs_template} file is found.
2341 As usual, run @samp{gendocs.sh --help} for a description of all the
2342 options, environment variables, and more information.
2344 Please email bug reports, enhancement requests, or other
2345 correspondence about @command{gendocs} to @email{bug-texinfo@@gnu.org}.
2348 @node CVS Keywords in Web Pages
2349 @section CVS Keywords in Web Pages
2350 @cindex CVS keywords in web pages
2351 @cindex RCS keywords in web pages
2352 @cindex $ keywords in web pages
2353 @cindex web pages, and CVS keywords
2355 Since @code{www.gnu.org} works through CVS, CVS keywords in your
2356 manual, such as @code{@w{$}Log$}, need special treatment (even if you
2357 don't happen to maintain your manual in CVS).
2359 If these keywords end up in the generated output as literal strings,
2360 they will be expanded.  The most robust way to handle this is to turn
2361 off keyword expansion for such generated files.  For existing files,
2362 this is done with:
2364 @example
2365 cvs admin -ko @var{file1} @var{file2} ...
2366 @end example
2368 @noindent
2369 For new files:
2371 @example
2372 cvs add -ko @var{file1} @var{file2} ...
2373 @end example
2375 @c The CVS manual is now built with numeric references and no nonsplit
2376 @c form, so it's not worth trying to give a direct link.
2377 See the ``Keyword Substitution'' section in the CVS manual, available
2378 from @url{https://cvs.nongnu.org}.
2380 In Texinfo source, the recommended way to literally specify a
2381 ``dollar'' keyword is:
2383 @example
2384 @@w@{$@}Log$
2385 @end example
2387 The @code{@@w} prevents keyword expansion in the Texinfo source
2388 itself.  Also, @code{makeinfo} notices the @code{@@w} and generates
2389 output avoiding the literal keyword string.
2391 @node Ethical and Philosophical Consideration
2392 @chapter Ethical and Philosophical Consideration
2393 @cindex ethics
2394 @cindex philosophy
2396 The GNU project takes a strong stand for software freedom.  Many
2397 times, this means you'll need to avoid certain technologies when their
2398 use would conflict with our long-term goals.
2400 Software patents threaten the advancement of free software and freedom
2401 to program.  There are so many software patents in the US that any
2402 large program probably implements hundreds of patented techniques,
2403 unknown to the program's developers.  It would be futile and
2404 self-defeating to try to find and avoid all these patents.  But there
2405 are some patents which we know are likely to be used to threaten free
2406 software, so we make an effort to avoid the patented techniques.  If
2407 you are concerned about the danger of a patent and would like advice,
2408 write to @email{licensing@@gnu.org}, and we will try to help you get
2409 advice from a lawyer.
2411 Sometimes the GNU project takes a strong stand against a particular
2412 patented technology in order to encourage society to reject it.  That
2413 is why we rejected MP3 audio format in favor of the unpatented Ogg
2414 Vorbis format.  These patents have reportedly expired, but we still
2415 prefer Ogg formats to MP3 formats.  Please support this campaign by
2416 making Ogg Vorbis the preferred format for audio distribution
2417 in GNU packages and their web sites.
2419 We will consider using Ogg Opus at some point in the future.
2420 It is fine to distribute Ogg Opus files @emph{also}, but please
2421 continue distributing Ogg Vorbis, so as not to hurry users to change
2422 the software with which they listen to audio.
2424 We are unable to find a modern compressed video format that is truly
2425 safe from patents, so we use the Ogg Theora and WebM formats for which
2426 no licensing consortium has been set up.  GNU programs and their web
2427 sites should not distribute video in MPEG-2 or MPEG 4 formats.
2429 A GNU package should not recommend use of any non-free program, nor
2430 should it require a non-free program (such as a non-free compiler or
2431 IDE) to build.  Thus, a GNU package cannot be written in a programming
2432 language that does not have a free software implementation.  Now that
2433 GNU/Linux systems are widely available, all GNU packages should
2434 provide full functionality on a 100% free GNU/Linux system, and should
2435 not require any non-free software to build or function.
2436 The GNU Coding Standards say a lot more about this issue.
2438 Similarly, a GNU package should not require the use of non-free
2439 software, including JavaScript, for the coordination of its
2440 development.  For example, please don't use Transifex for translation
2441 of your software because it requires your translators to use non-free,
2442 JavaScript-based editing tools.  Instead, a service without any
2443 ethical concerns should be used, such as The Translation Project
2444 (@url{https://translationproject.org}).
2446 A GNU package should not refer the user to any non-free documentation
2447 for free software.  The need for free documentation to come with free
2448 software is now a major focus of the GNU project; to show that we are
2449 serious about the need for free documentation, we must not contradict
2450 our position by recommending use of documentation that isn't free.
2452 Please don't host discussions about your package in a service that
2453 requires nonfree software.  For instance, Google+ ``communities''
2454 require running a nonfree JavaScript program to post a message, so
2455 they can't be used in the Free World.  Google Groups has the same
2456 problem.  To host discussions there would be excluding people who live
2457 by free software principles.
2459 Of course, you can't order people not to use such services to talk
2460 with each other.  What you can do is not legitimize them, and use your
2461 influence to lead people away from them.  For instance, where you say
2462 where to have discussions related to the program, don't list such a
2463 place.
2465 Finally, new issues concerning the ethics of software freedom come up
2466 frequently.  We ask that GNU maintainers, at least on matters that
2467 pertain specifically to their package, stand with the rest of the GNU
2468 project when such issues come up.
2470 @node Humor
2471 @chapter Humor and GNU
2473 In GNU, we appreciate humor in our work.
2475 GNU is a project of hackers, and
2476 @uref{https://stallman.org/articles/on-hacking.html,,hacking means
2477 playful cleverness}.  Even the name ``GNU'' is an example of playful
2478 cleverness---it is a
2479 @uref{https://gnu.org/gnu/the-gnu-project.html,,recursive acronym for
2480 ``GNU's Not Unix.''}
2482 In that spirit, we prize occasional doses of humor in GNU packages.
2483 Humor is not mandatory in a GNU package; we do not tell maintainers,
2484 ``Make users smile, or else!''  But when maintainers do that, we too
2485 smile.
2487 Nowadays, our humor-positive approach occasionally encounters direct,
2488 blanket opposition.  Some people advocate, and even demand, removal of
2489 jokes from software packages simply because they are jokes.  We shrug
2490 off that point of view.
2492 Jokes are subject to the same sorts of issues and criticism as other
2493 writing.  Sometimes there is a valid objection to text which is
2494 humorous, so we do not defend every joke obtusely to the bitter end.
2495 But @emph{the fact that it is a joke} is not a valid objection.
2497 There are people who frown on anything that is slightly risqué or
2498 controversial, including jokes.  It would be a terrible shame for that
2499 attitude to prevail, so our policy is that the occasional risqué joke
2500 is ok.  GNU is a 21st century project, not a 19th.
2502 @node Other Politics
2503 @chapter Other Politics
2505 The GNU Project supports the cause of software freedom, that the users
2506 of computing should have control of their computing activities.  This
2507 requires that they have control of their software that does those
2508 activities, which in turn requires that they do these activities
2509 with free software and have the possibility of replacing any shared
2510 copies with their own copies.
2512 It also supports basic human rights in computing including use of the
2513 internet; opposing censorship, for instance.
2515 A GNU package should not seriously advocate any other political
2516 causes.  Not that the GNU Project opposes those other causes.  Rather,
2517 it is neutral on them, and GNU packages should be neutral too.
2519 @node Terminology
2520 @chapter Terminology Issues
2521 @cindex terminology
2523 This chapter explains a couple of issues of terminology which are
2524 important for correcting two widespread and important misunderstandings
2525 about GNU.
2527 @menu
2528 * Free Software and Open Source::
2529 * GNU and Linux::
2530 @end menu
2532 @node Free Software and Open Source
2533 @section Free Software and Open Source
2534 @cindex free software movement
2535 @cindex open source
2536 @cindex movement, free software
2537 @cindex development method, open source
2539 The terms ``free software'' and ``open source'', while describing
2540 almost the same category of software, stand for views based on
2541 fundamentally different values.  The free software movement is
2542 idealistic, and raises issues of freedom, ethics, principle and what
2543 makes for a good society.  The term open source, initiated in 1998, is
2544 associated with a philosophy which studiously avoids such questions.
2545 For a detailed explanation, see
2546 @url{https://www.gnu.org/philosophy/open-source-misses-the-point.html}.
2548 The GNU Project is aligned with the free software movement.  This
2549 doesn't mean that all GNU contributors and maintainers have to agree;
2550 your views on these issues are up to you, and you're entitled to express
2551 them when speaking for yourself.
2553 However, due to the much greater publicity that the term ``open source''
2554 receives, the GNU Project needs to overcome a widespread
2555 mistaken impression that GNU is @emph{and always was} an ``open
2556 source'' activity.  For this reason, please use the term ``free
2557 software'', not ``open source'' or ``FOSS'', in GNU software releases, GNU
2558 documentation, and announcements and articles that you publish in your
2559 role as the maintainer of a GNU package.  A reference to the URL given
2560 above, to explain the difference, is a useful thing to include as
2561 well.
2564 @node GNU and Linux
2565 @section GNU and Linux
2566 @cindex Linux
2567 @cindex GNU/Linux
2569 The GNU Project was formed to develop a free Unix-like operating system,
2570 GNU@.  The existence of this system is our major accomplishment.
2571 However, the widely used version of the GNU system, in which Linux is
2572 used as the kernel, is often called simply ``Linux''.  As a result, most
2573 users don't know about the GNU Project's major accomplishment---or more
2574 precisely, they know about it, but don't realize it is the GNU Project's
2575 accomplishment and reason for existence.  Even people who believe they
2576 know the real history often believe that the goal of GNU was to develop
2577 ``tools'' or ``utilities''.
2579 To correct this confusion, we have made a years-long effort to
2580 distinguish between Linux, the kernel that Linus Torvalds wrote, and
2581 GNU/Linux, the operating system that is the combination of GNU and
2582 Linux.  The resulting increased awareness of what the GNU Project has
2583 already done helps every activity of the GNU Project recruit more
2584 support and contributors.
2586 Please make this distinction consistently in GNU software releases, GNU
2587 documentation, and announcements and articles that you publish in your
2588 role as the maintainer of a GNU package.  If you want to explain the
2589 terminology and its reasons, you can refer to the URL
2590 @url{https://www.gnu.org/gnu/linux-and-gnu.html}.
2592 To make it clear that Linux is a kernel, not an operating system,
2593 please take care to avoid using the term ``Linux system'' in those
2594 materials.  If you want to have occasion to make a statement about
2595 systems in which the kernel is Linux, write ``systems in which the
2596 kernel is Linux'' or ``systems with Linux as the kernel.''  That
2597 explicitly contrasts the system and the kernel, and will help readers
2598 understand the difference between the two.  Please avoid simplified
2599 forms such as ``Linux-based systems'' because those fail to highlight
2600 the difference between the kernel and the system, and could encourage
2601 readers to overlook the distinction.
2603 To contrast the GNU system proper with GNU/Linux, you can call it
2604 ``GNU/Hurd'' or ``the GNU/Hurd system''.  However, when that contrast
2605 is not specifically the focus, please call it just ``GNU'' or ``the
2606 GNU system''.
2608 When referring to the collection of servers that is the higher level
2609 of the GNU kernel, please call it ``the Hurd'' or ``the GNU Hurd''.
2610 Note that this uses a space, not a slash.
2612 For more about this point, see
2613 @url{https://www.gnu.org/gnu/gnu-linux-faq.html}.
2615 @node Interviews and Speeches
2616 @chapter Interviews and Speeches
2618 Interviews and speeches about your package are an important channel
2619 for informing the public about the GNU system and the ideas of the
2620 free software movement.  Please avoid saying ``open source'' and avoid
2621 calling the GNU system ``Linux'', just as you would in the package
2622 itself (@pxref{Terminology}).  Likewise, avoid promoting nonfree
2623 programs (@pxref{References,,, standards, GNU Coding
2624 Standards}) as you would in the package itself.
2626 Many GNU users have erroneous ideas about GNU@.  Outside of our
2627 community, most people think it is Linux.  Please use your opportunity
2628 to set them straight.  Start the presentation with the answers to
2629 these basic questions:
2631 @itemize @bullet
2632 @item
2633 What GNU is (an operating system developed to be Unix-like and totally
2634 free software).  It is good to mention @url{https://www.gnu.org}.
2636 @item
2637 What free software is (the users control it, so it doesn't control
2638 them).  It is good to state the four freedoms and/or refer to
2639 @url{https://www.gnu.org/philosophy/free-sw.html}.
2641 @item
2642 What GNU/Linux is (Linux filled the last gap in GNU).  It is useful to
2643 refer to @url{https://www.gnu.org/gnu/linux-and-gnu.html}.
2645 @item
2646 What the GNU Project is (the project to develop GNU).
2648 @item
2649 How your package fits in (it's part of GNU, and the work is part of
2650 the GNU Project).
2651 @end itemize
2653 If you feel a social pressure not to say these things, you may be
2654 coming in contact with some who would prefer that these things not be
2655 said.  That's precisely when we need your support most.
2657 Please don't include advertisements or plugs for any company, product
2658 or service.  Even if the product would meet the standards for the FSF
2659 to endorse it, an ad for it is out of place in a presentation about a
2660 GNU package.  Likewise, please don't include company slogans.  Mention
2661 a company only when called for by the subject matter.
2663 A few GNU packages are actually business activities of a particular
2664 company.  In that case, it is ok to say so at the start.  Otherwise,
2665 please show that this is a project of the GNU Project, and avoid
2666 suggesting it is any company's project.
2668 If you are paid by a company to work on the GNU package, it is
2669 appropriate to thank the company in a discreet way, but please don't
2670 go beyond that.
2672 Before you do a speech or interview, please contact the GNU Project
2673 leadership.  We can give you advice on how to deal with various
2674 eventualities.
2676 When your interviews and speech recordings or transcript are posted,
2677 please tell us about them.  Then we can publicize them.
2679 Please post them in formats that are friendly to free software: not in
2680 Doc or Docx format, not with Flash, not with QuickTime, not with MP3,
2681 MPEG2 or MPEG4.  Plain text, HTML and PDF are good.
2683 @node Hosting
2684 @chapter Hosting
2685 @cindex CVS repository
2686 @cindex repository
2687 @cindex source repository
2688 @cindex version control system
2689 @cindex FTP site
2690 @cindex release site
2691 @cindex hosting
2693 We recommend using @code{savannah.gnu.org} for the source code
2694 repository for your package, but that's not required.  @xref{Old
2695 Versions}, for more information about Savannah.
2697 We strongly urge you to use @code{ftp.gnu.org} as the standard
2698 distribution site for releases.  Doing so makes it easier for
2699 developers and users to find the latest GNU releases.  However, it is
2700 ok to use another server if you wish, provided it allows access from
2701 the general public without limitation (for instance, without excluding
2702 any country).
2704 If you use a company's machine to hold the repository for your
2705 program, or as its release distribution site, please put this
2706 statement in a prominent place on the site, so as to prevent people
2707 from getting the wrong idea about the relationship between the package
2708 and the company:
2710 @smallexample
2711 The programs <list of them> hosted here are free software packages
2712 of the GNU Project, not products of <company name>.  We call them
2713 "free software" because you are free to copy and redistribute them,
2714 following the rules stated in the license of each package.  For more
2715 information, see https://www.gnu.org/philosophy/free-sw.html.
2717 If you are looking for service or support for GNU software, see
2718 https://www.gnu.org/gethelp/ for suggestions of where to ask.
2720 If you would like to contribute to the development of one of these
2721 packages, contact the package maintainer or the bug-reporting address
2722 of the package (which should be listed in the package itself), or look
2723 on www.gnu.org for more information on how to contribute.
2724 @end smallexample
2727 @node Donations
2728 @chapter Donations
2729 @cindex Donations, for packages
2730 @cindex Money, donated to packages
2732 As a maintainer, you might want to accept donations for your work,
2733 especially if you pay for any of your own hosting/development
2734 infrastructure.  Following is some text you can adapt to your own
2735 situation, and use on your package's web site, @file{README}, or
2736 in wherever way you find it useful:
2738 @smallexample
2739 We appreciate contributions of any size -- donations enable us to spend
2740 more time working on the project, and help cover our infrastructure
2741 expenses.
2743 If you'd like to make a small donation, please visit @var{url1} and do
2744 it through @var{payment-service}.  Since our project isn't a
2745 tax-exempt organization, we can't offer you a tax deduction, but for
2746 all donations over @var{amount1}, we'd be happy to recognize your
2747 contribution on @var{url2}.
2749 We are also happy to consider making particular improvements or
2750 changes, or giving specific technical assistance, in return for a
2751 substantial donation over @var{amount2}.  If you would like to discuss
2752 this possibility, write to us at @var{address}.
2754 Another possibility is to pay a software maintenance fee.  Again,
2755 write to us about this at @var{address} to discuss how much you want
2756 to pay and how much maintenance we can offer in return.  If you pay
2757 more than @var{amount1}, we can give you a document for your records.
2759 Thanks for your support!
2760 @end smallexample
2762 We don't recommend any specific payment service.  However, GNU
2763 developers should not use a service that requires them to sign a
2764 proprietary software license, such as Google's payment service.
2765 Please also avoid sites that requires users to run nonfree software in
2766 order to donate.  (This includes JavaScript software, so try it with
2767 LibreJS or with JavaScript disabled.)
2769 In the text you post on the site, please pay attention to the
2770 terminological issues we care about (@pxref{Terminology}).
2772 We have no objections to using Bitcoin to receive donations.
2774 The FSF can collect donations for a limited number of projects; if you
2775 want to propose that for your project, write to
2776 @email{maintainers@@gnu.org}.  The FSF is required to supervise the
2777 spending of these funds.
2779 Of course, it is also good to encourage people to join the FSF
2780 (@url{https://www.fsf.org}) or make a general donation, either instead
2781 of or as well as package-specific donations.
2784 @node Free Software Directory
2785 @chapter Free Software Directory
2786 @cindex Free Software Directory
2787 @cindex Directory, Free Software
2789 The Free Software Directory aims to be a complete list of free
2790 software packages, within certain criteria.  Every GNU package should
2791 be listed there, so please see
2792 @url{https://www.gnu.org/help/directory.html#adding-entries} for
2793 information on how to write an entry for your package.  Contact
2794 @email{bug-directory@@gnu.org} with any questions or suggestions for
2795 the Free Software Directory.
2798 @node Using the Proofreaders List
2799 @chapter Using the Proofreaders List
2800 @cindex proofreading
2802 If you want help finding errors in documentation,
2803 or help improving the quality of writing,
2804 or if you are not a native speaker of English
2805 and want help producing good English documentation,
2806 you can use the GNU proofreaders mailing list:
2807 @email{proofreaders@@gnu.org}.
2809 But be careful when you use the list,
2810 because there are over 200 people on it.
2811 If you simply ask everyone on the list to read your work,
2812 there will probably be tremendous duplication of effort
2813 by the proofreaders,
2814 and you will probably get the same errors reported 100 times.
2815 This must be avoided.
2817 Also, the people on the list do not want to get
2818 a large amount of mail from it.
2819 So do not ever ask people on the list to send mail to the list!
2821 Here are a few methods that seem reasonable to use:
2823 @itemize @bullet
2824 @item
2825 For something small, mail it to the list,
2826 and ask people to pick a random number from 1 to 20,
2827 and read it if the number comes out as 10.
2828 This way, assuming 50% response, some 5 people will read the piece.
2830 @item
2831 For a larger work, divide your work into around 20 equal-sized parts,
2832 tell people where to get it,
2833 and ask each person to pick randomly which part to read.
2835 Be sure to specify the random choice procedure;
2836 otherwise people will probably use a mental procedure
2837 that is not really random,
2838 such as ``pick a part near the middle'',
2839 and you will not get even coverage.
2841 You can either divide up the work physically, into 20 separate files,
2842 or describe a virtual division, such as by sections
2843 (if your work has approximately 20 sections).
2844 If you do the latter, be sure to be precise about it---for example,
2845 do you want the material before the first section heading
2846 to count as a section, or not?
2848 @item
2849 For a job needing special skills, send an explanation of it,
2850 and ask people to send you mail if they volunteer for the job.
2851 When you get enough volunteers, send another message to the list saying
2852 ``I have enough volunteers, no more please.''
2853 @end itemize
2856 @node GNU Free Documentation License
2857 @appendix GNU Free Documentation License
2859 @cindex FDL, GNU Free Documentation License
2860 @include fdl.texi
2863 @node Index
2864 @unnumbered Index
2865 @printindex cp
2867 @bye
2869 Local variables:
2870 eval: (add-hook 'before-save-hook 'time-stamp)
2871 time-stamp-start: "@set lastupdate "
2872 time-stamp-end: "$"
2873 time-stamp-format: "%:b %:d, %:y"
2874 compile-command: "make -C work.m"
2875 coding: utf-8
2876 End: