.. SPDX-License-Identifier: GPL-2.0

How to help improve kernel documentation
========================================

Documentation is an important part of any software-development project.
Good documentation helps to bring new developers in and helps established
developers work more effectively.  Without top-quality documentation, a lot
of time is wasted in reverse-engineering the code and making avoidable
mistakes.

Unfortunately, the kernel's documentation currently falls far short of what
it needs to be to support a project of this size and importance.

This guide is for contributors who would like to improve that situation.
Kernel documentation improvements can be made by developers at a variety of
skill levels; they are a relatively easy way to learn the kernel process in
general and find a place in the community.  The bulk of what follows is the
documentation maintainer's list of tasks that most urgently need to be
done.

The documentation TODO list
---------------------------

There is an endless list of tasks that need to be carried out to get our
documentation to where it should be.  This list contains a number of
important items, but is far from exhaustive; if you see a different way to
improve the documentation, please do not hold back!

Addressing warnings
~~~~~~~~~~~~~~~~~~~

The documentation build currently spews out an unbelievable number of
warnings.  When you have that many, you might as well have none at all;
people ignore them, and they will never notice when their work adds new
ones.  For this reason, eliminating warnings is one of the highest-priority
tasks on the documentation TODO list.  The task itself is reasonably
straightforward, but it must be approached in the right way to be
successful.

Warnings issued by a compiler for C code can often be dismissed as false
positives, leading to patches aimed at simply shutting the compiler up.
Warnings from the documentation build almost always point at a real
problem; making those warnings go away requires understanding the problem
and fixing it at its source.  For this reason, patches fixing documentation
warnings should probably not say "fix a warning" in the changelog title;
they should indicate the real problem that has been fixed.

Another important point is that documentation warnings are often created by
problems in kerneldoc comments in C code.  While the documentation
maintainer appreciates being copied on fixes for these warnings, the
documentation tree is often not the right one to actually carry those
fixes; they should go to the maintainer of the subsystem in question.

For example, in a documentation build I grabbed a pair of warnings nearly
at random::

  ./drivers/devfreq/devfreq.c:1818: warning: bad line:
  	- Resource-managed devfreq_register_notifier()
  ./drivers/devfreq/devfreq.c:1854: warning: bad line:
	- Resource-managed devfreq_unregister_notifier()

(The lines were split for readability).

A quick look at the source file named above turned up a couple of kerneldoc
comments that look like this::

  /**
   * devm_devfreq_register_notifier()
	  - Resource-managed devfreq_register_notifier()
   * @dev:	The devfreq user device. (parent of devfreq)
   * @devfreq:	The devfreq object.
   * @nb:		The notifier block to be unregistered.
   * @list:	DEVFREQ_TRANSITION_NOTIFIER.
   */

