yield: Implement for OS/2 kLIBC.
[gnulib.git] / doc / maintain.texi
blob624ae864abda052066bea81e2ca554338b2dea93
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 August 23, 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
1145 are not equally important.  Please resist requests to implement or add
1146 features that would function only on some non-GNU systems and not on
1147 GNU itself.
1149 The most important platforms for a GNU package to support are GNU and
1150 GNU/Linux.  Developing the GNU operating system is the whole point of
1151 the GNU Project; a GNU package exists to make the whole GNU system
1152 more powerful.  So please keep that goal in mind and let it shape your
1153 work.  For instance, every new feature you add should work on GNU, and
1154 GNU/Linux if possible too.  If a new feature only runs on GNU and
1155 GNU/Linux, it could still be acceptable.  However, a feature that runs
1156 only on other systems and not on GNU or GNU/Linux would undermine that
1157 purpose, as it would promote the non-GNU system at the expense of GNU
1158 itself.  If the feature functions only on some nonfree systems, it
1159 would work against our goal of freedom for the users.
1161 Please say no when asked to implement such a feature, citing
1162 these reasnos, and ask the contributors to implement the feature
1163 for the GNU system as well.
1165 You will naturally want to keep the program running on all the platforms
1166 it supports.  But you personally will not have access to most of these
1167 platforms---so how should you do it?
1169 Don't worry about trying to get access to all of these platforms.  Even
1170 if you did have access to all the platforms, it would be inefficient for
1171 you to test the program on each platform yourself.  Instead, you should
1172 test the program on a few platforms, including GNU or GNU/Linux, and let
1173 the users test it on the other platforms.  You can do this through a
1174 pretest phase before the real release; when there is no reason to expect
1175 problems, in a package that is mostly portable, you can just make a
1176 release and let the users tell you if anything unportable was
1177 introduced.
1179 It is important to test the program personally on GNU or GNU/Linux,
1180 because these are the most important platforms for a GNU package.  If
1181 you don't have access to one of these platforms, as a GNU maintainer
1182 you can get access to the general GNU login machine; see
1183 @url{https://www.gnu.org/software/README.accounts.html}.
1185 Supporting other platforms is optional---we do it when that seems like
1186 a good idea, but we don't consider it obligatory.  If the users don't
1187 take care of a certain platform, you may have to desupport it unless
1188 and until users come forward to help.  Conversely, if a user offers
1189 changes to support an additional platform, you will probably want to
1190 install them, but you don't have to.  If you feel the changes are
1191 complex and ugly, if you think that they will increase the burden of
1192 future maintenance, you can and should reject them.  This includes
1193 both free or mainly-free platforms such as OpenBSD, FreeBSD, and
1194 NetBSD, and non-free platforms such as Windows.
1197 @node Mail
1198 @chapter Dealing With Mail
1199 @cindex email
1201 This chapter describes setting up mailing lists for your package, and
1202 gives advice on how to handle bug reports and random requests once you
1203 have them.
1205 @menu
1206 * Standard Mailing Lists::  @samp{bug-pkg@@gnu.org} and other standard names.
1207 * Creating Mailing Lists::  The best way is to use Savannah.
1208 * Replying to Mail::        Advice on replying to incoming mail.
1209 @end menu
1212 @node Standard Mailing Lists
1213 @section Standard Mailing Lists
1215 @cindex standard mailing lists
1216 @cindex mailing lists, standard names of
1218 @cindex mailing list for bug reports
1219 Once a program is in use, you will get bug reports for it.  Most GNU
1220 programs have their own special lists for sending bug reports.  The
1221 advertised bug-reporting email address should always be
1222 @samp{bug-@var{package}@@gnu.org}, to help show users that the program
1223 is a GNU package, but it is ok to set up that list to forward to another
1224 site if you prefer.
1226 @cindex @email{bug-gnu-utils@@gnu.org}
1227 We also have a catch-all list, @email{bug-gnu-utils@@gnu.org}, which is
1228 used for all GNU programs that don't have their own specific lists.  But
1229 nowadays we want to give each program its own bug-reporting list and
1230 move away from using @email{bug-gnu-utils}.
1232 @xref{Replying to Mail}, for more about handling and tracking bug
1233 reports.
1235 @cindex help for users, mailing list for
1236 Some GNU programs with many users have another mailing list,
1237 @samp{help-@var{package}@@gnu.org}, for people to ask other users for
1238 help.  If your program has many users, you should create such a list
1239 for it.  For a fairly new program, which doesn't have a large user
1240 base yet, it is better not to bother with this.
1242 @cindex announcements, mailing list for
1243 If you wish, you can also have a mailing list
1244 @samp{info-@var{package}@@gnu.org} for announcements
1245 (@pxref{Announcements}).  Any other mailing lists you find useful can
1246 also be created.
1248 The package distribution should state the name of all the package's
1249 mailing lists in a prominent place, and ask users to help us by
1250 reporting bugs appropriately.  The top-level @file{README} file and/or
1251 @file{AUTHORS} file are good places.  Mailing list information should
1252 also be included in the manual and the package web pages (@pxref{Web
1253 Pages}).
1257 @node Creating Mailing Lists
1258 @section Creating Mailing Lists
1260 @cindex creating mailing lists
1261 @cindex mailing lists, creating
1263 Using the web interface on @code{savannah.gnu.org} is by far the
1264 easiest way to create normal mailing lists, managed through Mailman on
1265 the GNU mail server.  Once you register your package on Savannah, you
1266 can create (and remove) lists yourself through the `Mailing Lists'
1267 menu, without needing to wait for intervention by anyone else.
1268 Furthermore, lists created through Savannah will have a reasonable
1269 default configuration for antispam purposes (see below).
1271 To create and maintain simple aliases and unmanaged lists, you can
1272 edit @file{/com/mailer/aliases} on the main GNU server.  If you don't
1273 have an account there, please read
1274 @url{https://www.gnu.org/software/README.accounts.html} (@pxref{GNU
1275 Accounts and Resources}).
1277 But if you don't want to learn how to do those things, you can ask
1278 @email{new-mailing-list@@gnu.org} to help you.
1280 @cindex spam prevention
1281 You should moderate postings from non-subscribed addresses on your
1282 mailing lists, to prevent propagation of unwanted messages (``spam'')
1283 to subscribers and to the list archives.  For lists controlled by
1284 Mailman, you can do this by setting @code{Privacy Options - Sender
1285 Filter - generic_nonmember_action} to @code{Hold}, and then
1286 periodically (daily is best) reviewing the held messages, accepting
1287 the real ones and discarding the junk.
1289 Lists created through Savannah will have this setting, and a number of
1290 others, such that spam will be automatically deleted (after a short
1291 delay).  The Savannah mailing list page describes all the details.
1292 You should still review the held messages in order to approve any that
1293 are real.
1296 @node Replying to Mail
1297 @section Replying to Mail
1299 @cindex responding to bug reports
1300 @cindex bug reports, handling
1301 @cindex help requests, handling
1303 When you receive bug reports, keep in mind that bug reports are crucial
1304 for your work.  If you don't know about problems, you cannot fix them.
1305 So always thank each person who sends a bug report.
1307 You don't have an obligation to give more response than that, though.
1308 The main purpose of bug reports is to help you contribute to the
1309 community by improving the next version of the program.  Many of the
1310 people who report bugs don't realize this---they think that the point is
1311 for you to help them individually.  Some will ask you to focus on that
1312 @emph{instead of} on making the program better.  If you comply with
1313 their wishes, you will have been distracted from the job of maintaining
1314 the program.
1316 For example, people sometimes report a bug in a vague (and therefore
1317 useless) way, and when you ask for more information, they say, ``I just
1318 wanted to see if you already knew the solution'' (in which case the bug
1319 report would do nothing to help improve the program).  When this
1320 happens, you should explain to them the real purpose of bug reports.  (A
1321 canned explanation will make this more efficient.)
1323 When people ask you to put your time into helping them use the program,
1324 it may seem ``helpful'' to do what they ask.  But it is much @emph{less}
1325 helpful than improving the program, which is the maintainer's real job.
1327 By all means help individual users when you feel like it, if you feel
1328 you have the time available.  But be careful to limit the amount of time
1329 you spend doing this---don't let it eat away the time you need to
1330 maintain the program!  Know how to say no; when you are pressed for
1331 time, just ``thanks for the bug report---I will fix it'' is enough
1332 response.
1334 Some GNU packages, such as Emacs and GCC, come with advice about how
1335 to make bug reports useful.  Copying and adapting that could be very
1336 useful for your package.
1338 @cindex @url{https://bugs.gnu.org}
1339 @cindex bug reports, email tracker for
1340 @cindex bug reports, web tracker for
1341 If you would like to use an email-based bug tracking system, see
1342 @url{https://bugs.gnu.org}; this can be connected with the regular
1343 bug-reporting address.  Alternatively, if you would like to use a
1344 web-based bug tracking system, Savannah supports this (@pxref{Old
1345 Versions}), but please don't fail to accept bugs by regular email as
1346 well---we don't want to put up unnecessary barriers against users
1347 submitting reports.
1350 @node Old Versions
1351 @chapter Recording Old Versions
1352 @cindex version control
1354 It is very important to keep backup files of all source files of GNU.
1355 You can do this using a source control system (such as Bazaar, RCS,
1356 CVS, Git, Subversion, @dots{}) if you like.  An easy way to use
1357 many such systems is via the Version Control library in Emacs
1358 (@pxref{Introduction to VC,, Introduction to Version Control, emacs,
1359 The GNU Emacs Manual}).
1361 The history of previous revisions and log entries is very important for
1362 future maintainers of the package, so even if you do not make it
1363 publicly accessible, be careful not to put anything in the repository or
1364 change log that you would not want to hand over to another maintainer
1365 some day.
1367 @cindex @code{savannah-hackers@@gnu.org}
1368 The GNU Project provides a server that GNU packages can use
1369 for source control and other package needs: @code{savannah.gnu.org}.
1370 Savannah is managed by @email{savannah-hackers@@gnu.org}.  For more
1371 details on using and contributing to Savannah, see
1372 @url{https://savannah.gnu.org/maintenance}.
1374 It's not an absolute requirement, but all GNU maintainers are strongly
1375 encouraged to take advantage of Savannah, as sharing such a central
1376 point can serve to foster a sense of community among GNU developers as
1377 well as help in keeping up with project management.  Please don't mark
1378 Savannah projects for GNU packages as private; that defeats a large
1379 part of the purpose of using Savannah in the first place.
1381 @cindex @code{savannah-announce@@gnu.org} mailing list
1382 If you do use Savannah, please subscribe to the
1383 @email{savannah-announce@@gnu.org} mailing list
1384 (@url{https://lists.gnu.org/mailman/listinfo/savannah-announce}).  This
1385 is a very low-volume list to keep Savannah users informed of system
1386 upgrades, problems, and the like.
1389 @node Distributions
1390 @chapter Distributions
1392 Please follow the GNU conventions when making GNU software
1393 distributions.
1395 @menu
1396 * Distribution tar Files::
1397 * Distribution Patches::
1398 * Binary Distribution::
1399 * Distribution on ftp.gnu.org::
1400 * Test Releases::
1401 * Automated FTP Uploads::
1402 * Announcements::
1403 @end menu
1405 @node Distribution tar Files
1406 @section Distribution tar Files
1407 @cindex distribution, tar files
1409 All packages should provide tar files for the distribution of their
1410 releases.  The tar file for version @var{m}.@var{n} of program
1411 @code{foo} should be named @file{foo-@var{m}.@var{n}.tar}.  It should
1412 unpack into a subdirectory named @file{foo-@var{m}.@var{n}}.  Tar
1413 files should not unpack into files in the current directory, because
1414 this is inconvenient if the user happens to unpack into a directory
1415 with other files in it.
1417 Here is how the @file{Makefile} for Bison creates the tar file.
1418 This method is good for other programs.
1420 @example
1421 dist: bison.info
1422         echo bison-`sed -e '/version_string/!d' \
1423           -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q version.c` > .fname
1424         -rm -rf `cat .fname`
1425         mkdir `cat .fname`
1426         dst=`cat .fname`; for f in $(DISTFILES); do \
1427            ln $(srcdir)/$$f $$dst/$$f || @{ echo copying $$f; \
1428              cp -p $(srcdir)/$$f $$dst/$$f ; @} \
1429         done
1430         tar --gzip -chf `cat .fname`.tar.gz `cat .fname`
1431         -rm -rf `cat .fname` .fname
1432 @end example
1434 Source files that are symbolic links to other file systems cannot be
1435 installed in the temporary directory using @code{ln}, so use @code{cp}
1436 if @code{ln} fails.
1438 @pindex automake
1439 Using Automake is a good way to take care of writing the @code{dist}
1440 target.
1442 @node Distribution Patches
1443 @section Distribution Patches
1444 @cindex patches, against previous releases
1446 If the program is large, it is useful to make a set of diffs for each
1447 release, against the previous important release.
1449 At the front of the set of diffs, put a short explanation of which
1450 version this is for and which previous version it is relative to.
1451 Also explain what else people need to do to update the sources
1452 properly (for example, delete or rename certain files before
1453 installing the diffs).
1455 The purpose of having diffs is that they are small.  To keep them
1456 small, exclude files that the user can easily update.  For example,
1457 exclude info files, DVI files, tags tables, output files of Bison or
1458 Flex.  In Emacs diffs, we exclude compiled Lisp files, leaving it up
1459 to the installer to recompile the patched sources.
1461 When you make the diffs, each version should be in a directory suitably
1462 named---for example, @file{gcc-2.3.2} and @file{gcc-2.3.3}.  This way,
1463 it will be very clear from the diffs themselves which version is which.
1465 @pindex diff
1466 @pindex patch
1467 @cindex time stamp in diffs
1468 If you use GNU @code{diff} to make the patch, use the options
1469 @samp{-rc2P}.  That will put any new files into the output as ``entirely
1470 different''.  Also, the patch's context diff headers should have dates
1471 and times in Universal Time using traditional Unix format, so that patch
1472 recipients can use GNU @code{patch}'s @samp{-Z} option.  For example,
1473 you could use the following Bourne shell command to create the patch:
1475 @example
1476 LC_ALL=C TZ=UTC0 diff -rc2P gcc-2.3.2 gcc-2.3.3 | \
1477 gzip -9 >gcc-2.3.2-2.3.3.patch.gz
1478 @end example
1480 If the distribution has subdirectories in it, then the diffs probably
1481 include some files in the subdirectories.  To help users install such
1482 patches reliably, give them precise directions for how to run patch.
1483 For example, say this:
1485 @display
1486 To apply these patches, cd to the main directory of the program
1487 and then use `patch -p1'.   `-p1' avoids guesswork in choosing
1488 which subdirectory to find each file in.
1489 @end display
1491 It's wise to test your patch by applying it to a copy of the old
1492 version, and checking that the result exactly matches the new version.
1494 @node Binary Distribution
1495 @section Binary Distribution for Nonfree Platforms
1497 Some package maintainers release pre-compiled binaries for proprietary
1498 systems such as Microsoft Windows or MacOS@.  It's entirely up to you
1499 whether to do that; we don't ask you to do it, but we don't object.
1500 Please do not let anyone make you feel you have an obligation to do
1501 this.
1503 If you distribute them, please inform their users prominently that
1504 those non-free platforms trample their freedom.  It is useful to refer
1505 them to
1506 @url{https://www.gnu.org/philosophy/free-software-even-more-important.html}.
1507 You can say, ``This program respects your freedom, but Windows does
1508 not.  To have freedom, you need to stop using Windows and other
1509 software that denies your freedom.''
1511 @node Distribution on ftp.gnu.org
1512 @section Distribution on @code{ftp.gnu.org}
1513 @cindex GNU ftp site
1514 @cindex @code{ftp.gnu.org}, the GNU release site
1516 We strongly recommend using @code{ftp.gnu.org} to distribute official
1517 releases.  If you want to also distribute the package from a site of
1518 your own, that is fine.  To use some other site instead of
1519 @code{ftp.gnu.org} is acceptable, provided it allows connections from
1520 anyone anywhere.
1522 @xref{Automated FTP Uploads}, for the procedural details of putting
1523 new versions on @code{ftp.gnu.org}.
1526 @node Test Releases
1527 @section Test Releases
1528 @cindex test releases
1529 @cindex beta releases
1530 @cindex pretest releases
1532 @cindex @code{alpha.gnu.org}, test release site
1533 When you release a greatly changed new major version of a program, you
1534 might want to do so as a pretest.  This means that you make a tar file,
1535 but send it only to a group of volunteers that you have recruited.  (Use
1536 a suitable GNU mailing list/newsgroup to recruit them.)
1538 We normally use the server @code{alpha.gnu.org} for pretests and
1539 prerelease versions.  @xref{Automated FTP Uploads}, for the procedural
1540 details of putting new versions on @code{alpha.gnu.org}.
1542 Once a program gets to be widely used and people expect it to work
1543 solidly, it is a good idea to do pretest releases before each ``real''
1544 release.
1546 There are three ways of handling version numbers for pretest versions.
1547 One method is to treat them as versions preceding the release you are going
1548 to make.
1550 In this method, if you are about to release version 4.6 but you want
1551 to do a pretest first, call it 4.5.90.  If you need a second pretest,
1552 call it 4.5.91, and so on.  If you are really unlucky and ten pretests
1553 are not enough, after 4.5.99 you could advance to 4.5.990 and so on.
1554 (You could also use 4.5.100, but 990 has the advantage of sorting in
1555 the right order.)
1557 Another method is to attach a date to the release number that is
1558 coming.  For a pretest for version 4.6, made on Dec 10, 2002, this
1559 would be 4.6.20021210.  A second pretest made the same day could be
1560 4.6.20021210.1.
1562 For development snapshots that are not formal pretests, using just
1563 the date without the version numbers is ok too.
1565 A third method, if the package uses Git, is to run the script
1566 @code{build-aux/git-version-gen} from Gnulib to generate test release
1567 version numbers.  It generates version numbers in the form
1568 @samp{@var{version}.@var{commits}-@var{commithash}}, where
1569 @var{version} is the latest version tag, @var{commits} is the number
1570 of commits since that tag, and @var{commithash} is a hash code for the
1571 latest commit.
1573 One thing that you should never do is to release a pretest with the same
1574 version number as the planned real release.  Many people will look only
1575 at the version number (in the tar file name, in the directory name that
1576 it unpacks into, or wherever they can find it) to determine whether a
1577 tar file is the latest version.  People might look at the test release
1578 in this way and mistake it for the real release.  Therefore, always
1579 change the number when you release changed code.
1582 @node Automated FTP Uploads
1583 @section Automated FTP Uploads
1585 @cindex ftp uploads, automated
1586 In order to upload new releases to @code{ftp.gnu.org} or
1587 @code{alpha.gnu.org}, you first need to register the necessary
1588 information.  Then, you can perform uploads yourself, with no
1589 intervention needed by the system administrators.
1591 The general idea is that releases should be cryptographically signed
1592 before they are made publicly available.
1594 @menu
1595 * Automated Upload Registration::
1596 * Automated Upload Procedure::
1597 * FTP Upload Release File Triplet::
1598 * FTP Upload Directive File::
1599 * FTP Upload Directory Trees::
1600 * FTP Upload File Replacement::
1601 * FTP Upload Standalone Directives::
1602 * FTP Upload Directive File - v1.1::
1603 * FTP Upload Directive File - v1.0::
1604 @end menu
1607 @node Automated Upload Registration
1608 @subsection Automated Upload Registration
1610 @cindex registration for uploads
1611 @cindex uploads, registration for
1613 Here is how to register your information so you can perform uploads
1614 for your GNU package:
1616 @enumerate
1617 @item
1618 Create an account for yourself at @url{https://savannah.gnu.org}, if
1619 you don't already have one.  By the way, this is also needed to
1620 maintain the web pages at @url{https://www.gnu.org} for your project
1621 (@pxref{Web Pages}).
1623 @item
1624 In the @samp{My Account Conf} page on @code{savannah}, upload the GPG
1625 key (in ASCII-armored format) that you will use to sign your packages.
1626 If you haven't created one before, you can do so with the command
1627 @code{gpg --gen-key} (you can accept and/or confirm the default
1628 answers to its questions).  Then, to get the ASCII-armored version,
1629 run @samp{gpg --export --armor @var{your_key_id}}.
1631 Optional but recommended: Send your key to a GPG public key server:
1632 @code{gpg --keyserver keys.gnupg.net --send-keys @var{keyid}}, where
1633 @var{keyid} is the eight hex digits reported by @code{gpg
1634 --list-public-keys} on the @code{pub} line before the date.  For full
1635 information about GPG, see @url{https://www.gnu.org/software/gpg}.
1637 @item
1638 Compose a message with the following items in some @var{msgfile}.
1639 Then GPG-sign it by running @code{gpg --clearsign @var{msgfile}}, and
1640 finally email the resulting @file{@var{msgfile}.asc} as an attachment to
1641 @email{ftp-upload@@gnu.org}.
1643 @enumerate
1644 @item
1645 Name of package(s) that you are the maintainer for, your
1646 preferred email address, and your Savannah username.
1648 @item
1649 The ASCII armored copy of your GPG key, as an attachment.
1651 @item
1652 A list of names and preferred email addresses of other individuals you
1653 authorize to make releases for which packages, if any (in the case that you
1654 don't make all releases yourself).
1656 @item
1657 ASCII armored copies of GPG keys for any individuals listed in (3).
1658 @end enumerate
1659 @end enumerate
1661 The administrators will acknowledge your message when they have added
1662 the proper GPG keys as authorized to upload files for the
1663 corresponding packages.
1665 The upload system will email receipts to the given email addresses
1666 when an upload is made, either successfully or unsuccessfully.
1668 Should you later have to update your GPG key, you'll have to re-submit
1669 it to both Savannah and @email{ftp-upload@@gnu.org}, as these systems
1670 are not connected.
1673 @node Automated Upload Procedure
1674 @subsection Automated Upload Procedure
1676 @cindex uploads
1678 Once you have registered your information as described in the previous
1679 section, you can and should do ftp uploads for your package.  There
1680 are two basic kinds of uploads (details in the following sections):
1682 @enumerate
1683 @item
1684 Three related files (a ``triplet'') to upload a file destined for
1685 @code{ftp.gnu.org} or @code{alpha.gnu.org}: @pxref{FTP Upload Release
1686 File Triplet}.
1688 @item
1689 A single (signed) standalone ``directive file'' to perform operations
1690 on the server: @pxref{FTP Upload Standalone Directives}.
1691 @end enumerate
1693 In either case, you upload the file(s) via anonymous ftp to the host
1694 @code{ftp-upload.gnu.org}.  If the upload is destined for
1695 @code{ftp.gnu.org}, place the file(s) in the directory
1696 @file{/incoming/ftp}.  If the upload is destined for
1697 @code{alpha.gnu.org}, place the file(s) in the directory
1698 @file{/incoming/alpha}.
1700 Uploads are processed every five minutes.  Uploads that are in
1701 progress while the upload processing script is running are handled
1702 properly, so do not worry about the timing of your upload.  Spurious
1703 and stale uploaded files are deleted automatically after 24 hours.
1705 Your designated upload email addresses (@pxref{Automated Upload
1706 Registration}) are sent a message if there are problems processing an
1707 upload for your package.  You also receive a message when an upload
1708 has been successfully processed.
1710 One programmatic way to create and transfer the necessary files is to
1711 use the @code{gnupload} script, which is available from the
1712 @file{build-aux/} directory of the @code{gnulib} project at
1713 @url{https://savannah.gnu.org/projects/gnulib}.  Run
1714 @code{gnupload@tie{}--help} for a description and examples.  (With
1715 @code{gnupload}, you specify a destination such as
1716 @samp{ftp.gnu.org:}@var{pkgname} rather than using the
1717 @samp{ftp-upload} hostname.)
1719 @code{gnupload} invokes the program @code{ncftpput} to do the actual
1720 transfers; if you don't happen to have the @code{ncftp} package
1721 installed, the @code{ncftpput-ftp} script in the @file{build-aux/}
1722 directory of @code{gnulib} can serve as a replacement.  It uses the
1723 plain command line @code{ftp} program.
1725 If you have difficulties with an upload, email
1726 @email{ftp-upload@@gnu.org}.  You can check the archive of uploads
1727 processed at
1728 @url{https://lists.gnu.org/archive/html/ftp-upload-report}.
1731 @node FTP Upload Release File Triplet
1732 @subsection FTP Upload Release File Triplet
1734 @cindex FTP uploads, of release files
1736 Ordinarily, the goal is to upload a new release of your package, let's
1737 say, the source archive @file{foo-1.0.tar.gz}.  To do this, you
1738 simultaneously upload three files:
1740 @enumerate
1741 @item
1742 The file to be distributed; in our example, @file{foo-1.0.tar.gz}.
1744 @item
1745 Detached GPG binary signature file for (1); for example,
1746 @file{foo-1.0.tar.gz.sig}.  Make this with @samp{gpg -b foo-1.0.tar.gz}.
1748 @item
1749 A clearsigned @dfn{directive file}; for example,
1750 @file{foo-1.0.tar.gz.directive.asc}, created with @samp{gpg
1751 --clearsign foo-1.0.tar.gz.directive}.  Its contents are described in
1752 the next section.
1753 @end enumerate
1755 The names of the files are important.  The signature file must have
1756 the same name as the file to be distributed, with an additional
1757 @file{.sig} extension.  The directive file must have the same name as
1758 the file to be distributed, with an additional @file{.directive.asc}
1759 extension.  If you do not follow this naming convention, the upload
1760 @emph{will not be processed}.
1763 @node FTP Upload Directive File
1764 @subsection FTP Upload Directive File
1766 @cindex directive file, for FTP uploads
1768 To repeat, a (signed) @dfn{directive file} must be part of every
1769 upload.  The unsigned original is just a plain text file you can
1770 create with any text editor.  Its name must be, e.g.,
1771 @file{foo-1.0.tar.gz.directive} for accompanying an upload of
1772 @file{foo-1.0.tar.gz}.
1774 After creating the file, run @samp{gpg --clearsign
1775 foo-1.0.tar.gz.directive}, which will create
1776 @file{foo-1.0.tar.gz.directive.asc}; this is the file to be uploaded.
1778 When part of a triplet for uploading a release file, the directive
1779 file must always contain the directives @code{version},
1780 @code{filename} and @code{directory}.  In addition, a @code{comment}
1781 directive is optional.  These directives can be given in any order.
1783 Continuing our example of uploading @file{foo-1.0.tar.gz} for a
1784 package named @code{foo} to @code{ftp.gnu.org}, the values would be as
1785 follows:
1787 @table @code
1788 @item version
1789 must be the value @samp{1.2} (the current version, as of May@tie{}2012):@*
1790 @t{version: 1.2}
1792 @item filename
1793 must be the name of the file to be distributed:@*
1794 @t{filename: foo-1.0.tar.gz}
1796 @item directory
1797 specifies the final destination directory where the uploaded file and
1798 its @file{.sig} companion are to be placed.  Here we will put our file
1799 in the top level directory of the package, as is the most common
1800 practice:@*
1801 @t{directory: foo}
1803 @item comment
1804 is optional, and ignored if present:@*
1805 @t{comment: let's hope this works!}
1806 @end table
1808 Putting all of the above together, the complete contents of the
1809 directive file @file{foo-1.0.tar.gz.directive} for our example would
1812 @example
1813 version: 1.2
1814 directory: foo
1815 filename: foo-1.0.tar.gz
1816 comment: let's hope this works!
1817 @end example
1819 Then you @samp{gpg --clearsign} the file as given above, and upload
1820 (using anonymous ftp) the three files:
1822 @table @file
1823 @item foo-1.0.tar.gz
1824 @item foo-1.0.tar.gz.sig
1825 @item foo-1.0.tar.gz.directive.asc
1826 @end table
1828 @noindent to the host @file{ftp-upload.gnu.org}, directory
1829 @file{/incoming/ftp} (for official releases), or the directory
1830 @file{/incoming/alpha} (for test releases).
1832 After the system authenticates the signatures, the files
1833 @file{foo-1.0.tar.gz} and @file{foo-1.0.tar.gz.sig} are placed in
1834 the directory @file{gnu/foo/} on @code{ftp.gnu.org}.  That is, we'll
1835 have made our release available at
1836 @indicateurl{https://ftp.gnu.org/gnu/foo/foo-1.0.tar.gz} (and then from
1837 our many mirrors via
1838 @indicateurl{https://ftpmirror.gnu.org/foo/foo-1.0.tar.gz}).  Whew.
1840 A common reason for the upload not succeeding is your GPG signature
1841 not being registered with the upload system.  There is nothing that
1842 makes this happen automatically.  You must email the system
1843 administrators as described above (@pxref{Automated Upload
1844 Registration}).
1847 @node FTP Upload Directory Trees
1848 @subsection FTP Upload Directory Trees
1850 @cindex directory trees, in ftp uploads
1851 @cindex hierarchy, under ftp upload directory
1852 @cindex uploads, directory trees in
1854 You can make any directory hierarchy you like under your package
1855 directory.  The system automatically creates any intermediate
1856 directories you specify in the @code{directory} directive.
1858 Slightly modifying the example above, the following directive file:
1860 @example
1861 version: 1.2
1862 directory: foo/foo-1.0
1863 filename: foo-1.0.tar.gz
1864 comment: creates per-version subdirectory as needed
1865 @end example
1867 @noindent
1868 would put the tar file in the @file{foo-1.0/} subdirectory of the
1869 package @code{foo}, thus ending up at
1870 @indicateurl{ftp.gnu.org:gnu/foo/foo-1.0/foo-1.0.tar.gz}.
1872 However, to keep things simpler for users, we recommend not using
1873 subdirectories, unless perhaps each release of your package consists
1874 of many separate files.
1877 @node FTP Upload File Replacement
1878 @subsection FTP Upload File Replacement
1880 @cindex replacing uploaded files
1881 @cindex uploads, replacing
1883 You can replace existing files that have already been uploaded by
1884 including a directive line @code{replace:@tie{}true}.  For example,
1885 you might like to provide a README file in the release directory and
1886 update it from time to time.  The full directive file for that would
1887 look like this:
1889 @example
1890 replace: true
1891 version: 1.2
1892 directory: foo
1893 filename: README
1894 comment: replaces an existing README
1895 @end example
1897 It is ok if the file to be replaced doesn't already exist; then the
1898 new file is simply added, i.e., the @file{replace} directive has no
1899 effect.
1901 When an existing file is replaced, the original is archived to a
1902 private location.  There is no automated or public access to such
1903 archived files; if you want to retrieve or view them, please email
1904 @email{sysadmin@@fsf.org}.
1906 We very strongly discourage replacing an actual software release file,
1907 such as @file{foo-1.0.tar.gz}.  Releases should be unique, and
1908 forever.  If you need to make fixes, make another release.  If you
1909 have an exigent reason for a particular release file to no longer be
1910 available, it can be explicitly archived, as described in the next
1911 section.
1913 If you want to make the current release available under a generic
1914 name, such as @code{foo-latest.tar.gz}, that is better done with
1915 symlinks, also as described in the next section.
1918 @node FTP Upload Standalone Directives
1919 @subsection FTP Upload Standalone Directives
1921 @cindex standalone directives, for ftp uploads
1922 @cindex directives for ftp uploads, standalone
1924 The previous sections describe how to upload a file to be publicly
1925 released.  It's also possible to upload a directive file by itself to
1926 perform a few operations on the upload directory.  The supported
1927 directives are:
1929 @table @code
1930 @item symlink
1931 creates a symlink.
1933 @item rmsymlink
1934 removes a symlink.
1936 @item archive
1937 takes a file or directory offline.
1938 @end table
1940 As for the directives described above, the @code{directory} and
1941 @code{version} directives are still required, the @code{comment}
1942 directive remains optional, and the @code{filename} directive is not
1943 allowed.
1945 The @file{.sig} file should not be explicitly mentioned in a directive.
1946 When you specify a directive to operate on a file, its corresponding
1947 @file{.sig} file will be handled automatically.
1949 When uploaded by itself, the name of the directive file is not
1950 important.  But it must be still be signed, using @samp{gpg
1951 --clearsign}; the resulting @file{.asc} file is what should be
1952 uploaded.
1954 Here's an example of the full directive file to create a
1955 @file{foo-latest.tar.gz} symlink:
1957 @example
1958 version: 1.2
1959 directory: foo
1960 symlink: foo-1.1.tar.gz foo-latest.tar.gz
1961 comment: create a symlink
1962 @end example
1964 If you include more than one directive in a standalone upload, the
1965 directives are executed in the sequence they are specified in.  If a
1966 directive results in an error, further execution of the upload is
1967 aborted.
1969 Removing a symbolic link (with @code{rmsymlink}) which does not exist
1970 results in an error.  On the other hand, attempting to create a
1971 symbolic link that already exists (with @code{symlink}) is not an
1972 error.  In this case @code{symlink} behaves like the command
1973 @command{ln -s -f}: any existing symlink is removed before creating
1974 the link.  (But an existing regular file or directory is not replaced.)
1976 Here's an example of removing a symlink, e.g., if you decide not to
1977 maintain a @file{foo-latest} link any more:
1979 @example
1980 version: 1.2
1981 directory: foo
1982 rmsymlink: foo-latest.tar.gz
1983 comment: remove a symlink
1984 @end example
1986 @noindent
1987 And here's an example of archiving a file, e.g., an unintended upload:
1989 @example
1990 version: 1.2
1991 directory: foo
1992 archive: foo-1.1x.tar.gz
1993 comment: archive an old file; it will not be
1994 comment: publicly available any more.
1995 @end example
1997 The @code{archive} directive causes the specified items to become
1998 inaccessible.  This should only be used when it is actively bad for
1999 them to be available, e.g., you uploaded something by mistake.
2001 If all you want to do is reduce how much stuff is in your release
2002 directory, an alternative is to email @email{sysadmin@@fsf.org} and
2003 ask them to move old items to the @file{https://ftp.gnu.org/old-gnu/}
2004 directory; then they will still be available.  In general, however, we
2005 recommend leaving all official releases in the main release directory.
2008 @node FTP Upload Directive File - v1.1
2009 @subsection FTP Upload Directive File - v1.1
2011 The v1.1 protocol for uploads lacked the @code{replace} directive;
2012 instead, file replacements were done automatically and silently
2013 (clearly undesirable).  This is the only difference between v1.2 and
2014 v1.1.
2017 @node FTP Upload Directive File - v1.0
2018 @subsection FTP Upload Directive File - v1.0
2020 Support for v1.0 uploads was discontinued in May 2012; please upgrade
2021 to@tie{}v1.2.
2023 In v1.0, the directive file contained one line, excluding the
2024 clearsigned data GPG that inserts, which specifies the final
2025 destination directory where items (1) and (2) are to be placed.
2027 For example, the @file{foo-1.0.tar.gz.directive.asc} file might contain the
2028 single line:
2030 @example
2031 directory: bar/v1
2032 @end example
2034 This directory line indicates that @file{foo-1.0.tar.gz} and
2035 @file{foo-1.0.tar.gz.sig} are part of package @code{bar}.  If you were to
2036 upload the triplet to @file{/incoming/ftp}, and the system can
2037 positively authenticate the signatures, then the files
2038 @file{foo-1.0.tar.gz} and @file{foo-1.0.tar.gz.sig} will be placed in the
2039 directory @file{gnu/bar/v1} of the @code{ftp.gnu.org} site.
2041 The directive file can be used to create currently non-existent
2042 directory trees, as long as they are under the package directory for
2043 your package (in the example above, that is @code{bar}).
2046 @node Announcements
2047 @section Announcing Releases
2048 @cindex announcements
2050 @cindex @code{info-gnu} mailing list
2051 When you have a new release, please make an announcement.  For
2052 official new releases, including those made just to fix bugs, we
2053 strongly recommend using the (moderated) general GNU announcements
2054 list, @email{info-gnu@@gnu.org}.  Doing so makes it easier for users
2055 and developers to find the latest GNU releases.  On the other hand,
2056 please do not announce test releases on @code{info-gnu} unless it's a
2057 highly unusual situation.
2059 @cindex @url{https://planet.gnu.org}
2060 @cindex Savannah, news area
2061 Please also post release announcements in the news section of your
2062 Savannah project site.  Here, it is fine to also write news entries
2063 for test releases and any other newsworthy events.  The news feeds
2064 from all GNU projects at savannah are aggregated at
2065 @url{https://planet.gnu.org} (GNU Planet), unless the text of the entry
2066 contains the string @samp{::noplanet::}.  You can also post items
2067 directly, or arrange for feeds from other locations; see information
2068 on the GNU Planet web page.
2070 @cindex announcement mailing list, project-specific
2071 You can maintain your own mailing list (typically
2072 @indicateurl{info-@var{package}@@gnu.org}) for announcements as well if you
2073 like.  For your own list, of course you decide as you see fit what
2074 events are worth announcing.  (@xref{Mail}, for setting this up, and
2075 more suggestions on handling mail for your package.)
2077 @cindex contents of announcements
2078 When writing an announcement, please include the following:
2080 @itemize @bullet
2081 @item
2082 A very brief description (a few sentences at most) of the general
2083 purpose of your package.
2085 @item
2086 Your package's web page (normally
2087 @indicateurl{https://www.gnu.org/software/@var{package}/}).
2089 @item
2090 Your package's download location (normally
2091 @indicateurl{https://ftp.gnu.org/gnu/@var{package}/}).  It is also
2092 useful to mention the mirror list at
2093 @url{https://www.gnu.org/order/ftp.html}, and that
2094 @indicateurl{https://ftpmirror.gnu.org/@var{package/}} will automatically
2095 redirect to a nearby mirror.
2097 @item
2098 The @t{NEWS} (@pxref{NEWS File,,, standards, GNU Coding Standards}) for
2099 the present release.
2100 @end itemize
2102 You may find the @file{announce-gen} script useful for creating
2103 announcements, which is available from the @file{build-aux/} directory
2104 of the @code{gnulib} project at
2105 @url{https://savannah.gnu.org/projects/gnulib}.
2108 @node Web Pages
2109 @chapter Web Pages
2110 @cindex web pages
2112 As soon as a new package is dubbed GNU, its home page
2113 (@indicateurl{https://www.gnu.org/software/@var{package}/})
2114 is listed on
2115 @url{https://www.gnu.org/software/software.html} and
2116 @url{https://www.gnu.org/manual/manual.html}.  To avoid broken links,
2117 the webmasters create a temporary home page as follows:
2119 @itemize @bullet
2120 @item
2121 If there is a Savannah project for this package (@pxref{Hosting for
2122 Web Pages}), the temporary home page redirects to the project's main
2123 page, @indicateurl{https://savannah.gnu.org/projects/@var{package}},
2124 where a short description should be available.
2126 @item
2127 Otherwise, the webmasters make a simple home page containing the short
2128 description provided with the original submission of the package to GNU.
2129 @end itemize
2131 This temporary home page ought to be replaced with the real one as soon
2132 as possible.
2134 Some GNU packages have just simple web pages, but the more information
2135 you provide, the better.  So please write as much as you usefully can,
2136 and put all of it on @code{www.gnu.org}.  However, pages that access
2137 databases (including mail archives and bug tracking) are an exception;
2138 set them up on whatever site is convenient for you, and make the pages
2139 on @code{www.gnu.org} link to that site.
2141 Your web pages should follow our usual standards (see
2142 @url{https://www.gnu.org/server/@/fsf-html-style-sheet.html}). The
2143 overall goals are to support a wide variety of browsers, to focus on
2144 information rather than visual adornments, and to keep gnu.org/software/
2145 consistent on certain important points.
2147 We encourage you to use the standard @code{www.gnu.org} template as
2148 the basis for your pages:
2149 @url{https://www.gnu.org/server/@/standards/@/boilerplate-source.html}.
2150 This template changes slightly from time to time for various reasons. If
2151 a change affects existing web pages, the webmasters will inform you;
2152 then you can make the change or they can.
2154 Please follow the best practices of accessibility in your web pages
2155 (see @url{https://www.gnu.org/accessibility/accessibility.html}).
2157 @menu
2158 * Hosting for Web Pages::
2159 * Freedom for Web Pages::
2160 * Manuals on Web Pages::
2161 * CVS Keywords in Web Pages::
2162 @end menu
2164 @node Hosting for Web Pages
2165 @section Hosting for Web Pages
2166 @cindex web pages, hosting for
2168 The best way to maintain the web pages for your project is to register
2169 the project on @code{savannah.gnu.org}.  Then you can edit the pages
2170 using CVS, using the separate ``web pages repository'' available on
2171 Savannah, which corresponds to
2172 @indicateurl{https://www.gnu.org/software/@var{package}/}.  You can
2173 keep your source files there too (using any of a variety of version
2174 control systems), but you can use @code{savannah.gnu.org} only for
2175 your gnu.org web pages if you wish; simply register a ``web-only''
2176 project.
2178 If you don't want to use that method, please talk with
2179 @email{webmasters@@gnu.org} about other possible methods.  For
2180 instance, you can mail them pages to install, if necessary.  But that
2181 is more work for them, so please use Savannah if you can.
2183 Please note that the GNU webmasters may fix technical details in your
2184 web pages (HTML, CSS, obvious typos, broken links in the footer, etc.)
2185 and inform you of the change afterwards.
2187 If you use Savannah, you can use a special file named @file{.symlinks}
2188 in order to create symbolic links, which are not supported in CVS.
2189 For details, see
2190 @url{https://www.gnu.org/server/standards/README.webmastering.html#symlinks}.
2193 @node Freedom for Web Pages
2194 @section Freedom for Web Pages
2195 @cindex web pages, freedom for
2197 If you use a site other than @code{www.gnu.org}, please make sure that
2198 the site runs on free software alone.  (It is ok if the site uses
2199 unreleased custom software, since that is free in a trivial sense:
2200 there's only one user and it has the four freedoms.)  If the web site
2201 for a GNU package runs on non-free software, the public will see this,
2202 and it will have the effect of granting legitimacy to the non-free
2203 program.
2205 If you use multiple sites, they should all follow that criterion.
2206 Please don't link to a site that is about your package, which the
2207 public might perceive as connected with it and reflecting the position
2208 of its developers, unless it follows that criterion.
2210 Please make sure it is possible to use the web site fully using the
2211 Lynx browser, and with the IceCat browser with LibreJS enabled.  It
2212 should work both with Tor and without Tor.  Of course, it is desirable
2213 for the site to support as many other browsers as possible.
2215 Historically, web pages for GNU packages did not include GIF images,
2216 because of patent problems (@pxref{Ethical and Philosophical
2217 Consideration}).  Although the GIF patents expired in 2006, using GIF
2218 images is still not recommended, as the PNG and JPEG formats are
2219 generally superior.  See @url{https://www.gnu.org/philosophy/gif.html}.
2221 Please make sure that any Javascript code in your web pages is covered
2222 by a free license, and has its license indicated in a way LibreJS can
2223 recognize.  See @url{https://gnu.org/philosophy/javascript-trap.html}.
2224 If the Javascript in the page is minified, or for any other reason is
2225 not the source code, it must point to its source code as described
2226 there.
2228 @node Manuals on Web Pages
2229 @section Manuals on Web Pages
2230 @cindex web pages, including manuals on
2231 @cindex formats for documentation, desired
2233 The web pages for the package should include its manuals, in HTML,
2234 DVI, Info, PDF, plain ASCII, and the source Texinfo.  All of these can
2235 be generated automatically from Texinfo using Makeinfo and other
2236 programs.  If the Texinfo itself is generated from some other source
2237 format, include that too.
2239 When there is only one manual, put it in a subdirectory called
2240 @file{manual}; the file @file{manual/index.html} should have a link to
2241 the manual in each of its forms.
2243 If the package has more than one manual, put each one in a
2244 subdirectory of @file{manual}, set up @file{index.html} in each
2245 subdirectory to link to that manual in all its forms, and make
2246 @file{manual/index.html} link to each manual through its subdirectory.
2248 See the section below for details on a script to make the job of
2249 creating all these different formats and index pages easier.
2251 We would like to list all GNU manuals on the page
2252 @url{https://www.gnu.org/manual}, so if yours isn't there, please send
2253 mail to @code{webmasters@@gnu.org}, asking them to add yours, and they
2254 will do so based on the contents of your @file{manual} directory.
2256 @menu
2257 * Invoking gendocs.sh::
2258 @end menu
2261 @node Invoking gendocs.sh
2262 @subsection Invoking @command{gendocs.sh}
2263 @pindex gendocs.sh
2264 @cindex generating documentation output
2265 @cindex documentation output, generating
2267 The script @command{gendocs.sh} eases the task of generating the
2268 Texinfo documentation output for your web pages
2269 section above.  It has a companion template file, used as the basis
2270 for the HTML index pages.  Both are available from the Gnulib
2271 development:
2273 @smallformat
2274 @uref{https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh}
2275 @uref{https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template}
2276 @end smallformat
2278 There is also a minimalistic template, available from:
2280 @smallformat
2281 @uref{https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template_min}
2282 @end smallformat
2284 Invoke the script like this, in the directory containing the Texinfo
2285 source:
2287 @smallexample
2288 gendocs.sh --email @var{yourbuglist} @var{yourmanual} "GNU @var{yourmanual} manual"
2289 @end smallexample
2291 @noindent where @var{yourmanual} is the short name for your package
2292 and @var{yourbuglist} is the email address for bug reports (which
2293 should be @code{bug-@var{package}@@gnu.org}).  The script processes
2294 the file @file{@var{yourmanual}.texinfo} (or @file{.texi} or
2295 @file{.txi}).  For example:
2297 @smallexample
2298 cd .../texinfo/doc
2299 # download gendocs.sh and gendocs_template
2300 gendocs.sh --email bug-texinfo@@gnu.org texinfo "GNU Texinfo manual"
2301 @end smallexample
2303 @command{gendocs.sh} creates a subdirectory @file{manual/} containing
2304 the manual generated in all the standard output formats: Info, HTML,
2305 DVI, and so on, as well as the Texinfo source.  You then need to move
2306 all those files, retaining the subdirectories, into the web pages for
2307 your package.
2309 You can specify the option @option{-o @var{outdir}} to override the
2310 name @file{manual}.  Any previous contents of @var{outdir} will be deleted.
2312 The second argument, with the description, is included as part of the
2313 HTML @code{<title>} of the overall @file{manual/index.html} file.  It
2314 should include the name of the package being documented, as shown.
2315 @file{manual/index.html} is created by substitution from the file
2316 @file{gendocs_template}.  (Feel free to modify the generic template
2317 for your own purposes.)
2319 If you have several manuals, you'll need to run this script several
2320 times with different arguments, specifying a different output
2321 directory with @option{-o} each time, and moving all the output to
2322 your web page.  Then write (by hand) an overall index.html with links
2323 to them all.  For example:
2325 @smallexample
2326 cd .../texinfo/doc
2327 gendocs.sh --email bug-texinfo@@gnu.org -o texinfo texinfo "GNU Texinfo manual"
2328 gendocs.sh --email bug-texinfo@@gnu.org -o info info "GNU Info manual"
2329 gendocs.sh --email bug-texinfo@@gnu.org -o info-stnd info-stnd "GNU info-stnd manual"
2330 @end smallexample
2332 By default, the script uses @command{makeinfo} for generating HTML
2333 output.  If you prefer to use @command{texi2html}, use the
2334 @option{--texi2html} command line option, e.g.:
2336 @smallexample
2337 gendocs --texi2html -o texinfo texinfo "GNU Texinfo manual"
2338 @end smallexample
2340 The template files will automatically produce entries for additional
2341 HTML output generated by @command{texi2html} (i.e., split by sections
2342 and chapters).
2344 You can set the environment variables @env{MAKEINFO}, @env{TEXI2DVI},
2345 etc., to control the programs that get executed, and
2346 @env{GENDOCS_TEMPLATE_DIR} to control where the
2347 @file{gendocs_template} file is found.
2349 As usual, run @samp{gendocs.sh --help} for a description of all the
2350 options, environment variables, and more information.
2352 Please email bug reports, enhancement requests, or other
2353 correspondence about @command{gendocs} to @email{bug-texinfo@@gnu.org}.
2356 @node CVS Keywords in Web Pages
2357 @section CVS Keywords in Web Pages
2358 @cindex CVS keywords in web pages
2359 @cindex RCS keywords in web pages
2360 @cindex $ keywords in web pages
2361 @cindex web pages, and CVS keywords
2363 Since @code{www.gnu.org} works through CVS, CVS keywords in your
2364 manual, such as @code{@w{$}Log$}, need special treatment (even if you
2365 don't happen to maintain your manual in CVS).
2367 If these keywords end up in the generated output as literal strings,
2368 they will be expanded.  The most robust way to handle this is to turn
2369 off keyword expansion for such generated files.  For existing files,
2370 this is done with:
2372 @example
2373 cvs admin -ko @var{file1} @var{file2} ...
2374 @end example
2376 @noindent
2377 For new files:
2379 @example
2380 cvs add -ko @var{file1} @var{file2} ...
2381 @end example
2383 @c The CVS manual is now built with numeric references and no nonsplit
2384 @c form, so it's not worth trying to give a direct link.
2385 See the ``Keyword Substitution'' section in the CVS manual, available
2386 from @url{https://cvs.nongnu.org}.
2388 In Texinfo source, the recommended way to literally specify a
2389 ``dollar'' keyword is:
2391 @example
2392 @@w@{$@}Log$
2393 @end example
2395 The @code{@@w} prevents keyword expansion in the Texinfo source
2396 itself.  Also, @code{makeinfo} notices the @code{@@w} and generates
2397 output avoiding the literal keyword string.
2399 @node Ethical and Philosophical Consideration
2400 @chapter Ethical and Philosophical Consideration
2401 @cindex ethics
2402 @cindex philosophy
2404 The GNU project takes a strong stand for software freedom.  Many
2405 times, this means you'll need to avoid certain technologies when their
2406 use would conflict with our long-term goals.
2408 Software patents threaten the advancement of free software and freedom
2409 to program.  There are so many software patents in the US that any
2410 large program probably implements hundreds of patented techniques,
2411 unknown to the program's developers.  It would be futile and
2412 self-defeating to try to find and avoid all these patents.  But there
2413 are some patents which we know are likely to be used to threaten free
2414 software, so we make an effort to avoid the patented techniques.  If
2415 you are concerned about the danger of a patent and would like advice,
2416 write to @email{licensing@@gnu.org}, and we will try to help you get
2417 advice from a lawyer.
2419 Sometimes the GNU project takes a strong stand against a particular
2420 patented technology in order to encourage society to reject it.  That
2421 is why we rejected MP3 audio format in favor of the unpatented Ogg
2422 Vorbis format.  These patents have reportedly expired, but we still
2423 prefer Ogg formats to MP3 formats.  Please support this campaign by
2424 making Ogg Vorbis the preferred format for audio distribution
2425 in GNU packages and their web sites.
2427 We will consider using Ogg Opus at some point in the future.
2428 It is fine to distribute Ogg Opus files @emph{also}, but please
2429 continue distributing Ogg Vorbis, so as not to hurry users to change
2430 the software with which they listen to audio.
2432 We are unable to find a modern compressed video format that is truly
2433 safe from patents, so we use the Ogg Theora and WebM formats for which
2434 no licensing consortium has been set up.  GNU programs and their web
2435 sites should not distribute video in MPEG-2 or MPEG 4 formats.
2437 A GNU package should not recommend use of any non-free program, nor
2438 should it require a non-free program (such as a non-free compiler or
2439 IDE) to build.  Thus, a GNU package cannot be written in a programming
2440 language that does not have a free software implementation.  Now that
2441 GNU/Linux systems are widely available, all GNU packages should
2442 provide full functionality on a 100% free GNU/Linux system, and should
2443 not require any non-free software to build or function.
2444 The GNU Coding Standards say a lot more about this issue.
2446 Similarly, a GNU package should not require the use of non-free
2447 software, including JavaScript, for the coordination of its
2448 development.  For example, please don't use Transifex for translation
2449 of your software because it requires your translators to use non-free,
2450 JavaScript-based editing tools.  Instead, a service without any
2451 ethical concerns should be used, such as The Translation Project
2452 (@url{https://translationproject.org}).
2454 A GNU package should not refer the user to any non-free documentation
2455 for free software.  The need for free documentation to come with free
2456 software is now a major focus of the GNU project; to show that we are
2457 serious about the need for free documentation, we must not contradict
2458 our position by recommending use of documentation that isn't free.
2460 Please don't host discussions about your package in a service that
2461 requires nonfree software.  For instance, Google+ ``communities''
2462 require running a nonfree JavaScript program to post a message, so
2463 they can't be used in the Free World.  Google Groups has the same
2464 problem.  To host discussions there would be excluding people who live
2465 by free software principles.
2467 Of course, you can't order people not to use such services to talk
2468 with each other.  What you can do is not legitimize them, and use your
2469 influence to lead people away from them.  For instance, where you say
2470 where to have discussions related to the program, don't list such a
2471 place.
2473 Finally, new issues concerning the ethics of software freedom come up
2474 frequently.  We ask that GNU maintainers, at least on matters that
2475 pertain specifically to their package, stand with the rest of the GNU
2476 project when such issues come up.
2478 @node Humor
2479 @chapter Humor and GNU
2481 In GNU, we appreciate humor in our work.
2483 GNU is a project of hackers, and
2484 @uref{https://stallman.org/articles/on-hacking.html,,hacking means
2485 playful cleverness}.  Even the name ``GNU'' is an example of playful
2486 cleverness---it is a
2487 @uref{https://gnu.org/gnu/the-gnu-project.html,,recursive acronym for
2488 ``GNU's Not Unix.''}
2490 In that spirit, we prize occasional doses of humor in GNU packages.
2491 Humor is not mandatory in a GNU package; we do not tell maintainers,
2492 ``Make users smile, or else!''  But when maintainers do that, we too
2493 smile.
2495 Nowadays, our humor-positive approach occasionally encounters direct,
2496 blanket opposition.  Some people advocate, and even demand, removal of
2497 jokes from software packages simply because they are jokes.  We shrug
2498 off that point of view.
2500 Jokes are subject to the same sorts of issues and criticism as other
2501 writing.  Sometimes there is a valid objection to text which is
2502 humorous, so we do not defend every joke obtusely to the bitter end.
2503 But @emph{the fact that it is a joke} is not a valid objection.
2505 There are people who frown on anything that is slightly risqué or
2506 controversial, including jokes.  It would be a terrible shame for that
2507 attitude to prevail, so our policy is that the occasional risqué joke
2508 is ok.  GNU is a 21st century project, not a 19th.
2510 @node Other Politics
2511 @chapter Other Politics
2513 The GNU Project supports the cause of software freedom, that the users
2514 of computing should have control of their computing activities.  This
2515 requires that they have control of their software that does those
2516 activities, which in turn requires that they do these activities
2517 with free software and have the possibility of replacing any shared
2518 copies with their own copies.
2520 It also supports basic human rights in computing including use of the
2521 internet; opposing censorship, for instance.
2523 A GNU package should not seriously advocate any other political
2524 causes.  Not that the GNU Project opposes those other causes.  Rather,
2525 it is neutral on them, and GNU packages should be neutral too.
2527 @node Terminology
2528 @chapter Terminology Issues
2529 @cindex terminology
2531 This chapter explains a couple of issues of terminology which are
2532 important for correcting two widespread and important misunderstandings
2533 about GNU.
2535 @menu
2536 * Free Software and Open Source::
2537 * GNU and Linux::
2538 @end menu
2540 @node Free Software and Open Source
2541 @section Free Software and Open Source
2542 @cindex free software movement
2543 @cindex open source
2544 @cindex movement, free software
2545 @cindex development method, open source
2547 The terms ``free software'' and ``open source'', while describing
2548 almost the same category of software, stand for views based on
2549 fundamentally different values.  The free software movement is
2550 idealistic, and raises issues of freedom, ethics, principle and what
2551 makes for a good society.  The term open source, initiated in 1998, is
2552 associated with a philosophy which studiously avoids such questions.
2553 For a detailed explanation, see
2554 @url{https://www.gnu.org/philosophy/open-source-misses-the-point.html}.
2556 The GNU Project is aligned with the free software movement.  This
2557 doesn't mean that all GNU contributors and maintainers have to agree;
2558 your views on these issues are up to you, and you're entitled to express
2559 them when speaking for yourself.
2561 However, due to the much greater publicity that the term ``open source''
2562 receives, the GNU Project needs to overcome a widespread
2563 mistaken impression that GNU is @emph{and always was} an ``open
2564 source'' activity.  For this reason, please use the term ``free
2565 software'', not ``open source'' or ``FOSS'', in GNU software releases, GNU
2566 documentation, and announcements and articles that you publish in your
2567 role as the maintainer of a GNU package.  A reference to the URL given
2568 above, to explain the difference, is a useful thing to include as
2569 well.
2572 @node GNU and Linux
2573 @section GNU and Linux
2574 @cindex Linux
2575 @cindex GNU/Linux
2577 The GNU Project was formed to develop a free Unix-like operating system,
2578 GNU@.  The existence of this system is our major accomplishment.
2579 However, the widely used version of the GNU system, in which Linux is
2580 used as the kernel, is often called simply ``Linux''.  As a result, most
2581 users don't know about the GNU Project's major accomplishment---or more
2582 precisely, they know about it, but don't realize it is the GNU Project's
2583 accomplishment and reason for existence.  Even people who believe they
2584 know the real history often believe that the goal of GNU was to develop
2585 ``tools'' or ``utilities''.
2587 To correct this confusion, we have made a years-long effort to
2588 distinguish between Linux, the kernel that Linus Torvalds wrote, and
2589 GNU/Linux, the operating system that is the combination of GNU and
2590 Linux.  The resulting increased awareness of what the GNU Project has
2591 already done helps every activity of the GNU Project recruit more
2592 support and contributors.
2594 Please make this distinction consistently in GNU software releases, GNU
2595 documentation, and announcements and articles that you publish in your
2596 role as the maintainer of a GNU package.  If you want to explain the
2597 terminology and its reasons, you can refer to the URL
2598 @url{https://www.gnu.org/gnu/linux-and-gnu.html}.
2600 To make it clear that Linux is a kernel, not an operating system,
2601 please take care to avoid using the term ``Linux system'' in those
2602 materials.  If you want to have occasion to make a statement about
2603 systems in which the kernel is Linux, write ``systems in which the
2604 kernel is Linux'' or ``systems with Linux as the kernel.''  That
2605 explicitly contrasts the system and the kernel, and will help readers
2606 understand the difference between the two.  Please avoid simplified
2607 forms such as ``Linux-based systems'' because those fail to highlight
2608 the difference between the kernel and the system, and could encourage
2609 readers to overlook the distinction.
2611 To contrast the GNU system proper with GNU/Linux, you can call it
2612 ``GNU/Hurd'' or ``the GNU/Hurd system''.  However, when that contrast
2613 is not specifically the focus, please call it just ``GNU'' or ``the
2614 GNU system''.
2616 When referring to the collection of servers that is the higher level
2617 of the GNU kernel, please call it ``the Hurd'' or ``the GNU Hurd''.
2618 Note that this uses a space, not a slash.
2620 For more about this point, see
2621 @url{https://www.gnu.org/gnu/gnu-linux-faq.html}.
2623 @node Interviews and Speeches
2624 @chapter Interviews and Speeches
2626 Interviews and speeches about your package are an important channel
2627 for informing the public about the GNU system and the ideas of the
2628 free software movement.  Please avoid saying ``open source'' and avoid
2629 calling the GNU system ``Linux'', just as you would in the package
2630 itself (@pxref{Terminology}).  Likewise, avoid promoting nonfree
2631 programs (@pxref{References,,, standards, GNU Coding
2632 Standards}) as you would in the package itself.
2634 Many GNU users have erroneous ideas about GNU@.  Outside of our
2635 community, most people think it is Linux.  Please use your opportunity
2636 to set them straight.  Start the presentation with the answers to
2637 these basic questions:
2639 @itemize @bullet
2640 @item
2641 What GNU is (an operating system developed to be Unix-like and totally
2642 free software).  It is good to mention @url{https://www.gnu.org}.
2644 @item
2645 What free software is (the users control it, so it doesn't control
2646 them).  It is good to state the four freedoms and/or refer to
2647 @url{https://www.gnu.org/philosophy/free-sw.html}.
2649 @item
2650 What GNU/Linux is (Linux filled the last gap in GNU).  It is useful to
2651 refer to @url{https://www.gnu.org/gnu/linux-and-gnu.html}.
2653 @item
2654 What the GNU Project is (the project to develop GNU).
2656 @item
2657 How your package fits in (it's part of GNU, and the work is part of
2658 the GNU Project).
2659 @end itemize
2661 If you feel a social pressure not to say these things, you may be
2662 coming in contact with some who would prefer that these things not be
2663 said.  That's precisely when we need your support most.
2665 Please don't include advertisements or plugs for any company, product
2666 or service.  Even if the product would meet the standards for the FSF
2667 to endorse it, an ad for it is out of place in a presentation about a
2668 GNU package.  Likewise, please don't include company slogans.  Mention
2669 a company only when called for by the subject matter.
2671 A few GNU packages are actually business activities of a particular
2672 company.  In that case, it is ok to say so at the start.  Otherwise,
2673 please show that this is a project of the GNU Project, and avoid
2674 suggesting it is any company's project.
2676 If you are paid by a company to work on the GNU package, it is
2677 appropriate to thank the company in a discreet way, but please don't
2678 go beyond that.
2680 Before you do a speech or interview, please contact the GNU Project
2681 leadership.  We can give you advice on how to deal with various
2682 eventualities.
2684 When your interviews and speech recordings or transcript are posted,
2685 please tell us about them.  Then we can publicize them.
2687 Please post them in formats that are friendly to free software: not in
2688 Doc or Docx format, not with Flash, not with QuickTime, not with MP3,
2689 MPEG2 or MPEG4.  Plain text, HTML and PDF are good.
2691 @node Hosting
2692 @chapter Hosting
2693 @cindex CVS repository
2694 @cindex repository
2695 @cindex source repository
2696 @cindex version control system
2697 @cindex FTP site
2698 @cindex release site
2699 @cindex hosting
2701 We recommend using @code{savannah.gnu.org} for the source code
2702 repository for your package, but that's not required.  @xref{Old
2703 Versions}, for more information about Savannah.
2705 We strongly urge you to use @code{ftp.gnu.org} as the standard
2706 distribution site for releases.  Doing so makes it easier for
2707 developers and users to find the latest GNU releases.  However, it is
2708 ok to use another server if you wish, provided it allows access from
2709 the general public without limitation (for instance, without excluding
2710 any country).
2712 If you use a company's machine to hold the repository for your
2713 program, or as its release distribution site, please put this
2714 statement in a prominent place on the site, so as to prevent people
2715 from getting the wrong idea about the relationship between the package
2716 and the company:
2718 @smallexample
2719 The programs <list of them> hosted here are free software packages
2720 of the GNU Project, not products of <company name>.  We call them
2721 "free software" because you are free to copy and redistribute them,
2722 following the rules stated in the license of each package.  For more
2723 information, see https://www.gnu.org/philosophy/free-sw.html.
2725 If you are looking for service or support for GNU software, see
2726 https://www.gnu.org/gethelp/ for suggestions of where to ask.
2728 If you would like to contribute to the development of one of these
2729 packages, contact the package maintainer or the bug-reporting address
2730 of the package (which should be listed in the package itself), or look
2731 on www.gnu.org for more information on how to contribute.
2732 @end smallexample
2735 @node Donations
2736 @chapter Donations
2737 @cindex Donations, for packages
2738 @cindex Money, donated to packages
2740 As a maintainer, you might want to accept donations for your work,
2741 especially if you pay for any of your own hosting/development
2742 infrastructure.  Following is some text you can adapt to your own
2743 situation, and use on your package's web site, @file{README}, or
2744 in wherever way you find it useful:
2746 @smallexample
2747 We appreciate contributions of any size -- donations enable us to spend
2748 more time working on the project, and help cover our infrastructure
2749 expenses.
2751 If you'd like to make a small donation, please visit @var{url1} and do
2752 it through @var{payment-service}.  Since our project isn't a
2753 tax-exempt organization, we can't offer you a tax deduction, but for
2754 all donations over @var{amount1}, we'd be happy to recognize your
2755 contribution on @var{url2}.
2757 We are also happy to consider making particular improvements or
2758 changes, or giving specific technical assistance, in return for a
2759 substantial donation over @var{amount2}.  If you would like to discuss
2760 this possibility, write to us at @var{address}.
2762 Another possibility is to pay a software maintenance fee.  Again,
2763 write to us about this at @var{address} to discuss how much you want
2764 to pay and how much maintenance we can offer in return.  If you pay
2765 more than @var{amount1}, we can give you a document for your records.
2767 Thanks for your support!
2768 @end smallexample
2770 We don't recommend any specific payment service.  However, GNU
2771 developers should not use a service that requires them to sign a
2772 proprietary software license, such as Google's payment service.
2773 Please also avoid sites that requires users to run nonfree software in
2774 order to donate.  (This includes JavaScript software, so try it with
2775 LibreJS or with JavaScript disabled.)
2777 In the text you post on the site, please pay attention to the
2778 terminological issues we care about (@pxref{Terminology}).
2780 We have no objections to using Bitcoin to receive donations.
2782 The FSF can collect donations for a limited number of projects; if you
2783 want to propose that for your project, write to
2784 @email{maintainers@@gnu.org}.  The FSF is required to supervise the
2785 spending of these funds.
2787 Of course, it is also good to encourage people to join the FSF
2788 (@url{https://www.fsf.org}) or make a general donation, either instead
2789 of or as well as package-specific donations.
2792 @node Free Software Directory
2793 @chapter Free Software Directory
2794 @cindex Free Software Directory
2795 @cindex Directory, Free Software
2797 The Free Software Directory aims to be a complete list of free
2798 software packages, within certain criteria.  Every GNU package should
2799 be listed there, so please see
2800 @url{https://www.gnu.org/help/directory.html#adding-entries} for
2801 information on how to write an entry for your package.  Contact
2802 @email{bug-directory@@gnu.org} with any questions or suggestions for
2803 the Free Software Directory.
2806 @node Using the Proofreaders List
2807 @chapter Using the Proofreaders List
2808 @cindex proofreading
2810 If you want help finding errors in documentation,
2811 or help improving the quality of writing,
2812 or if you are not a native speaker of English
2813 and want help producing good English documentation,
2814 you can use the GNU proofreaders mailing list:
2815 @email{proofreaders@@gnu.org}.
2817 But be careful when you use the list,
2818 because there are over 200 people on it.
2819 If you simply ask everyone on the list to read your work,
2820 there will probably be tremendous duplication of effort
2821 by the proofreaders,
2822 and you will probably get the same errors reported 100 times.
2823 This must be avoided.
2825 Also, the people on the list do not want to get
2826 a large amount of mail from it.
2827 So do not ever ask people on the list to send mail to the list!
2829 Here are a few methods that seem reasonable to use:
2831 @itemize @bullet
2832 @item
2833 For something small, mail it to the list,
2834 and ask people to pick a random number from 1 to 20,
2835 and read it if the number comes out as 10.
2836 This way, assuming 50% response, some 5 people will read the piece.
2838 @item
2839 For a larger work, divide your work into around 20 equal-sized parts,
2840 tell people where to get it,
2841 and ask each person to pick randomly which part to read.
2843 Be sure to specify the random choice procedure;
2844 otherwise people will probably use a mental procedure
2845 that is not really random,
2846 such as ``pick a part near the middle'',
2847 and you will not get even coverage.
2849 You can either divide up the work physically, into 20 separate files,
2850 or describe a virtual division, such as by sections
2851 (if your work has approximately 20 sections).
2852 If you do the latter, be sure to be precise about it---for example,
2853 do you want the material before the first section heading
2854 to count as a section, or not?
2856 @item
2857 For a job needing special skills, send an explanation of it,
2858 and ask people to send you mail if they volunteer for the job.
2859 When you get enough volunteers, send another message to the list saying
2860 ``I have enough volunteers, no more please.''
2861 @end itemize
2864 @node GNU Free Documentation License
2865 @appendix GNU Free Documentation License
2867 @cindex FDL, GNU Free Documentation License
2868 @include fdl.texi
2871 @node Index
2872 @unnumbered Index
2873 @printindex cp
2875 @bye
2877 Local variables:
2878 eval: (add-hook 'before-save-hook 'time-stamp)
2879 time-stamp-start: "@set lastupdate "
2880 time-stamp-end: "$"
2881 time-stamp-format: "%:b %:d, %:y"
2882 compile-command: "make -C work.m"
2883 coding: utf-8
2884 End: