.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later

.. _fdl:

******************************
GNU Free Documentation License
******************************


.. _fdl-preamble:

0. PREAMBLE
===========

The purpose of this License is to make a manual, textbook, or other
written document "free" in the sense of freedom: to assure everyone the
effective freedom to copy and redistribute it, with or without modifying
it, either commercially or noncommercially. Secondarily, this License
preserves for the author and publisher a way to get credit for their
work, while not being considered responsible for modifications made by
others.

This License is a kind of "copyleft", which means that derivative works
of the document must themselves be free in the same sense. It
complements the GNU General Public License, which is a copyleft license
designed for free software.

We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free program
should come with manuals providing the same freedoms that the software
does. But this License is not limited to software manuals; it can be
used for any textual work, regardless of subject matter or whether it is
published as a printed book. We recommend this License principally for
works whose purpose is instruction or reference.


.. _fdl-section1:

1. APPLICABILITY AND DEFINITIONS
================================


.. _fdl-document:

This License applies to any manual or other work that contains a notice
placed by the copyright holder saying it can be distributed under the
terms of this License. The "Document", below, refers to any such manual
or work. Any member of the public is a licensee, and is addressed as
"you".


.. _fdl-modified:

A "Modified Version" of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.


.. _fdl-secondary:

A "Secondary Section" is a named appendix or a front-matter section of
the :ref:`Document <fdl-document>` that deals exclusively with the
relationship of the publishers or authors of the Document to the
Document's overall subject (or to related matters) and contains nothing
that could fall directly within that overall subject. (For example, if
the Document is in part a textbook of mathematics, a Secondary Section
may not explain any mathematics.) The relationship could be a matter of
historical connection with the subject or with related matters, or of
legal, commercial, philosophical, ethical or political position
regarding them.


.. _fdl-invariant:

The "Invariant Sections" are certain
:ref:`Secondary Sections <fdl-secondary>` whose titles are designated,
as being those of Invariant Sections, in the notice that says that the
:ref:`Document <fdl-document>` is released under this License.


.. _fdl-cover-texts:

The "Cover Texts" are certain short passages of text that are listed, as
Front-Cover Texts or Back-Cover Texts, in the notice that says that the
:ref:`Document <fdl-document>` is released under this License.


.. _fdl-transparent:

A "Transparent" copy of the :ref:`Document <fdl-document>` means a
machine-readable copy, represented in a format whose specification is
available to the general public, whose contents can be viewed and edited
directly and straightforwardly with generic text editors or (for images
composed of pixels) generic paint programs or (for drawings) some widely
available drawing editor, and that is suitable for input to text
formatters or for automatic translation to a variety of formats suitable
for input to text formatters. A copy made in an otherwise Transparent
file format whose markup has been designed to thwart or discourage
subsequent modification by readers is not Transparent. A copy that is
not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII
without markup, Texinfo input format, LaTeX input format, SGML or XML
using a publicly available DTD, and standard-conforming simple HTML
designed for human modification. Opaque formats include PostScript, PDF,
proprietary formats that can be read and edited only by proprietary word
processors, SGML or XML for which the DTD and/or processing tools are
not generally available, and the machine-generated HTML produced by some
word processors for output purposes only.


.. _fdl-title-page:

The "Title Page" means, for a printed book, the title page itself, plus
such following pages as are needed to hold, legibly, the material this
License requires to appear in the title page. For works in formats which
do not have any title page as such, "Title Page" means the text near the
most prominent appearance of the work's title, preceding the beginning
of the body of the text.


.. _fdl-section2:

2. VERBATIM COPYING
===================

You may copy and distribute the :ref:`Document <fdl-document>` in any
medium, either commercially or noncommercially, provided that this
License, the copyright notices, and the license notice saying this
License applies to the Document are reproduced in all copies, and that
you add no other conditions whatsoever to those of this License. You may
not use technical measures to obstruct or control the reading or further
copying of the copies you make or distribute. However, you may accept
compensation in exchange for copies. If you distribute a large enough
number of copies you must also follow the conditions in
:ref:`section 3 <fdl-section3>`.