The problem is the missing "*", which confuses the build system's
simplistic idea of what C comment blocks look like.  This problem had been
present since that comment was added in 2016 — a full four years.  Fixing
it was a matter of adding the missing asterisks.  A quick look at the
history for that file showed what the normal format for subject lines is,
and ``scripts/get_maintainer.pl`` told me who should receive it (pass paths to
your patches as arguments to scripts/get_maintainer.pl).  The resulting patch
looked like this::

  [PATCH] PM / devfreq: Fix two malformed kerneldoc comments

  Two kerneldoc comments in devfreq.c fail to adhere to the required format,
  resulting in these doc-build warnings:

    ./drivers/devfreq/devfreq.c:1818: warning: bad line:
  	  - Resource-managed devfreq_register_notifier()
    ./drivers/devfreq/devfreq.c:1854: warning: bad line:
	  - Resource-managed devfreq_unregister_notifier()

  Add a couple of missing asterisks and make kerneldoc a little happier.

  Signed-off-by: Jonathan Corbet <corbet@lwn.net>
  ---
   drivers/devfreq/devfreq.c | 4 ++--
   1 file changed, 2 insertions(+), 2 deletions(-)

  diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
  index 57f6944d65a6..00c9b80b3d33 100644
  --- a/drivers/devfreq/devfreq.c
  +++ b/drivers/devfreq/devfreq.c
  @@ -1814,7 +1814,7 @@ static void devm_devfreq_notifier_release(struct device *dev, void *res)

   /**
    * devm_devfreq_register_notifier()
  -	- Resource-managed devfreq_register_notifier()
  + *	- Resource-managed devfreq_register_notifier()
    * @dev:	The devfreq user device. (parent of devfreq)
    * @devfreq:	The devfreq object.
    * @nb:		The notifier block to be unregistered.
  @@ -1850,7 +1850,7 @@ EXPORT_SYMBOL(devm_devfreq_register_notifier);

   /**
    * devm_devfreq_unregister_notifier()
  -	- Resource-managed devfreq_unregister_notifier()
  + *	- Resource-managed devfreq_unregister_notifier()
    * @dev:	The devfreq user device. (parent of devfreq)
    * @devfreq:	The devfreq object.
    * @nb:		The notifier block to be unregistered.
  --
  2.24.1

The entire process only took a few minutes.  Of course, I then found that
somebody else had fixed it in a separate tree, highlighting another lesson:
always check linux-next to see if a problem has been fixed before you dig
into it.

Other fixes will take longer, especially those relating to structure
members or function parameters that lack documentation.  In such cases, it
is necessary to work out what the role of those members or parameters is
and describe them correctly.  Overall, this task gets a little tedious at
times, but it's highly important.  If we can actually eliminate warnings
from the documentation build, then we can start expecting developers to
avoid adding new ones.

In addition to warnings from the regular documentation build, you can also
run ``make refcheckdocs`` to find references to nonexistent documentation
files.

Languishing kerneldoc comments
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Developers are encouraged to write kerneldoc comments for their code, but
many of those comments are never pulled into the docs build.  That makes
this information harder to find and, for example, makes Sphinx unable to
generate links to that documentation.  Adding ``kernel-doc`` directives to
the documentation to bring those comments in can help the community derive
the full value of the work that has gone into creating them.

The ``scripts/find-unused-docs.sh`` tool can be used to find these
overlooked comments.

Note that the most value comes from pulling in the documentation for
exported functions and data structures.  Many subsystems also have
kerneldoc comments for internal use; those should not be pulled into the
documentation build unless they are placed in a document that is
specifically aimed at developers working within the relevant subsystem.


Typo fixes
~~~~~~~~~~

Fixing typographical or formatting errors in the documentation is a quick
way to figure out how to create and send patches, and it is a useful
service.  I am always willing to accept such patches.  That said, once you
have fixed a few, please consider moving on to more advanced tasks, leaving
some typos for the next beginner to address.

Please note that some things are *not* typos and should not be "fixed":

 - Both American and British English spellings are allowed within the
   kernel documentation.  There is no need to fix one by replacing it with
   the other.

 - The question of whether a period should be followed by one or two spaces
   is not to be debated in the context of kernel documentation.  Other
   areas of rational disagreement, such as the "Oxford comma", are also
   off-topic here.

As with any patch to any project, please consider whether your change is
really making things better.

Ancient documentation
~~~~~~~~~~~~~~~~~~~~~

Some kernel documentation is current, maintained, and useful.  Some
documentation is ... not.  Dusty, old, and inaccurate documentation can
mislead readers and casts doubt on our documentation as a whole.  Anything
that can be done to address such problems is more than welcome.

Whenever you are working with a document, please consider whether it is
current, whether it needs updating, or whether it should perhaps be removed
altogether.  There are a number of warning signs that you can pay attention
to here:

 - References to 2.x kernels
 - Pointers to SourceForge repositories
 - Nothing but typo fixes in the history for several years
 - Discussion of pre-Git workflows

The best thing to do, of course, would be to bring the documentation
current, adding whatever information is needed.  Such work often requires
the cooperation of developers familiar with the subsystem in question, of
course.  Developers are often more than willing to cooperate with people
working to improve the documentation when asked nicely, and when their
answers are listened to and acted upon.

Some documentation is beyond hope; we occasionally find documents that
refer to code that was removed from the kernel long ago, for example.
There is surprising resistance to removing obsolete documentation, but we
should do that anyway.  Extra cruft in our documentation helps nobody.

In cases where there is perhaps some useful information in a badly outdated
document, and you are unable to update it, the best thing to do may be to
add a warning at the beginning.  The following text is recommended::

  .. warning ::
  	This document is outdated and in need of attention.  Please use
	this information with caution, and please consider sending patches
	to update it.

That way, at least our long-suffering readers have been warned that the
document may lead them astray.

Documentation coherency
~~~~~~~~~~~~~~~~~~~~~~~

The old-timers around here will remember the Linux books that showed up on
the shelves in the 1990s.  They were simply collections of documentation
files scrounged from various locations on the net.  The books have (mostly)
improved since then, but the kernel's documentation is still mostly built
on that model.  It is thousands of files, almost each of which was written
in isolation from all of the others.  We don't have a coherent body of
kernel documentation; we have thousands of individual documents.

We have been trying to improve the situation through the creation of
a set of "books" that group documentation for specific readers.  These
include:

 - Documentation/admin-guide/index.rst
 - Documentation/core-api/index.rst
 - Documentation/driver-api/index.rst
 - Documentation/userspace-api/index.rst

As well as this book on documentation itself.

Moving documents into the appropriate books is an important task and needs
to continue.  There are a couple of challenges associated with this work,
though.  Moving documentation files creates short-term pain for the people
who work with those files; they are understandably unenthusiastic about
such changes.  Usually the case can be made to move a document once; we
really don't want to keep shifting them around, though.

Even when all documents are in the right place, though, we have only
managed to turn a big pile into a group of smaller piles.  The work of
trying to knit all of those documents together into a single whole has not
yet begun.  If you have bright ideas on how we could proceed on that front,
we would be more than happy to hear them.

Stylesheet improvements
~~~~~~~~~~~~~~~~~~~~~~~

With the adoption of Sphinx we have much nicer-looking HTML output than we
once did.  But it could still use a lot of improvement; Donald Knuth and
Edward Tufte would be unimpressed.  That requires tweaking our stylesheets
to create more typographically sound, accessible, and readable output.

Be warned: if you take on this task you are heading into classic bikeshed
territory.  Expect a lot of opinions and discussion for even relatively
obvious changes.  That is, alas, the nature of the world we live in.

Non-LaTeX PDF build
~~~~~~~~~~~~~~~~~~~

This is a decidedly nontrivial task for somebody with a lot of time and
Python skills.  The Sphinx toolchain is relatively small and well
contained; it is easy to add to a development system.  But building PDF or
EPUB output requires installing LaTeX, which is anything but small or well
contained.  That would be a nice thing to eliminate.

The original hope had been to use the rst2pdf tool (https://rst2pdf.org/)
for PDF generation, but it turned out to not be up to the task.
Development work on rst2pdf seems to have picked up again in recent times,
though, which is a hopeful sign.  If a suitably motivated developer were to
work with that project to make rst2pdf work with the kernel documentation
build, the world would be eternally grateful.

Write more documentation
~~~~~~~~~~~~~~~~~~~~~~~~

Naturally, there are massive parts of the kernel that are severely
underdocumented.  If you have the knowledge to document a specific kernel
subsystem and the desire to do so, please do not hesitate to do some
writing and contribute the result to the kernel.  Untold numbers of kernel
developers and users will thank you.
