@c For double-sided printing, uncomment:
@c @setchapternewpage odd
@c This date is automagically updated when you save this file:
-@set lastupdate September 21, 2017
+@set lastupdate September 24, 2017
@c %**end of header
@dircategory GNU organization
the Texinfo source, but if that's difficult for you, you can make a
diff for some other version of this document, or propose it in any way
that makes it clear. The source repository for this document can be
-found at @url{http://savannah.gnu.org/projects/gnustandards}.
+found at @url{https://savannah.gnu.org/projects/gnustandards}.
@cindex @code{gnustandards-commit@@gnu.org} mailing list
If you want to receive diffs for every change to these GNU documents,
join the mailing list @code{gnustandards-commit@@gnu.org}, for
instance via the web interface at
-@url{http://lists.gnu.org/mailman/listinfo/gnustandards-commit}.
+@url{https://lists.gnu.org/mailman/listinfo/gnustandards-commit}.
Archives are also available there.
@cindex Piercy, Marge
project on behalf of RMS (Richard Stallman, the Chief GNUisance). If
you have any organizational questions or concerns you can contact the
committee at @email{gnu-advisory@@gnu.org}. See
-@url{http://www.gnu.org/contact/gnu-advisory.html} for the current
+@url{https://www.gnu.org/contact/gnu-advisory.html} for the current
committee members. Additional information is in
@file{/gd/gnuorg/advisory}.
If you find that any GNU computer systems (@code{fencepost.gnu.org},
@code{ftp.gnu.org}, @code{www.gnu.org}, @code{savannah.gnu.org},
@dots{}) seem to be down, you can check the current status at
-@url{http://quitter.se/fsfstatus}. Most likely the problem, if
+@url{https://quitter.se/fsfstatus}. Most likely the problem, if
it can be alleviated at the FSF end, is already being worked on.
@cindex sysadmin, FSF
available on the general GNU server, currently
@code{fencepost.gnu.org}. If you are the maintainer of a GNU package,
you should have an account there. If you don't have one already, see
-@url{http://www.gnu.org/software/README.accounts.html}. You can also
+@url{https://www.gnu.org/software/README.accounts.html}. You can also
ask for accounts for people who significantly help you in working on
the package. Such GNU login accounts include email
-(see @url{http://www.fsf.org/about/systems/sending-mail-via-fencepost}).
+(see @url{https://www.fsf.org/about/systems/sending-mail-via-fencepost}).
@end macro
@gdgnuorgtext{}
Other resources available to GNU maintainers are described at
-@url{http://www.gnu.org/software/devel.html}, as well as throughout
+@url{https://www.gnu.org/software/devel.html}, as well as throughout
this document. In brief:
@itemize @bullet
@email{maintainers@@gnu.org}.
We're happy to acknowledge all major contributors to GNU packages on
-the @url{http://www.gnu.org/people/people.html} web page. Please send
+the @url{https://www.gnu.org/people/people.html} web page. Please send
an entry for yourself to @email{webmasters@@gnu.org}, and feel free to
suggest it to other significant developers on your package.
more details, you should send one of the templates that are found in
the directory @file{/gd/gnuorg/Copyright/}; they are also available
from the @file{doc/Copyright/} directory of the @code{gnulib} project
-at @url{http://savannah.gnu.org/projects/gnulib}. This section
+at @url{https://savannah.gnu.org/projects/gnulib}. This section
explains which templates you should use in which circumstances.
@strong{Please don't use any of the templates except for those listed
here, and please don't change the wording.}
For translations of program strings (as used by GNU Gettext, for
example; @pxref{Internationalization,,, standards, GNU Coding
Standards}), use @file{disclaim.translation}. If you make use of the
-Translation Project (@url{http://translationproject.org}) facilities,
+Translation Project (@url{https://translationproject.org}) facilities,
please check with the TP coordinators that they have sent the
contributor the papers; if they haven't, then you should send the
papers. In any case, you should wait for the confirmation from the
Lesser GPL should be used (again, for the notice wording,
@pxref{License Notices for Code}). If a GNU library provides unique
functionality, however, the GNU GPL should be used.
-@url{http://www.gnu.org/licenses/why-not-lgpl.html} discusses this
+@url{https://www.gnu.org/licenses/why-not-lgpl.html} discusses this
strategic choice.
Some of these libraries need to work with programs released under
You should have received copies of the GNU General Public License and
the GNU Lesser General Public License along with this program. If
-not, see @url{http://www.gnu.org/licenses/}.
+not, see @url{https://www.gnu.org/licenses/}.
@end smallexample
For small packages, you can use ``This program'' instead of ``GNU
@itemize @bullet
@item
-@uref{http://www.gnu.org/licenses/}.
+@uref{https://www.gnu.org/licenses/}.
@item
The @code{gnulib} project on @code{savannah.gnu.org}, which you
can access via anonymous Git or CVS. See
-@uref{http://savannah.gnu.org/projects/gnulib}.
+@uref{https://savannah.gnu.org/projects/gnulib}.
@end itemize
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with this program. If not, see @url{http://www.gnu.org/licenses/}.
+along with this program. If not, see @url{https://www.gnu.org/licenses/}.
@end quotation
But in a small program which is just a few files, you can use
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with this program. If not, see @url{http://www.gnu.org/licenses/}.
+along with this program. If not, see @url{https://www.gnu.org/licenses/}.
@end quotation
In either case, for those few packages which use the Lesser GPL
(@pxref{Licensing of GNU Packages}), insert the word ``Lesser'' before
``General'' in @emph{all three} places.
-@url{http://@/www.gnu.org/@/licenses/@/gpl-howto.html} discusses application
+@url{https://@/www.gnu.org/@/licenses/@/gpl-howto.html} discusses application
the GPL in more detail.
@xref{GNU Sample Texts,,, texinfo, Texinfo}, for a full example in a
Texinfo manual, and see
-@url{http://www.gnu.org/licenses/fdl-howto.html} for more advice about
+@url{https://www.gnu.org/licenses/fdl-howto.html} for more advice about
how to use the GNU FDL.
If you write a manual that people might want to buy on paper, please
because these are the most important platforms for a GNU package. If
you don't have access to one of these platforms, as a GNU maintainer
you can get access to the general GNU login machine; see
-@url{http://www.gnu.org/software/README.accounts.html}.
+@url{https://www.gnu.org/software/README.accounts.html}.
Supporting other platforms is optional---we do it when that seems like
a good idea, but we don't consider it obligatory. If the users don't
To create and maintain simple aliases and unmanaged lists, you can
edit @file{/com/mailer/aliases} on the main GNU server. If you don't
have an account there, please read
-@url{http://www.gnu.org/software/README.accounts.html} (@pxref{GNU
+@url{https://www.gnu.org/software/README.accounts.html} (@pxref{GNU
Accounts and Resources}).
But if you don't want to learn how to do those things, you can ask
to make bug reports useful. Copying and adapting that could be very
useful for your package.
-@cindex @url{http://bugs.gnu.org}
+@cindex @url{https://bugs.gnu.org}
@cindex bug reports, email tracker for
@cindex bug reports, web tracker for
If you would like to use an email-based bug tracking system, see
-@url{http://bugs.gnu.org}; this can be connected with the regular
+@url{https://bugs.gnu.org}; this can be connected with the regular
bug-reporting address. Alternatively, if you would like to use a
web-based bug tracking system, Savannah supports this (@pxref{Old
Versions}), but please don't fail to accept bugs by regular email as
for source control and other package needs: @code{savannah.gnu.org}.
Savannah is managed by @email{savannah-hackers@@gnu.org}. For more
details on using and contributing to Savannah, see
-@url{http://savannah.gnu.org/maintenance}.
+@url{https://savannah.gnu.org/maintenance}.
It's not an absolute requirement, but all GNU maintainers are strongly
encouraged to take advantage of Savannah, as sharing such a central
@cindex @code{savannah-announce@@gnu.org} mailing list
If you do use Savannah, please subscribe to the
@email{savannah-announce@@gnu.org} mailing list
-(@url{http://lists.gnu.org/mailman/listinfo/savannah-announce}). This
+(@url{https://lists.gnu.org/mailman/listinfo/savannah-announce}). This
is a very low-volume list to keep Savannah users informed of system
upgrades, problems, and the like.
If you distribute them, please inform their users prominently that
those non-free platforms trample their freedom. It is useful to refer
them to
-@url{http://www.gnu.org/philosophy/free-software-even-more-important.html}.
+@url{https://www.gnu.org/philosophy/free-software-even-more-important.html}.
You can say, ``This program respects your freedom, but Windows does
not. To have freedom, you need to stop using Windows and other
software that denies your freedom.''
@enumerate
@item
-Create an account for yourself at @url{http://savannah.gnu.org}, if
+Create an account for yourself at @url{https://savannah.gnu.org}, if
you don't already have one. By the way, this is also needed to
-maintain the web pages at @url{http://www.gnu.org} for your project
+maintain the web pages at @url{https://www.gnu.org} for your project
(@pxref{Web Pages}).
@item
@code{gpg --keyserver keys.gnupg.net --send-keys @var{keyid}}, where
@var{keyid} is the eight hex digits reported by @code{gpg
--list-public-keys} on the @code{pub} line before the date. For full
-information about GPG, see @url{http://www.gnu.org/software/gpg}.
+information about GPG, see @url{https://www.gnu.org/software/gpg}.
@item
Compose a message with the following items in some @var{msgfile}.
One programmatic way to create and transfer the necessary files is to
use the @code{gnupload} script, which is available from the
@file{build-aux/} directory of the @code{gnulib} project at
-@url{http://savannah.gnu.org/projects/gnulib}. Run
+@url{https://savannah.gnu.org/projects/gnulib}. Run
@code{gnupload@tie{}--help} for a description and examples. (With
@code{gnupload}, you specify a destination such as
@samp{ftp.gnu.org:}@var{pkgname} rather than using the
@item
Your package's web page (normally
-@indicateurl{http://www.gnu.org/software/@var{package}/}).
+@indicateurl{https://www.gnu.org/software/@var{package}/}).
@item
Your package's download location (normally
@indicateurl{http://ftp.gnu.org/gnu/@var{package}/}). It is also
useful to mention the mirror list at
-@url{http://www.gnu.org/order/ftp.html}, and that
+@url{https://www.gnu.org/order/ftp.html}, and that
@indicateurl{http://ftpmirror.gnu.org/@var{package/}} will automatically
redirect to a nearby mirror.
You may find the @file{announce-gen} script useful for creating
announcements, which is available from the @file{build-aux/} directory
of the @code{gnulib} project at
-@url{http://savannah.gnu.org/projects/gnulib}.
+@url{https://savannah.gnu.org/projects/gnulib}.
@node Web Pages
Please write web pages about your package, and install them on
@code{www.gnu.org}. They should follow our usual standards for web
-pages (see @url{http://www.gnu.org/server/@/fsf-html-style-sheet.html}).
+pages (see @url{https://www.gnu.org/server/@/fsf-html-style-sheet.html}).
The overall goals are to support a wide variety of browsers, to focus
on information rather than flashy eye candy, and to keep the site
simple and uniform.
We encourage you to use the standard @code{www.gnu.org} template as
the basis for your pages:
-@url{http://www.gnu.org/server/@/standards/@/boilerplate-source.html}.
+@url{https://www.gnu.org/server/@/standards/@/boilerplate-source.html}.
Some GNU packages have just simple web pages, but the more information
you provide, the better. So please write as much as you usefully can,
on @code{www.gnu.org} link to that site.
Please follow the best practices of accessibility in your web pages
-(see @url{http://www.gnu.org/accessibility/accessibility.html}).
+(see @url{https://www.gnu.org/accessibility/accessibility.html}).
@menu
* Hosting for Web Pages::
the project on @code{savannah.gnu.org}. Then you can edit the pages
using CVS, using the separate ``web pages repository'' available on
Savannah, which corresponds to
-@indicateurl{http://www.gnu.org/software/@var{package}/}. You can
+@indicateurl{https://www.gnu.org/software/@var{package}/}. You can
keep your source files there too (using any of a variety of version
control systems), but you can use @code{savannah.gnu.org} only for
your gnu.org web pages if you wish; simply register a ``web-only''
If you use Savannah, you can use a special file named @file{.symlinks}
in order to create symbolic links, which are not supported in CVS.
For details, see
-@url{http://www.gnu.org/server/standards/README.webmastering.html#symlinks}.
+@url{https://www.gnu.org/server/standards/README.webmastering.html#symlinks}.
@node Freedom for Web Pages
because of patent problems (@pxref{Ethical and Philosophical
Consideration}). Although the GIF patents expired in 2006, using GIF
images is still not recommended, as the PNG and JPEG formats are
-generally superior. See @url{http://www.gnu.org/philosophy/gif.html}.
+generally superior. See @url{https://www.gnu.org/philosophy/gif.html}.
Please make sure that any Javascript code in your web pages is covered
by a free license, and has its license indicated in a way LibreJS can
-recognize. See @url{http://gnu.org/philosophy/javascript-trap.html}.
+recognize. See @url{https://gnu.org/philosophy/javascript-trap.html}.
If the Javascript in the page is minified, or for any other reason is
not the source code, it must point to its source code as described
there.
creating all these different formats and index pages easier.
We would like to list all GNU manuals on the page
-@url{http://www.gnu.org/manual}, so if yours isn't there, please send
+@url{https://www.gnu.org/manual}, so if yours isn't there, please send
mail to @code{webmasters@@gnu.org}, asking them to add yours, and they
will do so based on the contents of your @file{manual} directory.
development:
@smallformat
-@uref{http://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh}
-@uref{http://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template}
+@uref{https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh}
+@uref{https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template}
@end smallformat
There is also a minimalistic template, available from:
@smallformat
-@uref{http://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template_min}
+@uref{https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template_min}
@end smallformat
Invoke the script like this, in the directory containing the Texinfo
@c The CVS manual is now built with numeric references and no nonsplit
@c form, so it's not worth trying to give a direct link.
See the ``Keyword Substitution'' section in the CVS manual, available
-from @url{http://cvs.nongnu.org}.
+from @url{https://cvs.nongnu.org}.
In Texinfo source, the recommended way to literally specify a
``dollar'' keyword is:
makes for a good society. The term open source, initiated in 1998, is
associated with a philosophy which studiously avoids such questions.
For a detailed explanation, see
-@url{http://www.gnu.org/philosophy/open-source-misses-the-point.html}.
+@url{https://www.gnu.org/philosophy/open-source-misses-the-point.html}.
The GNU Project is aligned with the free software movement. This
doesn't mean that all GNU contributors and maintainers have to agree;
documentation, and announcements and articles that you publish in your
role as the maintainer of a GNU package. If you want to explain the
terminology and its reasons, you can refer to the URL
-@url{http://www.gnu.org/gnu/linux-and-gnu.html}.
+@url{https://www.gnu.org/gnu/linux-and-gnu.html}.
To make it clear that Linux is a kernel, not an operating system,
please take care to avoid using the term ``Linux system'' in those
Note that this uses a space, not a slash.
For more about this point, see
-@url{http://www.gnu.org/gnu/gnu-linux-faq.html}.
+@url{https://www.gnu.org/gnu/gnu-linux-faq.html}.
@node Interviews and Speeches
@chapter Interviews and Speeches
@itemize @bullet
@item
What GNU is (an operating system developed to be Unix-like and totally
-free software). It is good to mention @url{http://www.gnu.org}.
+free software). It is good to mention @url{https://www.gnu.org}.
@item
What free software is (the users control it, so it doesn't control
them). It is good to state the four freedoms and/or refer to
-@url{http://www.gnu.org/philosophy/free-sw.html}.
+@url{https://www.gnu.org/philosophy/free-sw.html}.
@item
What GNU/Linux is (Linux filled the last gap in GNU). It is useful to
-refer to @url{http://www.gnu.org/gnu/linux-and-gnu.html}.
+refer to @url{https://www.gnu.org/gnu/linux-and-gnu.html}.
@item
What the GNU Project is (the project to develop GNU).
of the GNU Project, not products of <company name>. We call them
"free software" because you are free to copy and redistribute them,
following the rules stated in the license of each package. For more
-information, see http://www.gnu.org/philosophy/free-sw.html.
+information, see https://www.gnu.org/philosophy/free-sw.html.
If you are looking for service or support for GNU software, see
-http://www.gnu.org/gethelp/ for suggestions of where to ask.
+https://www.gnu.org/gethelp/ for suggestions of where to ask.
If you would like to contribute to the development of one of these
packages, contact the package maintainer or the bug-reporting address
spending of these funds.
Of course, it is also good to encourage people to join the FSF
-(@url{http://www.fsf.org}) or make a general donation, either instead
+(@url{https://www.fsf.org}) or make a general donation, either instead
of or as well as package-specific donations.
The Free Software Directory aims to be a complete list of free
software packages, within certain criteria. Every GNU package should
be listed there, so please see
-@url{http://www.gnu.org/help/directory.html#adding-entries} for
+@url{https://www.gnu.org/help/directory.html#adding-entries} for
information on how to write an entry for your package. Contact
@email{bug-directory@@gnu.org} with any questions or suggestions for
the Free Software Directory.
@setfilename standards.info
@settitle GNU Coding Standards
@c This date is automagically updated when you save this file:
-@set lastupdate July 25, 2016
+@set lastupdate September 25, 2017
@c %**end of header
@dircategory GNU organization
Please don't use ``win'' as an abbreviation for Microsoft Windows in
GNU software or documentation. In hacker terminology, calling
-something a ``win'' is a form of praise. If you wish to praise
-Microsoft Windows when speaking on your own, by all means do so, but
-not in GNU software. Usually we write the name ``Windows'' in full,
-but when brevity is very important (as in file names and sometimes
-symbol names), we abbreviate it to ``w''. For instance, the files and
-functions in Emacs that deal with Windows start with @samp{w32}.
+something a ``win'' is a form of praise. You're free to praise
+Microsoft Windows on your own if you want, but please don't do so in
+GNU packages. Please write ``Windows'' in full, or abbreviate it to
+``w.'' @xref{System Portability}.
@node Design Advice
@chapter General Program Design
that will be useful on GNU and GNU/Linux, rather than on supporting
other incompatible systems.
-If you do support Windows, please do not abbreviate it as ``win''. In
-hacker terminology, calling something a ``win'' is a form of praise.
-You're free to praise Microsoft Windows on your own if you want, but
-please don't do this in GNU packages. Instead of abbreviating
-``Windows'' to ``win'', you can write it in full or abbreviate it to
-``woe'' or ``w''. In GNU Emacs, for instance, we use @samp{w32} in
-file names of Windows-specific files, but the macro for Windows
-conditionals is called @code{WINDOWSNT}.
+If you do support Windows, please do not abbreviate it as ``win''.
+@xref{Trademarks}.
+
+Usually we write the name ``Windows'' in full, but when brevity is
+very important (as in file names and some symbol names), we abbreviate
+it to ``w''. In GNU Emacs, for instance, we use @samp{w32} in file
+names of Windows-specific files, but the macro for Windows
+conditionals is called @code{WINDOWSNT}. In principle there could
+also be @samp{w64}.
It is a good idea to define the ``feature test macro''
@code{_GNU_SOURCE} when compiling your C files. When you compile on GNU
@code{int} will be less than 32 bits. We don't support 16-bit machines
in GNU.
-Similarly, don't make any effort to cater to the possibility that
-@code{long} will be smaller than predefined types like @code{size_t}.
-For example, the following code is ok:
+You need not cater to the possibility that @code{long} will be smaller
+than pointers and @code{size_t}. We know of one such platform: 64-bit
+programs on Microsoft Windows. If you care about making your package
+run on Windows using Mingw64, you would need to deal with 8-byte
+pointers and 4-byte @code{long}, which would break this code:
@example
printf ("size = %lu\n", (unsigned long) sizeof array);
printf ("diff = %ld\n", (long) (pointer2 - pointer1));
@end example
-1989 Standard C requires this to work, and we know of only one
-counterexample: 64-bit programs on Microsoft Windows. We will leave
-it to those who want to port GNU programs to that environment to
-figure out how to do it.
+Whether to support Mingw64, and Windows in general, in your package is
+your choice. The GNU Project doesn't say you have any responsibility to
+do so. Our goal is to replace proprietary systems, including Windows,
+not to enhance them. If people pressure you to make your program run
+on Windows, and you are not interested, you can respond with, ``Switch
+to GNU/Linux --- your freedom depends on it.''
Predefined file-size types like @code{off_t} are an exception: they are
longer than @code{long} on many platforms, so code like the above won't
call with no arguments.
Whenever possible, please stick to the active voice, avoiding the
-passive, and use the present tense, not the future teste. For
+passive, and use the present tense, not the future tense. For
instance, write ``The function @code{foo} returns a list containing
@var{a} and @var{b}'' rather than ``A list containing @var{a} and
@var{b} will be returned.'' One advantage of the active voice is it
@bye
Local variables:
-eval: (add-hook 'write-file-hooks 'time-stamp)
+eval: (add-hook 'write-file-functions 'time-stamp)
time-stamp-start: "@set lastupdate "
time-stamp-end: "$"
time-stamp-format: "%:b %:d, %:y"