123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- .. 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 <[email protected]>
- ---
- 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.
- 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.
|