You may also lend copies, under the same conditions stated above, and
you may publicly display copies.


.. _fdl-section3:

3. COPYING IN QUANTITY
======================

If you publish printed copies of the :ref:`Document <fdl-document>`
numbering more than 100, and the Document's license notice requires
:ref:`Cover Texts <fdl-cover-texts>`, you must enclose the copies in
covers that carry, clearly and legibly, all these Cover Texts:
Front-Cover Texts on the front cover, and Back-Cover Texts on the back
cover. Both covers must also clearly and legibly identify you as the
publisher of these copies. The front cover must present the full title
with all words of the title equally prominent and visible. You may add
other material on the covers in addition. Copying with changes limited
to the covers, as long as they preserve the title of the
:ref:`Document <fdl-document>` and satisfy these conditions, can be
treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.

If you publish or distribute :ref:`Opaque <fdl-transparent>` copies of
the :ref:`Document <fdl-document>` numbering more than 100, you must
either include a machine-readable :ref:`Transparent <fdl-transparent>`
copy along with each Opaque copy, or state in or with each Opaque copy a
publicly-accessible computer-network location containing a complete
Transparent copy of the Document, free of added material, which the
general network-using public has access to download anonymously at no
charge using public-standard network protocols. If you use the latter
option, you must take reasonably prudent steps, when you begin
distribution of Opaque copies in quantity, to ensure that this
Transparent copy will remain thus accessible at the stated location
until at least one year after the last time you distribute an Opaque
copy (directly or through your agents or retailers) of that edition to
the public.

It is requested, but not required, that you contact the authors of the
:ref:`Document <fdl-document>` well before redistributing any large
number of copies, to give them a chance to provide you with an updated
version of the Document.


.. _fdl-section4:

4. MODIFICATIONS
================

You may copy and distribute a :ref:`Modified Version <fdl-modified>`
of the :ref:`Document <fdl-document>` under the conditions of sections
:ref:`2 <fdl-section2>` and :ref:`3 <fdl-section3>` above, provided
that you release the Modified Version under precisely this License, with
the Modified Version filling the role of the Document, thus licensing
distribution and modification of the Modified Version to whoever
possesses a copy of it. In addition, you must do these things in the
Modified Version:

-  **A.**
   Use in the :ref:`Title Page <fdl-title-page>` (and on the covers,
   if any) a title distinct from that of the
   :ref:`Document <fdl-document>`, and from those of previous versions
   (which should, if there were any, be listed in the History section of
   the Document). You may use the same title as a previous version if
   the original publisher of that version gives permission.

-  **B.**
   List on the :ref:`Title Page <fdl-title-page>`, as authors, one or
   more persons or entities responsible for authorship of the
   modifications in the :ref:`Modified Version <fdl-modified>`,
   together with at least five of the principal authors of the
   :ref:`Document <fdl-document>` (all of its principal authors, if it
   has less than five).

-  **C.**
   State on the :ref:`Title Page <fdl-title-page>` the name of the
   publisher of the :ref:`Modified Version <fdl-modified>`, as the
   publisher.

-  **D.**
   Preserve all the copyright notices of the
   :ref:`Document <fdl-document>`.

-  **E.**
   Add an appropriate copyright notice for your modifications adjacent
   to the other copyright notices.

-  **F.**
   Include, immediately after the copyright notices, a license notice
   giving the public permission to use the
   :ref:`Modified Version <fdl-modified>` under the terms of this
   License, in the form shown in the Addendum below.

-  **G.**
   Preserve in that license notice the full lists of
   :ref:`Invariant Sections <fdl-invariant>` and required
   :ref:`Cover Texts <fdl-cover-texts>` given in the
   :ref:`Document's <fdl-document>` license notice.

-  **H.**
   Include an unaltered copy of this License.

