mirror of
https://github.com/QubesOS/qubes-doc.git
synced 2024-12-19 04:34:42 -05:00
736 lines
30 KiB
ReStructuredText
736 lines
30 KiB
ReStructuredText
|
=========================
|
|||
|
Documentation style guide
|
|||
|
=========================
|
|||
|
|
|||
|
|
|||
|
*Also see* :doc:`how to edit the documentation </developer/general/how-to-edit-the-documentation>` *.*
|
|||
|
|
|||
|
Qubes OS documentation pages are stored as plain text Markdown files in
|
|||
|
the `qubes-doc <https://github.com/QubesOS/qubes-doc>`__ repository. By
|
|||
|
cloning and regularly pulling from this repo, users can maintain their
|
|||
|
own up-to-date offline copy of all Qubes documentation rather than
|
|||
|
relying solely on the web.
|
|||
|
|
|||
|
The documentation is a volunteer community effort. People like you are
|
|||
|
constantly working to make it better. If you notice something that can
|
|||
|
be fixed or improved, please :doc:`edit the documentation </developer/general/how-to-edit-the-documentation>`!
|
|||
|
|
|||
|
This page explains the standards we follow for writing, formatting, and
|
|||
|
organizing the documentation. Please follow these guidelines and
|
|||
|
conventions when editing the documentation. For the standards governing
|
|||
|
the website as a whole, please see the :doc:`website style guide </developer/general/website-style-guide>`.
|
|||
|
|
|||
|
Markdown conventions
|
|||
|
--------------------
|
|||
|
|
|||
|
|
|||
|
All the documentation is written in Markdown for maximum accessibility.
|
|||
|
When making contributions, please observe the following style
|
|||
|
conventions. If you’re not familiar with Markdown syntax,
|
|||
|
`this <https://daringfireball.net/projects/markdown/>`__ is a great
|
|||
|
resource.
|
|||
|
|
|||
|
Hyperlink syntax
|
|||
|
^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
Use non-reference-style links like `` `website <https://example.com/>`__``.
|
|||
|
Do *not* use reference-style links like ``[website][example]``,
|
|||
|
``[website][]`` or ``[website]``. This facilitates the localization
|
|||
|
process.
|
|||
|
|
|||
|
Relative vs. absolute links
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
Always use relative rather than absolute paths for internal website
|
|||
|
links. For example, use ``/doc/documentation-style-guide/`` instead of
|
|||
|
``https://www.qubes-os.org/doc/documentation-style-guide/``.
|
|||
|
|
|||
|
You may use absolute URLs in the following cases:
|
|||
|
|
|||
|
- External links
|
|||
|
|
|||
|
- URLs that appear inside code blocks (e.g., in comments and document
|
|||
|
templates, and the plain text reproductions of
|
|||
|
`QSBs <https://www.qubes-os.org/security/qsb/>`__ and `Canaries <https://www.qubes-os.org/security/canary/>`__),
|
|||
|
since they’re not hyperlinks
|
|||
|
|
|||
|
- Git repo files like ``README.md`` and ``CONTRIBUTING.md``, since
|
|||
|
they’re not part of the website itself but rather of the auxiliary
|
|||
|
infrastructure supporting the website
|
|||
|
|
|||
|
|
|||
|
|
|||
|
This rule is important because using absolute URLs for internal website
|
|||
|
links breaks:
|
|||
|
|
|||
|
- Serving the website offline
|
|||
|
|
|||
|
- Website localization
|
|||
|
|
|||
|
- Generating offline documentation
|
|||
|
|
|||
|
- Automatically redirecting Tor Browser visitors to the correct page on
|
|||
|
the onion service mirror
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Image linking
|
|||
|
^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
See :ref:`how to add images <developer/general/how-to-edit-the-documentation:how to add images>` for
|
|||
|
the required syntax. This will make the image a hyperlink to the image
|
|||
|
file, allowing the reader to click on the image in order to view the
|
|||
|
full image by itself. This is important. Following best practices, our
|
|||
|
website has a responsive design, which allows the website to render
|
|||
|
appropriately across all screen sizes. When viewing this page on a
|
|||
|
smaller screen, such as on a mobile device, the image will automatically
|
|||
|
shrink down to fit the screen. If visitors cannot click on the image to
|
|||
|
view it in full size, then, depending on their device, they may have no
|
|||
|
way see the details in the image clearly.
|
|||
|
|
|||
|
In addition, make sure to link only to images in the
|
|||
|
`qubes-attachment <https://github.com/QubesOS/qubes-attachment>`__
|
|||
|
repository. Do not attempt to link to images hosted on other websites.
|
|||
|
|
|||
|
HTML and CSS
|
|||
|
^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
Do not write HTML inside Markdown documents (except in rare, unavoidable
|
|||
|
cases, such as `alerts <#alerts>`__). In particular, never include HTML
|
|||
|
or CSS for styling, formatting, or white space control. That belongs in
|
|||
|
the (S)CSS files instead.
|
|||
|
|
|||
|
Headings
|
|||
|
^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
Do not use ``h1`` headings (single ``#`` or ``======`` underline). These
|
|||
|
are automatically generated from the ``title:`` line in the YAML front
|
|||
|
matter.
|
|||
|
|
|||
|
Use Atx-style syntax for headings: ``##h2``, ``### h3``, etc. Do not use
|
|||
|
underlining syntax (``-----``).
|
|||
|
|
|||
|
Indentation
|
|||
|
^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
Use spaces instead of tabs. Use hanging indentations where appropriate.
|
|||
|
|
|||
|
Lists
|
|||
|
^^^^^
|
|||
|
|
|||
|
|
|||
|
If appropriate, make numerals in numbered lists match between Markdown
|
|||
|
source and HTML output. Some users read the Markdown source directly,
|
|||
|
and this makes numbered lists easier to follow.
|
|||
|
|
|||
|
Code blocks
|
|||
|
^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
When writing code blocks, use `syntax highlighting <https://github.github.com/gfm/#info-string>`__ where
|
|||
|
possible (see
|
|||
|
`here <https://github.com/jneen/rouge/wiki/List-of-supported-languages-and-lexers>`__
|
|||
|
for a list of supported languages). Use ``[...]`` for anything omitted.
|
|||
|
|
|||
|
Line wrapping
|
|||
|
^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
Do not hard wrap text, except where necessary (e.g., inside code
|
|||
|
blocks).
|
|||
|
|
|||
|
Do not use Markdown syntax for styling
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
For example, there is a common temptation to use block quotations
|
|||
|
(created by beginning lines with the ``>`` character) in order to
|
|||
|
stylistically distinguish some portion of text from the rest of the
|
|||
|
document, e.g.:
|
|||
|
|
|||
|
.. code:: bash
|
|||
|
|
|||
|
> Note: This is an important note!
|
|||
|
|
|||
|
|
|||
|
|
|||
|
This renders as:
|
|||
|
|
|||
|
Note: This is an important note!
|
|||
|
|
|||
|
There are two problems with this:
|
|||
|
|
|||
|
1. It is a violation of the `separation of content and presentation <https://en.wikipedia.org/wiki/Separation_of_content_and_presentation>`__,
|
|||
|
since it abuses markup syntax in order to achieve unintended
|
|||
|
stylistic results. The Markdown (and HTML, if any) should embody the
|
|||
|
*content* of the documentation, while the *presentation* is handled
|
|||
|
by (S)CSS.
|
|||
|
|
|||
|
2. It is an abuse of quotation syntax for text that is not actually a
|
|||
|
quotation. (You are not quoting anyone here. You’re just telling the
|
|||
|
reader to note something and trying to draw their attention to your
|
|||
|
note visually.)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Instead, an example of an appropriate way to stylistically distinguish a
|
|||
|
portion of text is by using `alerts <#alerts>`__. Consider also that
|
|||
|
extra styling and visual distinction may not even be necessary. In most
|
|||
|
cases, traditional writing methods are perfectly sufficient, e.g.,:
|
|||
|
|
|||
|
.. code:: bash
|
|||
|
|
|||
|
**Note:** This is an important note.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
This renders as:
|
|||
|
|
|||
|
**Note:** This is an important note.
|
|||
|
|
|||
|
Alerts
|
|||
|
^^^^^^
|
|||
|
|
|||
|
|
|||
|
Alerts are sections of HTML used to draw the reader’s attention to
|
|||
|
important information, such as warnings, and for stylistic purposes.
|
|||
|
They are typically styled as colored text boxes, usually accompanied by
|
|||
|
icons. Alerts should generally be used somewhat sparingly, so as not to
|
|||
|
cause `alert fatigue <https://en.wikipedia.org/wiki/Alarm_fatigue>`__
|
|||
|
and since they must be written in HTML instead of Markdown, which makes
|
|||
|
the source less readable and more difficult to work with for
|
|||
|
localization and automation purposes. Here are examples of several types
|
|||
|
of alerts and their recommended icons:
|
|||
|
|
|||
|
.. code:: bash
|
|||
|
|
|||
|
<div class="alert alert-success" role="alert">
|
|||
|
<i class="fa fa-check-circle"></i>
|
|||
|
<b>Did you know?</b> The Qubes OS installer is completely offline. It doesn't
|
|||
|
even load any networking drivers, so there is no possibility of
|
|||
|
internet-based data leaks or attacks during the installation process.
|
|||
|
</div>
|
|||
|
|
|||
|
<div class="alert alert-info" role="alert">
|
|||
|
<i class="fa fa-info-circle"></i>
|
|||
|
<b>Note:</b> Using Rufus to create the installation medium means that you <a
|
|||
|
href="https://github.com/QubesOS/qubes-issues/issues/2051">won't be able</a>
|
|||
|
to choose the "Test this media and install Qubes OS" option mentioned in the
|
|||
|
example below. Instead, choose the "Install Qubes OS" option.
|
|||
|
</div>
|
|||
|
|
|||
|
<div class="alert alert-warning" role="alert">
|
|||
|
<i class="fa fa-exclamation-circle"></i>
|
|||
|
<b>Note:</b> Qubes OS is not meant to be installed inside a virtual machine
|
|||
|
as a guest hypervisor. In other words, <b>nested virtualization</b> is not
|
|||
|
supported. In order for a strict compartmentalization to be enforced, Qubes
|
|||
|
OS needs to be able to manage the hardware directly.
|
|||
|
</div>
|
|||
|
|
|||
|
<div class="alert alert-danger" role="alert">
|
|||
|
<i class="fa fa-exclamation-triangle"></i>
|
|||
|
<b>Warning:</b> Qubes has no control over what happens on your computer
|
|||
|
before you install it. No software can provide security if it is installed on
|
|||
|
compromised hardware. Do not install Qubes on a computer you don't trust. See
|
|||
|
<a href="/doc/install-security/">installation security</a> for more
|
|||
|
information.
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
These render as:
|
|||
|
|
|||
|
.. note::
|
|||
|
Did you know? The Qubes OS installer is completely offline. It
|
|||
|
doesn’t even load any networking drivers, so there is no possibility
|
|||
|
of internet-based data leaks or attacks during the installation
|
|||
|
process.
|
|||
|
|
|||
|
|
|||
|
.. note::
|
|||
|
Note: Using Rufus to create the installation medium means that you
|
|||
|
won’t be able to choose the “Test this media and install Qubes OS”
|
|||
|
option mentioned in the example below. Instead, choose the “Install
|
|||
|
Qubes OS” option.
|
|||
|
|
|||
|
|
|||
|
.. warning::
|
|||
|
Note: Qubes OS is not meant to be installed inside a virtual machine
|
|||
|
as a guest hypervisor. In other words, nested virtualization is not
|
|||
|
supported. In order for a strict compartmentalization to be enforced,
|
|||
|
Qubes OS needs to be able to manage the hardware directly.
|
|||
|
|
|||
|
|
|||
|
.. DANGER::
|
|||
|
Warning: Qubes has no control over what happens on your computer
|
|||
|
before you install it. No software can provide security if it is
|
|||
|
installed on compromised hardware. Do not install Qubes on a computer
|
|||
|
you don’t trust. See installation security for more information.
|
|||
|
|
|||
|
|
|||
|
Writing guidelines
|
|||
|
------------------
|
|||
|
|
|||
|
|
|||
|
Correct use of terminology
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
Familiarize yourself with the terms defined in the
|
|||
|
:doc:`glossary </user/reference/glossary>`. Use these terms consistently and
|
|||
|
accurately throughout your writing.
|
|||
|
|
|||
|
Sentence case in headings
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
Use sentence case (rather than title case) in headings for the reasons
|
|||
|
explained
|
|||
|
`here <https://www.sallybagshaw.com.au/articles/sentence-case-v-title-case/>`__.
|
|||
|
In particular, since the authorship of the Qubes documentation is
|
|||
|
decentralized and widely distributed among users from around the world,
|
|||
|
many contributors come from regions with different conventions for
|
|||
|
implementing title case, not to mention that there are often differing
|
|||
|
style guide recommendations even within a single region. It is much
|
|||
|
easier for all of us to implement sentence case consistently across our
|
|||
|
growing body of pages, which is very important for managing the ongoing
|
|||
|
maintenance burden and sustainability of the documentation.
|
|||
|
|
|||
|
Writing command-line examples
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
When providing command-line examples:
|
|||
|
|
|||
|
- Tell the reader where to open a terminal (dom0 or a specific domU),
|
|||
|
and show the command along with its output (if any) in a code block,
|
|||
|
e.g.:
|
|||
|
|
|||
|
.. code:: bash
|
|||
|
|
|||
|
Open a terminal in dom0 and run:
|
|||
|
```
|
|||
|
$ cd test
|
|||
|
$ echo Hello
|
|||
|
Hello
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
- Precede each command with the appropriate command prompt: At a
|
|||
|
minimum, the prompt should contain a trailing ``#`` (for the user
|
|||
|
``root``) or ``$`` (for other users) on Linux systems and ``>`` on
|
|||
|
Windows systems, respectively.
|
|||
|
|
|||
|
- Don’t try to add comments inside the code block. For example, *don’t*
|
|||
|
do this:
|
|||
|
|
|||
|
.. code:: bash
|
|||
|
|
|||
|
Open a terminal in dom0 and run:
|
|||
|
```
|
|||
|
# Navigate to the new directory
|
|||
|
$ cd test
|
|||
|
# Generate a greeting
|
|||
|
$ echo Hello
|
|||
|
Hello
|
|||
|
```
|
|||
|
|
|||
|
The ``#`` symbol preceding each comment is ambiguous with a root
|
|||
|
command prompt. Instead, put your comments *outside* of the code
|
|||
|
block in normal prose.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Variable names in commands
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
Syntactically distinguish variables in commands. For example, this is
|
|||
|
ambiguous:
|
|||
|
|
|||
|
.. code:: bash
|
|||
|
|
|||
|
$ qvm-run --dispvm=disposable-template --service qubes.StartApp+xterm
|
|||
|
|
|||
|
|
|||
|
|
|||
|
It should instead be:
|
|||
|
|
|||
|
.. code:: bash
|
|||
|
|
|||
|
$ qvm-run --dispvm=<DISPOSABLE_TEMPLATE> --service qubes.StartApp+xterm
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Note that we syntactically distinguish variables in three ways:
|
|||
|
|
|||
|
1. Surrounding them in angled brackets (``< >``)
|
|||
|
|
|||
|
2. Using underscores (``_``) instead of spaces between words
|
|||
|
|
|||
|
3. Using all capital letters
|
|||
|
|
|||
|
|
|||
|
|
|||
|
We have observed that many novices make the mistake of typing the
|
|||
|
surrounding angled brackets (``< >``) on the command line, even after
|
|||
|
substituting the desired real value between them. Therefore, in
|
|||
|
documentation aimed at novices, we also recommend clarifying that the
|
|||
|
angled brackets should not be typed. This can be accomplished in one of
|
|||
|
several ways:
|
|||
|
|
|||
|
- Explicitly say something like “without the angled brackets.”
|
|||
|
|
|||
|
- Provide an example command using real values that excludes the angled
|
|||
|
brackets.
|
|||
|
|
|||
|
- If you know that almost all users will want to use (or should use) a
|
|||
|
specific command containing all real values and no variables, you
|
|||
|
might consider providing exactly that command and forgoing the
|
|||
|
version with variables. Novices may not realize which parts of the
|
|||
|
command they can substitute with different values, but if you’ve
|
|||
|
correctly judged that they should use the command you’ve provided as
|
|||
|
is, then this shouldn’t matter.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Capitalization of "qube"
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
We introduced the term :ref:`“qube” <user/reference/glossary:qube>` as a
|
|||
|
user-friendly alternative to the term :ref:`“virtual machine” (“VM”) <user/reference/glossary:vm>` in the context of Qubes OS. Nonetheless,
|
|||
|
“qube” is a common noun like the words “compartment” and “container.”
|
|||
|
Therefore, in English, “qube” follows the standard capitalization rules
|
|||
|
for common nouns. For example, “I have three qubes” is correct, while “I
|
|||
|
have three Qubes” is incorrect. Like other common nouns, “qube” should
|
|||
|
still be capitalized at the beginnings of sentences, the beginnings of
|
|||
|
sentence-case headings, and in title-case headings. Note, however, that
|
|||
|
starting a sentence with the plural of “qube” (e.g., “Qubes can be shut
|
|||
|
down…”) can be ambiguous, since it may not be clear whether the referent
|
|||
|
is a plurality of qubes, :ref:`Qubes OS <user/reference/glossary:qubes os>`, or even
|
|||
|
the Qubes OS Project itself. Hence, it is generally a good idea to
|
|||
|
rephrase such sentences in order to avoid this ambiguity.
|
|||
|
|
|||
|
Many people feel a strong temptation to capitalize the word “qube” all
|
|||
|
the time, like a proper noun, perhaps because it’s a new and unfamiliar
|
|||
|
term that’s closely associated with a particular piece of software
|
|||
|
(namely, Qubes OS). However, these factors are not relevant to the
|
|||
|
capitalization rules of English. In fact, it’s not unusual for new
|
|||
|
common nouns to be introduced into English, especially in the context of
|
|||
|
technology. For example, “blockchain” is a relatively recent technical
|
|||
|
term that’s a common noun. Why is it a common noun rather than a proper
|
|||
|
noun? Because proper nouns refer to *particular* people, places, things,
|
|||
|
and ideas. There are many different blockchains. However, even when
|
|||
|
there was just one, the word still denoted a collection of things rather
|
|||
|
than a particular thing. It happened to be the case that there was only
|
|||
|
one member in that collection at the time. For example, if there
|
|||
|
happened to be only one tree in the world, that wouldn’t change the way
|
|||
|
we capitalize sentences like, “John sat under a tree.” Intuitively, it
|
|||
|
makes sense that the addition and removal of objects from the world
|
|||
|
shouldn’t cause published books to become orthographicallly incorrect
|
|||
|
while sitting on their shelves.
|
|||
|
|
|||
|
Accordingly, the reason “qube” is a common noun rather than a proper
|
|||
|
noun is because it doesn’t refer to any one specific thing (in this
|
|||
|
case, any one specific virtual machine). Rather, it’s the term for any
|
|||
|
virtual machine in a Qubes OS installation. (Technically, while qubes
|
|||
|
are currently implemented as virtual machines, Qubes OS is independent
|
|||
|
of its underlying compartmentalization technology. Virtual machines
|
|||
|
could be replaced with a different technology, and qubes would still be
|
|||
|
called “qubes.”)
|
|||
|
|
|||
|
I have several qubes in my Qubes OS installation, and you have several
|
|||
|
in yours. Every Qubes OS user has their own set of qubes, just as each
|
|||
|
of us lives in some neighborhood on some street. Yet we aren’t tempted
|
|||
|
to treat words like “neighborhood” or “street” as proper nouns (unless,
|
|||
|
of course, they’re part of a name, like “Acorn Street”). Again, while
|
|||
|
this might seem odd because “qube” is a new word that we invented, that
|
|||
|
doesn’t change how English works. After all, *every* word was a new word
|
|||
|
that someone invented at some point (otherwise we wouldn’t have any
|
|||
|
words at all). We treat “telephone,” “computer,” “network,” “program,”
|
|||
|
and so on as common nouns, even though those were all new technological
|
|||
|
inventions in the not-too-distant past (on a historical scale, at
|
|||
|
least). So, we shouldn’t allow ourselves to be confused by irrelevant
|
|||
|
factors, like the fact that the inventors happened to be *us* or that
|
|||
|
the invention was *recent* or is not in widespread use among humanity.
|
|||
|
|
|||
|
English language conventions
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
For the sake of consistency and uniformity, the Qubes documentation aims
|
|||
|
to follow the conventions of American English, where applicable. (Please
|
|||
|
note that this is an arbitrary convention for the sake consistency and
|
|||
|
not a value judgment about the relative merits of British versus
|
|||
|
American English.)
|
|||
|
|
|||
|
Organizational guidelines
|
|||
|
-------------------------
|
|||
|
|
|||
|
|
|||
|
Do not duplicate documentation
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
Duplicating documentation is almost always a bad idea. There are many
|
|||
|
reasons for this. The main one is that almost all documentation has to
|
|||
|
be updated as some point. When similar documentation appears in more
|
|||
|
than one place, it is very easy for it to get updated in one place but
|
|||
|
not the others (perhaps because the person updating it doesn’t realize
|
|||
|
it’s in more than once place). When this happens, the documentation as a
|
|||
|
whole is now inconsistent, and the outdated documentation becomes a
|
|||
|
trap, especially for novice users. Such traps are often more harmful
|
|||
|
than if the documentation never existed in the first place. The solution
|
|||
|
is to **link** to existing documentation rather than duplicating it.
|
|||
|
There are some exceptions to this policy (e.g., information that is
|
|||
|
certain not to change for a very long time), but they are rare.
|
|||
|
|
|||
|
Core vs. external documentation
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
Core documentation resides in the `Qubes OS Project’s official repositories <https://github.com/QubesOS/>`__, mainly in
|
|||
|
`qubes-doc <https://github.com/QubesOS/qubes-doc>`__. External
|
|||
|
documentation can be anywhere else (such as forums, community websites,
|
|||
|
and blogs), but there is an especially large collection in the `Qubes Forum <https://forum.qubes-os.org/docs>`__. External documentation
|
|||
|
should not be submitted to
|
|||
|
`qubes-doc <https://github.com/QubesOS/qubes-doc>`__. If you’ve written
|
|||
|
a piece of documentation that is not appropriate for
|
|||
|
`qubes-doc <https://github.com/QubesOS/qubes-doc>`__, we encourage you
|
|||
|
to submit it to the `Qubes Forum <https://forum.qubes-os.org/docs>`__
|
|||
|
instead. However, *linking* to external documentation from
|
|||
|
`qubes-doc <https://github.com/QubesOS/qubes-doc>`__ is perfectly fine.
|
|||
|
Indeed, the maintainers of the `Qubes Forum <https://forum.qubes-os.org/>`__ should regularly submit PRs
|
|||
|
against the documentation index (see :ref:`How to edit the documentation index <developer/general/how-to-edit-the-documentation:how to edit the documentation index>`)
|
|||
|
to add and update Qubes Forum links in the :ref:`“External documentation” <index:external documentation>` section of the
|
|||
|
documentation table of contents.
|
|||
|
|
|||
|
The main difference between **core** (or **official**) and **external**
|
|||
|
(or **community** or **unofficial**) documentation is whether it
|
|||
|
documents software that is officially written and maintained by the
|
|||
|
Qubes OS Project. The purpose of this distinction is to keep the core
|
|||
|
docs maintainable and high-quality by limiting them to the software
|
|||
|
output by the Qubes OS Project. In other words, we take responsibility
|
|||
|
for documenting all of the software we put out into the world, but it
|
|||
|
doesn’t make sense for us to take on the responsibility of documenting
|
|||
|
or maintaining documentation for anything else. For example, Qubes OS
|
|||
|
may use a popular Linux distribution for an official
|
|||
|
:doc:`TemplateVM </user/templates/templates>`. However, it would not make sense for a
|
|||
|
comparatively small project like ours, with modest funding and a lean
|
|||
|
workforce, to attempt to document software belonging to a large,
|
|||
|
richly-funded project with an army of paid and volunteer contributors,
|
|||
|
especially when they probably already have documentation of their own.
|
|||
|
This is particularly true when it comes to Linux in general. Although
|
|||
|
many users who are new to Qubes are also new to Linux, it makes
|
|||
|
absolutely no sense for our comparatively tiny project to try to
|
|||
|
document Linux in general when there is already a plethora of
|
|||
|
documentation out there.
|
|||
|
|
|||
|
Many contributors do not realize that there is a significant amount of
|
|||
|
work involved in *maintaining* documentation after it has been written.
|
|||
|
They may wish to write documentation and submit it to the core docs, but
|
|||
|
they see only their own writing process and fail to consider that it
|
|||
|
will have to be kept up-to-date and consistent with the rest of the docs
|
|||
|
for years afterward. Submissions to the core docs also have to :ref:`undergo a review process <developer/general/how-to-edit-the-documentation:security>` to
|
|||
|
ensure accuracy before being merged, which takes up valuable time from
|
|||
|
the team. We aim to maintain high quality standards for the core docs
|
|||
|
(style and mechanics, formatting), which also takes up a lot of time. If
|
|||
|
the documentation involves anything external to the Qubes OS Project
|
|||
|
(such as a website, platform, program, protocol, framework, practice, or
|
|||
|
even a reference to a version number), the documentation is likely to
|
|||
|
become outdated when that external thing changes. It’s also important to
|
|||
|
periodically review and update this documentation, especially when a new
|
|||
|
Qubes release comes out. Periodically, there may be technical or policy
|
|||
|
changes that affect all the core documentation. The more documentation
|
|||
|
there is relative to maintainers, the harder all of this will be. Since
|
|||
|
there are many more people who are willing to write documentation than
|
|||
|
to maintain it, these individually small incremental additions amount to
|
|||
|
a significant maintenance burden for the project.
|
|||
|
|
|||
|
On the positive side, we consider the existence of community
|
|||
|
documentation to be a sign of a healthy ecosystem, and this is quite
|
|||
|
common in the software world. The community is better positioned to
|
|||
|
write and maintain documentation that applies, combines, and simplifies
|
|||
|
the official documentation, e.g., tutorials that explain how to install
|
|||
|
and use various programs in Qubes, how to create custom VM setups, and
|
|||
|
introductory tutorials that teach basic Linux concepts and commands in
|
|||
|
the context of Qubes. In addition, just because the Qubes OS Project has
|
|||
|
officially written and maintains some flexible framework, such as
|
|||
|
``qrexec``, it does not make sense to include every tutorial that says
|
|||
|
“here’s how to do something cool with ``qrexec``” in the core docs. Such
|
|||
|
tutorials generally also belong in the community documentation.
|
|||
|
|
|||
|
See `#4693 <https://github.com/QubesOS/qubes-issues/issues/4693>`__ for
|
|||
|
more background information.
|
|||
|
|
|||
|
Release-specific documentation
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
*See* `#5308 <https://github.com/QubesOS/qubes-issues/issues/5308>`__
|
|||
|
*for pending changes to this policy.*
|
|||
|
|
|||
|
We maintain only one set of documentation for Qubes OS. We do not
|
|||
|
maintain a different set of documentation for each release of Qubes. Our
|
|||
|
single set of Qubes OS documentation is updated on a continual, rolling
|
|||
|
basis. Our first priority is to document all **current, stable releases** of Qubes. Our second priority is to document the next,
|
|||
|
upcoming release (if any) that is currently in the beta or release
|
|||
|
candidate stage.
|
|||
|
|
|||
|
In cases where a documentation page covers functionality that differs
|
|||
|
considerably between Qubes OS releases, the page should be subdivided
|
|||
|
into clearly-labeled sections that cover the different functionality in
|
|||
|
different releases (examples below).
|
|||
|
|
|||
|
In general, avoid mentioning specific Qubes versions in the body text of
|
|||
|
documentation, as these references rapidly go out of date and become
|
|||
|
misleading to readers.
|
|||
|
|
|||
|
Incorrect Example
|
|||
|
^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
.. code:: bash
|
|||
|
|
|||
|
## How to Foo
|
|||
|
|
|||
|
Fooing is the process by which one foos. There are both general and specific
|
|||
|
versions of fooing, which vary in usefulness depending on your goals, but for
|
|||
|
the most part, all fooing is fooing.
|
|||
|
|
|||
|
To foo in Qubes 3.2:
|
|||
|
|
|||
|
$ qvm-foo <foo-bar>
|
|||
|
|
|||
|
Note that this does not work in Qubes 4.0, where there is a special widget
|
|||
|
for fooing, which you can find in the lower-right corner of the screen in
|
|||
|
the Foo Manager. Alternatively, you can use the more general `qubes-baz`
|
|||
|
command introduced in 4.0:
|
|||
|
|
|||
|
$ qubes-baz --foo <bar>
|
|||
|
|
|||
|
Once you foo, make sure to close the baz before fooing the next bar.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Correct Example
|
|||
|
^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
|
|||
|
.. code:: bash
|
|||
|
|
|||
|
## Qubes 3.2
|
|||
|
|
|||
|
### How to Foo
|
|||
|
|
|||
|
Fooing is the process by which one foos. There are both general and specific
|
|||
|
versions of fooing, which vary in usefulness depending on your goals, but for
|
|||
|
the most part, all fooing is fooing.
|
|||
|
|
|||
|
To foo:
|
|||
|
|
|||
|
$ qvm-foo <foo-bar>
|
|||
|
|
|||
|
Once you foo, make sure to close the baz before fooing the next bar.
|
|||
|
|
|||
|
## Qubes 4.0
|
|||
|
|
|||
|
### How to Foo
|
|||
|
|
|||
|
Fooing is the process by which one foos. There are both general and specific
|
|||
|
versions of fooing, which vary in usefulness depending on your goals, but for
|
|||
|
the most part, all fooing is fooing.
|
|||
|
|
|||
|
There is a special widget for fooing, which you can find in the lower-right
|
|||
|
corner of the screen in the Foo Manager. Alternatively, you can use the
|
|||
|
general `qubes-baz` command:
|
|||
|
|
|||
|
$ qubes-baz --foo <bar>
|
|||
|
|
|||
|
Once you foo, make sure to close the baz before fooing the next bar.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Subdividing the page into clearly-labeled sections for each release has
|
|||
|
several benefits:
|
|||
|
|
|||
|
- It preserves good content for older (but still supported) releases.
|
|||
|
Many documentation contributors are also people who prefer to use the
|
|||
|
latest release. Many of them are tempted to *replace* existing
|
|||
|
content that applies to an older, supported release with content that
|
|||
|
applies only to the latest release. This is somewhat understandable.
|
|||
|
Since they only use the latest release, they may be focused on their
|
|||
|
own experience, and they may even regard the older release as
|
|||
|
deprecated, even when it’s actually still supported. However,
|
|||
|
allowing this replacement of content would do a great disservice to
|
|||
|
those who still rely on the older, supported release. In many cases,
|
|||
|
these users value the stability and reliability of the older,
|
|||
|
supported release. With the older, supported release, there has been
|
|||
|
more time to fix bugs and make improvements in both the software and
|
|||
|
the documentation. Consequently, much of the documentation content
|
|||
|
for this release may have gone through several rounds of editing,
|
|||
|
review, and revision. It would be a tragedy for this content to
|
|||
|
vanish while the very set of users who most prize stability and
|
|||
|
reliability are depending on it.
|
|||
|
|
|||
|
- It’s easy for readers to quickly find the information they’re looking
|
|||
|
for, since they can go directly to the section that applies to their
|
|||
|
release.
|
|||
|
|
|||
|
- It’s hard for readers to miss information they need, since it’s all
|
|||
|
in one place. In the incorrect example, information that the reader
|
|||
|
needs could be in any paragraph in the entire document, and there’s
|
|||
|
no way to tell without reading the entire page. In the correct
|
|||
|
example, the reader can simply skim the headings in order to know
|
|||
|
which parts of the page need to be read and which can be safely
|
|||
|
ignored. The fact that some content is repeated in the two
|
|||
|
release-specific sections is not a problem, since no reader has to
|
|||
|
read the same thing twice. Moreover, as one release gets updated,
|
|||
|
it’s likely that the documentation for that release will also be
|
|||
|
updated. Therefore, content that is initially duplicated between
|
|||
|
release-specific sections will not necessarily stay that way, and
|
|||
|
this is a good thing: We want the documentation for a release that
|
|||
|
*doesn’t* change to stay the same, and we want the documentation for
|
|||
|
a release that *does* change to change along with the software.
|
|||
|
|
|||
|
- It’s easy for documentation contributors and maintainers to know
|
|||
|
which file to edit and update, since there’s only one page for all
|
|||
|
Qubes OS releases. Initially creating the new headings and
|
|||
|
duplicating content that applies to both is only a one-time cost for
|
|||
|
each page, and many pages don’t even require this treatment, since
|
|||
|
they apply to all currently-supported Qubes OS releases.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
By contrast, an alternative approach, such as segregating the
|
|||
|
documentation into two different branches, would mean that contributions
|
|||
|
that apply to both Qubes releases would only end up in one branch,
|
|||
|
unless someone remembered to manually submit the same thing to the other
|
|||
|
branch and actually made the effort to do so. Most of the time, this
|
|||
|
wouldn’t happen. When it did, it would mean a second pull request that
|
|||
|
would have to be reviewed. Over time, the different branches would
|
|||
|
diverge in non-release-specific content. Good general content that was
|
|||
|
submitted only to one branch would effectively disappear once that
|
|||
|
release was deprecated. (Even if it were still on the website, no one
|
|||
|
would look at it, since it would explicitly be in the subdirectory of a
|
|||
|
deprecated release, and there would be a motivation to remove it from
|
|||
|
the website so that search results wouldn’t be populated with
|
|||
|
out-of-date information.)
|
|||
|
|
|||
|
For further discussion about release-specific documentation in Qubes,
|
|||
|
see
|
|||
|
`here <https://groups.google.com/d/topic/qubes-users/H9BZX4K9Ptk/discussion>`__.
|
|||
|
|
|||
|
Git conventions
|
|||
|
---------------
|
|||
|
|
|||
|
|
|||
|
Please follow our :ref:`Git commit message guidelines <developer/code/coding-style:commit message guidelines>`.
|