Meanwhile, the technical writing community has been developing a related concept: single sourcing of documentation. The idea is to write technical content only once and to keep it maintained in only one place. From this single source, one can derive a variety of documents for different purposes and audiences, perhaps in different formats and media: for example, printed manuals, embedded help text, and web pages. Single sourcing started to attract interest in the mid-1990s, and it remains an active topic for research and discussion.
Knuth's literate programming predates single sourcing as developed by the technical writing community, but it appears to have had little or no effect on this development until now. That development has been concerned with "documentation" as distinct from program code, apparently viewing the latter as a completely different kind of thing.
Nevertheless, it it is clear to us that literate programming is a kind of single sourcing. Both the program code and the explanation of it are clearly "technical content", and from a single literate-programming source file we derive two different representations of the program in different media and for different purposes: executable code and a human-readable document. A few other software people have noticed a relationship between literate programming and single sourcing, and have commented on it in passing (see this Appendix), but have not developed the connection at all.
We, on the other hand, would like to bring the concept of literate programming squarely into the development of single sourcing. A program's source code is some of the program's most important documentation -- why treat it separately from the rest of the documentation? It can be part of the web of documentation supported by single sourcing, and we claim that it should be. Furthermore, with literate programming, the code is naturally integrated quite tightly with part of its documentation, yet structured in a way that lends itself to the kinds of processing that can bring it into the whole web of documentation.
A comprehensive treatment of single sourcing that integrates source code fully with all other forms of content, in a way that is compatible with the needs of software engineering, is beyond the scope of this paper and will require substantial further work. Meanwhile, in the current paper we focus on the key concept of literate programming: a program's source code and its technical documentation written at the same time, by the same people, as a single artifact that can be used as a single source of content.