-  **I.**
   Preserve the section entitled "History", and its title, and add to it
   an item stating at least the title, year, new authors, and publisher
   of the :ref:`Modified Version <fdl-modified>` as given on the
   :ref:`Title Page <fdl-title-page>`. If there is no section entitled
   "History" in the :ref:`Document <fdl-document>`, create one stating
   the title, year, authors, and publisher of the Document as given on
   its Title Page, then add an item describing the Modified Version as
   stated in the previous sentence.

-  **J.**
   Preserve the network location, if any, given in the
   :ref:`Document <fdl-document>` for public access to a
   :ref:`Transparent <fdl-transparent>` copy of the Document, and
   likewise the network locations given in the Document for previous
   versions it was based on. These may be placed in the "History"
   section. You may omit a network location for a work that was
   published at least four years before the Document itself, or if the
   original publisher of the version it refers to gives permission.

-  **K.**
   In any section entitled "Acknowledgements" or "Dedications", preserve
   the section's title, and preserve in the section all the substance
   and tone of each of the contributor acknowledgements and/or
   dedications given therein.

-  **L.**
   Preserve all the :ref:`Invariant Sections <fdl-invariant>` of the
   :ref:`Document <fdl-document>`, unaltered in their text and in
   their titles. Section numbers or the equivalent are not considered
   part of the section titles.

-  **M.**
   Delete any section entitled "Endorsements". Such a section may not be
   included in the :ref:`Modified Version <fdl-modified>`.

-  **N.**
   Do not retitle any existing section as "Endorsements" or to conflict
   in title with any :ref:`Invariant Section <fdl-invariant>`.

If the :ref:`Modified Version <fdl-modified>` includes new
front-matter sections or appendices that qualify as
:ref:`Secondary Sections <fdl-secondary>` and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant. To do this, add their titles to the list
of :ref:`Invariant Sections <fdl-invariant>` in the Modified Version's
license notice. These titles must be distinct from any other section
titles.

You may add a section entitled "Endorsements", provided it contains
nothing but endorsements of your
:ref:`Modified Version <fdl-modified>` by various parties--for
example, statements of peer review or that the text has been approved by
an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a
:ref:`Front-Cover Text <fdl-cover-texts>`, and a passage of up to 25
words as a :ref:`Back-Cover Text <fdl-cover-texts>`, to the end of the
list of :ref:`Cover Texts <fdl-cover-texts>` in the
:ref:`Modified Version <fdl-modified>`. Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or through
arrangements made by) any one entity. If the
:ref:`Document <fdl-document>` already includes a cover text for the
same cover, previously added by you or by arrangement made by the same
entity you are acting on behalf of, you may not add another; but you may
replace the old one, on explicit permission from the previous publisher
that added the old one.

The author(s) and publisher(s) of the :ref:`Document <fdl-document>`
do not by this License give permission to use their names for publicity
for or to assert or imply endorsement of any
:ref:`Modified Version <fdl-modified>`.


.. _fdl-section5:

5. COMBINING DOCUMENTS
======================

You may combine the :ref:`Document <fdl-document>` with other
documents released under this License, under the terms defined in
:ref:`section 4 <fdl-section4>` above for modified versions, provided
that you include in the combination all of the
:ref:`Invariant Sections <fdl-invariant>` of all of the original
documents, unmodified, and list them all as Invariant Sections of your
combined work in its license notice.

The combined work need only contain one copy of this License, and
multiple identical :ref:`Invariant Sections <fdl-invariant>` may be
replaced with a single copy. If there are multiple Invariant Sections
with the same name but different contents, make the title of each such
section unique by adding at the end of it, in parentheses, the name of
the original author or publisher of that section if known, or else a
unique number. Make the same adjustment to the section titles in the
list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections entitled "History" in
the various original documents, forming one section entitled "History";
likewise combine any sections entitled "Acknowledgements", and any
sections entitled "Dedications". You must delete all sections entitled
"Endorsements."


