3: EARLY-STAGE PLANNING

When contemplating a Linux kernel development project, it can be tempting
to jump right in and start coding.  As with any significant project,
though, much of the groundwork for success is best laid before the first
line of code is written.  Some time spent in early planning and
communication can save far more time later on.


3.1: SPECIFYING THE PROBLEM

Like any engineering project, a successful kernel enhancement starts with a
clear description of the problem to be solved.  In some cases, this step is
easy: when a driver is needed for a specific piece of hardware, for
example.  In others, though, it is tempting to confuse the real problem
with the proposed solution, and that can lead to difficulties.

Consider an example: some years ago, developers working with Linux audio
sought a way to run applications without dropouts or other artifacts caused
by excessive latency in the system.  The solution they arrived at was a
kernel module intended to hook into the Linux Security Module (LSM)
framework; this module could be configured to give specific applications
access to the realtime scheduler.  This module was implemented and sent to
the linux-kernel mailing list, where it immediately ran into problems.

To the audio developers, this security module was sufficient to solve their
immediate problem.  To the wider kernel community, though, it was seen as a
misuse of the LSM framework (which is not intended to confer privileges
onto processes which they would not otherwise have) and a risk to system
stability.  Their preferred solutions involved realtime scheduling access
via the rlimit mechanism for the short term, and ongoing latency reduction
work in the long term.

The audio community, however, could not see past the particular solution
they had implemented; they were unwilling to accept alternatives.  The
resulting disagreement left those developers feeling disillusioned with the
entire kernel development process; one of them went back to an audio list
and posted this:

	There are a number of very good Linux kernel developers, but they
	tend to get outshouted by a large crowd of arrogant fools. Trying
	to communicate user requirements to these people is a waste of
	time. They are much too "intelligent" to listen to lesser mortals.

