Tools

As can be seen from the above text, the kernel development process depends heavily on the ability to herd collections of patches in various directions. The whole thing would not work anywhere near as well as it does without suitably powerful tools. Tutorials on how to use these tools are well beyond the scope of this document, but there is space for a few pointers.

By far the dominant source code management system used by the kernel community is git. Git is one of a number of distributed version control systems being developed in the free software community. It is well tuned for kernel development, in that it performs quite well when dealing with large repositories and large numbers of patches. It also has a reputation for being difficult to learn and use, though it has gotten better over time. Some sort of familiarity with git is almost a requirement for kernel developers; even if they do not use it for their own work, they’ll need git to keep up with what other developers (and the mainline) are doing.

Git is now packaged by almost all Linux distributions. There is a home page at
http://git.or.cz/

That page has pointers to documentation and tutorials. One should be aware, in particular, of the Kernel Hacker’s Guide to git, which has information specific to kernel development:
http://linux.yyz.us/git-howto.html

Among the kernel developers who do not use git, the most popular choice is almost certainly Mercurial:
http://www.selenic.com/mercurial/

Mercurial shares many features with git, but it provides an interface which many find easier to use.

The other tool worth knowing about is Quilt:
http://savannah.nongnu.org/projects/quilt/

Quilt is a patch management system, rather than a source code management system. It does not track history over time; it is, instead, oriented toward tracking a specific set of changes against an evolving code base. Some major subsystem maintainers use quilt to manage patches intended to go upstream. For the management of certain kinds of trees (-mm, for example), quilt is the best tool for the job.