.. _fdl-section6:

6. COLLECTIONS OF DOCUMENTS
===========================

You may make a collection consisting of the
:ref:`Document <fdl-document>` and other documents released under this
License, and replace the individual copies of this License in the
various documents with a single copy that is included in the collection,
provided that you follow the rules of this License for verbatim copying
of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.


.. _fdl-section7:

7. AGGREGATION WITH INDEPENDENT WORKS
=====================================

A compilation of the :ref:`Document <fdl-document>` or its derivatives
with other separate and independent documents or works, in or on a
volume of a storage or distribution medium, does not as a whole count as
a :ref:`Modified Version <fdl-modified>` of the Document, provided no
compilation copyright is claimed for the compilation. Such a compilation
is called an "aggregate", and this License does not apply to the other
self-contained works thus compiled with the Document , on account of
their being thus compiled, if they are not themselves derivative works
of the Document. If the :ref:`Cover Text <fdl-cover-texts>`
requirement of :ref:`section 3 <fdl-section3>` is applicable to these
copies of the Document, then if the Document is less than one quarter of
the entire aggregate, the Document's Cover Texts may be placed on covers
that surround only the Document within the aggregate. Otherwise they
must appear on covers around the whole aggregate.


.. _fdl-section8:

8. TRANSLATION
==============

Translation is considered a kind of modification, so you may distribute
translations of the :ref:`Document <fdl-document>` under the terms of
:ref:`section 4 <fdl-section4>`. Replacing
:ref:`Invariant Sections <fdl-invariant>` with translations requires
special permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections. You may include a
translation of this License provided that you also include the original
English version of this License. In case of a disagreement between the
translation and the original English version of this License, the
original English version will prevail.


.. _fdl-section9:

9. TERMINATION
==============

You may not copy, modify, sublicense, or distribute the
:ref:`Document <fdl-document>` except as expressly provided for under
this License. Any other attempt to copy, modify, sublicense or
distribute the Document is void, and will automatically terminate your
rights under this License. However, parties who have received copies, or
rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.


.. _fdl-section10:

10. FUTURE REVISIONS OF THIS LICENSE
====================================

The `Free Software Foundation <http://www.gnu.org/fsf/fsf.html>`__
may publish new, revised versions of the GNU Free Documentation License
from time to time. Such new versions will be similar in spirit to the
present version, but may differ in detail to address new problems or
concerns. See
`http://www.gnu.org/copyleft/ <http://www.gnu.org/copyleft>`__.

Each version of the License is given a distinguishing version number. If
the :ref:`Document <fdl-document>` specifies that a particular
numbered version of this License "or any later version" applies to it,
you have the option of following the terms and conditions either of that
specified version or of any later version that has been published (not
as a draft) by the Free Software Foundation. If the Document does not
specify a version number of this License, you may choose any version
ever published (not as a draft) by the Free Software Foundation.


.. _fdl-using:

Addendum
========

To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:

    Copyright © YEAR YOUR NAME.

    Permission is granted to copy, distribute and/or modify this
    document under the terms of the GNU Free Documentation License,
    Version 1.1 or any later version published by the Free Software
    Foundation; with the :ref:`Invariant Sections <fdl-invariant>`
    being LIST THEIR TITLES, with the
    :ref:`Front-Cover Texts <fdl-cover-texts>` being LIST, and with
    the :ref:`Back-Cover Texts <fdl-cover-texts>` being LIST. A copy
    of the license is included in the section entitled "GNU Free
    Documentation License".

If you have no :ref:`Invariant Sections <fdl-invariant>`, write "with
no Invariant Sections" instead of saying which ones are invariant. If
you have no :ref:`Front-Cover Texts <fdl-cover-texts>`, write "no
Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise
for :ref:`Back-Cover Texts <fdl-cover-texts>`.

If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of free
software license, such as the
`GNU General Public License <http://www.gnu.org/copyleft/gpl.html>`__,
to permit their use in free software.