(http://lwn.net/Articles/131776/).

The reality of the situation was different; the kernel developers were far
more concerned about system stability, long-term maintenance, and finding
the right solution to the problem than they were with a specific module.
The moral of the story is to focus on the problem - not a specific solution
- and to discuss it with the development community before investing in the
creation of a body of code.

So, when contemplating a kernel development project, one should obtain
answers to a short set of questions:

 - What, exactly, is the problem which needs to be solved?

 - Who are the users affected by this problem?  Which use cases should the
   solution address?

 - How does the kernel fall short in addressing that problem now?

Only then does it make sense to start considering possible solutions.


3.2: EARLY DISCUSSION

When planning a kernel development project, it makes great sense to hold
discussions with the community before launching into implementation.  Early
communication can save time and trouble in a number of ways:

 - It may well be that the problem is addressed by the kernel in ways which
   you have not understood.  The Linux kernel is large and has a number of
   features and capabilities which are not immediately obvious.  Not all
   kernel capabilities are documented as well as one might like, and it is
   easy to miss things.  Your author has seen the posting of a complete
   driver which duplicated an existing driver that the new author had been
   unaware of.  Code which reinvents existing wheels is not only wasteful;
   it will also not be accepted into the mainline kernel.

 - There may be elements of the proposed solution which will not be
   acceptable for mainline merging.  It is better to find out about
   problems like this before writing the code.

 - It's entirely possible that other developers have thought about the
   problem; they may have ideas for a better solution, and may be willing
   to help in the creation of that solution.

Years of experience with the kernel development community have taught a
clear lesson: kernel code which is designed and developed behind closed
doors invariably has problems which are only revealed when the code is
released into the community.  Sometimes these problems are severe,
requiring months or years of effort before the code can be brought up to
the kernel community's standards.  Some examples include:

 - The Devicescape network stack was designed and implemented for
   single-processor systems.  It could not be merged into the mainline
   until it was made suitable for multiprocessor systems.  Retrofitting
   locking and such into code is a difficult task; as a result, the merging
   of this code (now called mac80211) was delayed for over a year.

 - The Reiser4 filesystem included a number of capabilities which, in the
   core kernel developers' opinion, should have been implemented in the
   virtual filesystem layer instead.  It also included features which could
   not easily be implemented without exposing the system to user-caused
   deadlocks.  The late revelation of these problems - and refusal to
   address some of them - has caused Reiser4 to stay out of the mainline
   kernel.

 - The AppArmor security module made use of internal virtual filesystem
   data structures in ways which were considered to be unsafe and
   unreliable.  This concern (among others) kept AppArmor out of the
   mainline for years.

In each of these cases, a great deal of pain and extra work could have been
avoided with some early discussion with the kernel developers.


3.3: WHO DO YOU TALK TO?

When developers decide to take their plans public, the next question will
be: where do we start?  The answer is to find the right mailing list(s) and
the right maintainer.  For mailing lists, the best approach is to look in
the MAINTAINERS file for a relevant place to post.  If there is a suitable
subsystem list, posting there is often preferable to posting on
linux-kernel; you are more likely to reach developers with expertise in the
relevant subsystem and the environment may be more supportive.

Finding maintainers can be a bit harder.  Again, the MAINTAINERS file is
the place to start.  That file tends to not always be up to date, though,
and not all subsystems are represented there.  The person listed in the
MAINTAINERS file may, in fact, not be the person who is actually acting in
that role currently.  So, when there is doubt about who to contact, a
useful trick is to use git (and "git log" in particular) to see who is
currently active within the subsystem of interest.  Look at who is writing
patches, and who, if anybody, is attaching Signed-off-by lines to those
patches.  Those are the people who will be best placed to help with a new
development project.

The task of finding the right maintainer is sometimes challenging enough
that the kernel developers have added a script to ease the process:

	.../scripts/get_maintainer.pl

This script will return the current maintainer(s) for a given file or
directory when given the "-f" option.  If passed a patch on the
command line, it will list the maintainers who should probably receive
copies of the patch.  There are a number of options regulating how hard
get_maintainer.pl will search for maintainers; please be careful about
using the more aggressive options as you may end up including developers
who have no real interest in the code you are modifying.

If all else fails, talking to Andrew Morton can be an effective way to
track down a maintainer for a specific piece of code.


3.4: WHEN TO POST?

If possible, posting your plans during the early stages can only be
helpful.  Describe the problem being solved and any plans that have been
made on how the implementation will be done.  Any information you can
provide can help the development community provide useful input on the
project.

One discouraging thing which can happen at this stage is not a hostile
reaction, but, instead, little or no reaction at all.  The sad truth of the
matter is (1) kernel developers tend to be busy, (2) there is no shortage
of people with grand plans and little code (or even prospect of code) to
back them up, and (3) nobody is obligated to review or comment on ideas
posted by others.  Beyond that, high-level designs often hide problems
which are only reviewed when somebody actually tries to implement those
designs; for that reason, kernel developers would rather see the code.

If a request-for-comments posting yields little in the way of comments, do
not assume that it means there is no interest in the project.
Unfortunately, you also cannot assume that there are no problems with your
idea.  The best thing to do in this situation is to proceed, keeping the
community informed as you go.


3.5: GETTING OFFICIAL BUY-IN

If your work is being done in a corporate environment - as most Linux
kernel work is - you must, obviously, have permission from suitably
empowered managers before you can post your company's plans or code to a
public mailing list.  The posting of code which has not been cleared for
release under a GPL-compatible license can be especially problematic; the
sooner that a company's management and legal staff can agree on the posting
of a kernel development project, the better off everybody involved will be.

Some readers may be thinking at this point that their kernel work is
intended to support a product which does not yet have an officially
acknowledged existence.  Revealing their employer's plans on a public
mailing list may not be a viable option.  In cases like this, it is worth
considering whether the secrecy is really necessary; there is often no real
need to keep development plans behind closed doors.

That said, there are also cases where a company legitimately cannot
disclose its plans early in the development process.  Companies with
experienced kernel developers may choose to proceed in an open-loop manner
on the assumption that they will be able to avoid serious integration
problems later.  For companies without that sort of in-house expertise, the
best option is often to hire an outside developer to review the plans under
a non-disclosure agreement.  The Linux Foundation operates an NDA program
designed to help with this sort of situation; more information can be found
at:

    http://www.linuxfoundation.org/en/NDA_program

This kind of review is often enough to avoid serious problems later on
without requiring public disclosure of the project.
