.. -*- coding: utf-8; mode: rst -*-

.. _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 dispbibute
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.
