Skip to content

Commit d96574b

Browse files
author
Jonathan Corbet
committed
Add a document on how to contribute to the documentation
This is mostly a collection of thoughts for how people who want to help out can make the docs better. Hopefully the world will respond with a flurry of useful patches. Acked-by: Jani Nikula <[email protected]> Reviewed-by: Matthew Wilcox (Oracle) <[email protected]> Reviewed-by: Randy Dunlap <[email protected]> Signed-off-by: Jonathan Corbet <[email protected]>
1 parent bcac386 commit d96574b

File tree

2 files changed

+295
-0
lines changed

2 files changed

+295
-0
lines changed
Lines changed: 294 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,294 @@
1+
.. SPDX-License-Identifier: GPL-2.0
2+
How to help improve kernel documentation
3+
========================================
4+
5+
Documentation is an important part of any software-development project.
6+
Good documentation helps to bring new developers in and helps established
7+
developers work more effectively. Without top-quality documentation, a lot
8+
of time is wasted in reverse-engineering the code and making avoidable
9+
mistakes.
10+
11+
Unfortunately, the kernel's documentation currently falls far short of what
12+
it needs to be to support a project of this size and importance.
13+
14+
This guide is for contributors who would like to improve that situation.
15+
Kernel documentation improvements can be made by developers at a variety of
16+
skill levels; they are a relatively easy way to learn the kernel process in
17+
general and find a place in the community. The bulk of what follows is the
18+
documentation maintainer's list of tasks that most urgently need to be
19+
done.
20+
21+
The documentation TODO list
22+
---------------------------
23+
24+
There is an endless list of tasks that need to be carried out to get our
25+
documentation to where it should be. This list contains a number of
26+
important items, but is far from exhaustive; if you see a different way to
27+
improve the documentation, please do not hold back!
28+
29+
Addressing warnings
30+
~~~~~~~~~~~~~~~~~~~
31+
32+
The documentation build currently spews out an unbelievable number of
33+
warnings. When you have that many, you might as well have none at all;
34+
people ignore them, and they will never notice when their work adds new
35+
ones. For this reason, eliminating warnings is one of the highest-priority
36+
tasks on the documentation TODO list. The task itself is reasonably
37+
straightforward, but it must be approached in the right way to be
38+
successful.
39+
40+
Warnings issued by a compiler for C code can often be dismissed as false
41+
positives, leading to patches aimed at simply shutting the compiler up.
42+
Warnings from the documentation build almost always point at a real
43+
problem; making those warnings go away requires understanding the problem
44+
and fixing it at its source. For this reason, patches fixing documentation
45+
warnings should probably not say "fix a warning" in the changelog title;
46+
they should indicate the real problem that has been fixed.
47+
48+
Another important point is that documentation warnings are often created by
49+
problems in kerneldoc comments in C code. While the documentation
50+
maintainer appreciates being copied on fixes for these warnings, the
51+
documentation tree is often not the right one to actually carry those
52+
fixes; they should go to the maintainer of the subsystem in question.
53+
54+
For example, in a documentation build I grabbed a pair of warnings nearly
55+
at random::
56+
57+
./drivers/devfreq/devfreq.c:1818: warning: bad line:
58+
- Resource-managed devfreq_register_notifier()
59+
./drivers/devfreq/devfreq.c:1854: warning: bad line:
60+
- Resource-managed devfreq_unregister_notifier()
61+
62+
(The lines were split for readability).
63+
64+
A quick look at the source file named above turned up a couple of kerneldoc
65+
comments that look like this::
66+
67+
/**
68+
* devm_devfreq_register_notifier()
69+
- Resource-managed devfreq_register_notifier()
70+
* @dev: The devfreq user device. (parent of devfreq)
71+
* @devfreq: The devfreq object.
72+
* @nb: The notifier block to be unregistered.
73+
* @list: DEVFREQ_TRANSITION_NOTIFIER.
74+
*/
75+
76+
The problem is the missing "*", which confuses the build system's
77+
simplistic idea of what C comment blocks look like. This problem had been
78+
present since that comment was added in 2016 — a full four years. Fixing
79+
it was a matter of adding the missing asterisks. A quick look at the
80+
history for that file showed what the normal format for subject lines is,
81+
and ``scripts/get_maintainer.pl`` told me who should receive it. The
82+
resulting patch looked like this::
83+
84+
[PATCH] PM / devfreq: Fix two malformed kerneldoc comments
85+
86+
Two kerneldoc comments in devfreq.c fail to adhere to the required format,
87+
resulting in these doc-build warnings:
88+
89+
./drivers/devfreq/devfreq.c:1818: warning: bad line:
90+
- Resource-managed devfreq_register_notifier()
91+
./drivers/devfreq/devfreq.c:1854: warning: bad line:
92+
- Resource-managed devfreq_unregister_notifier()
93+
94+
Add a couple of missing asterisks and make kerneldoc a little happier.
95+
96+
Signed-off-by: Jonathan Corbet <[email protected]>
97+
---
98+
drivers/devfreq/devfreq.c | 4 ++--
99+
1 file changed, 2 insertions(+), 2 deletions(-)
100+
101+
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
102+
index 57f6944d65a6..00c9b80b3d33 100644
103+
--- a/drivers/devfreq/devfreq.c
104+
+++ b/drivers/devfreq/devfreq.c
105+
@@ -1814,7 +1814,7 @@ static void devm_devfreq_notifier_release(struct device *dev, void *res)
106+
107+
/**
108+
* devm_devfreq_register_notifier()
109+
- - Resource-managed devfreq_register_notifier()
110+
+ * - Resource-managed devfreq_register_notifier()
111+
* @dev: The devfreq user device. (parent of devfreq)
112+
* @devfreq: The devfreq object.
113+
* @nb: The notifier block to be unregistered.
114+
@@ -1850,7 +1850,7 @@ EXPORT_SYMBOL(devm_devfreq_register_notifier);
115+
116+
/**
117+
* devm_devfreq_unregister_notifier()
118+
- - Resource-managed devfreq_unregister_notifier()
119+
+ * - Resource-managed devfreq_unregister_notifier()
120+
* @dev: The devfreq user device. (parent of devfreq)
121+
* @devfreq: The devfreq object.
122+
* @nb: The notifier block to be unregistered.
123+
--
124+
2.24.1
125+
126+
The entire process only took a few minutes. Of course, I then found that
127+
somebody else had fixed it in a separate tree, highlighting another lesson:
128+
always check linux-next to see if a problem has been fixed before you dig
129+
into it.
130+
131+
Other fixes will take longer, especially those relating to structure
132+
members or function parameters that lack documentation. In such cases, it
133+
is necessary to work out what the role of those members or parameters is
134+
and describe them correctly. Overall, this task gets a little tedious at
135+
times, but it's highly important. If we can actually eliminate warnings
136+
from the documentation build, then we can start expecting developers to
137+
avoid adding new ones.
138+
139+
Languishing kerneldoc comments
140+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
141+
142+
Developers are encouraged to write kerneldoc comments for their code, but
143+
many of those comments are never pulled into the docs build. That makes
144+
this information harder to find and, for example, makes Sphinx unable to
145+
generate links to that documentation. Adding ``kernel-doc`` directives to
146+
the documentation to bring those comments in can help the community derive
147+
the full value of the work that has gone into creating them.
148+
149+
The ``scripts/find-unused-docs.sh`` tool can be used to find these
150+
overlooked comments.
151+
152+
Note that the most value comes from pulling in the documentation for
153+
exported functions and data structures. Many subsystems also have
154+
kerneldoc comments for internal use; those should not be pulled into the
155+
documentation build unless they are placed in a document that is
156+
specifically aimed at developers working within the relevant subsystem.
157+
158+
159+
Typo fixes
160+
~~~~~~~~~~
161+
162+
Fixing typographical or formatting errors in the documentation is a quick
163+
way to figure out how to create and send patches, and it is a useful
164+
service. I am always willing to accept such patches. That said, once you
165+
have fixed a few, please consider moving on to more advanced tasks, leaving
166+
some typos for the next beginner to address.
167+
168+
Please note that some things are *not* typos and should not be "fixed":
169+
170+
- Both American and British English spellings are allowed within the
171+
kernel documentation. There is no need to fix one by replacing it with
172+
the other.
173+
174+
- The question of whether a period should be followed by one or two spaces
175+
is not to be debated in the context of kernel documentation. Other
176+
areas of rational disagreement, such as the "Oxford comma", are also
177+
off-topic here.
178+
179+
As with any patch to any project, please consider whether your change is
180+
really making things better.
181+
182+
Ancient documentation
183+
~~~~~~~~~~~~~~~~~~~~~
184+
185+
Some kernel documentation is current, maintained, and useful. Some
186+
documentation is ... not. Dusty, old, and inaccurate documentation can
187+
mislead readers and casts doubt on our documentation as a whole. Anything
188+
that can be done to address such problems is more than welcome.
189+
190+
Whenever you are working with a document, please consider whether it is
191+
current, whether it needs updating, or whether it should perhaps be removed
192+
altogether. There are a number of warning signs that you can pay attention
193+
to here:
194+
195+
- References to 2.x kernels
196+
- Pointers to SourceForge repositories
197+
- Nothing but typo fixes in the history for several years
198+
- Discussion of pre-Git workflows
199+
200+
The best thing to do, of course, would be to bring the documentation
201+
current, adding whatever information is needed. Such work often requires
202+
the cooperation of developers familiar with the subsystem in question, of
203+
course. Developers are often more than willing to cooperate with people
204+
working to improve the documentation when asked nicely, and when their
205+
answers are listened to and acted upon.
206+
207+
Some documentation is beyond hope; we occasionally find documents that
208+
refer to code that was removed from the kernel long ago, for example.
209+
There is surprising resistance to removing obsolete documentation, but we
210+
should do that anyway. Extra cruft in our documentation helps nobody.
211+
212+
In cases where there is perhaps some useful information in a badly outdated
213+
document, and you are unable to update it, the best thing to do may be to
214+
add a warning at the beginning. The following text is recommended::
215+
216+
.. warning ::
217+
This document is outdated and in need of attention. Please use
218+
this information with caution, and please consider sending patches
219+
to update it.
220+
221+
That way, at least our long-suffering readers have been warned that the
222+
document may lead them astray.
223+
224+
Documentation coherency
225+
~~~~~~~~~~~~~~~~~~~~~~~
226+
227+
The old-timers around here will remember the Linux books that showed up on
228+
the shelves in the 1990s. They were simply collections of documentation
229+
files scrounged from various locations on the net. The books have (mostly)
230+
improved since then, but the kernel's documentation is still mostly built
231+
on that model. It is thousands of files, almost each of which was written
232+
in isolation from all of the others. We don't have a coherent body of
233+
kernel documentation; we have thousands of individual documents.
234+
235+
We have been trying to improve the situation through the creation of
236+
a set of "books" that group documentation for specific readers. These
237+
include:
238+
239+
- :doc:`../admin-guide/index`
240+
- :doc:`../core-api/index`
241+
- :doc:`../driver-api/index`
242+
- :doc:`../userspace-api/index`
243+
244+
As well as this book on documentation itself.
245+
246+
Moving documents into the appropriate books is an important task and needs
247+
to continue. There are a couple of challenges associated with this work,
248+
though. Moving documentation files creates short-term pain for the people
249+
who work with those files; they are understandably unenthusiastic about
250+
such changes. Usually the case can be made to move a document once; we
251+
really don't want to keep shifting them around, though.
252+
253+
Even when all documents are in the right place, though, we have only
254+
managed to turn a big pile into a group of smaller piles. The work of
255+
trying to knit all of those documents together into a single whole has not
256+
yet begun. If you have bright ideas on how we could proceed on that front,
257+
we would be more than happy to hear them.
258+
259+
Stylesheet improvements
260+
~~~~~~~~~~~~~~~~~~~~~~~
261+
262+
With the adoption of Sphinx we have much nicer-looking HTML output than we
263+
once did. But it could still use a lot of improvement; Donald Knuth and
264+
Edward Tufte would be unimpressed. That requires tweaking our stylesheets
265+
to create more typographically sound, accessible, and readable output.
266+
267+
Be warned: if you take on this task you are heading into classic bikeshed
268+
territory. Expect a lot of opinions and discussion for even relatively
269+
obvious changes. That is, alas, the nature of the world we live in.
270+
271+
Non-LaTeX PDF build
272+
~~~~~~~~~~~~~~~~~~~
273+
274+
This is a decidedly nontrivial task for somebody with a lot of time and
275+
Python skills. The Sphinx toolchain is relatively small and well
276+
contained; it is easy to add to a development system. But building PDF or
277+
EPUB output requires installing LaTeX, which is anything but small or well
278+
contained. That would be a nice thing to eliminate.
279+
280+
The original hope had been to use the rst2pdf tool (https://rst2pdf.org/)
281+
for PDF generation, but it turned out to not be up to the task.
282+
Development work on rst2pdf seems to have picked up again in recent times,
283+
though, which is a hopeful sign. If a suitably motivated developer were to
284+
work with that project to make rst2pdf work with the kernel documentation
285+
build, the world would be eternally grateful.
286+
287+
Write more documentation
288+
~~~~~~~~~~~~~~~~~~~~~~~~
289+
290+
Naturally, there are massive parts of the kernel that are severely
291+
underdocumented. If you have the knowledge to document a specific kernel
292+
subsystem and the desire to do so, please do not hesitate to do some
293+
writing and contribute the result to the kernel. Untold numbers of kernel
294+
developers and users will thank you.

Documentation/doc-guide/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ How to write kernel documentation
1010
sphinx
1111
kernel-doc
1212
parse-headers
13+
contributing
1314

1415
.. only:: subproject and html
1516

0 commit comments

Comments
 (0)