roff is the general name for a set of type-setting programs, known under names like troff, nroff, ditroff, groff, etc. A roff type-setting system consists of an extensible text formatting language and a set of programs for printing and converting to other text formats. Traditionally, it is the main text processing system of Unix; every Unix-like operating system still distributes a roff system as a core package.
The most common roff system today is the free software implementation "GNU roff", groff(1). The pre-groff implementations are referred to as classical (dating back as long as 1973). groff implements the look-and-feel and functionality of its classical ancestors, but has many extensions. As groff is the only roff system that is available for every (or almost every) computer system it is the de-facto roff standard today.
In some ancient Unix systems, there was a binary called roff that implemented the even more ancient runoff of the Multics operating system, cf. section HISTORY. The functionality of this program was very restricted even in comparison to ancient troff; it is not supported any longer. Consequently, in this document, the term roff always refers to the general meaning of "roff system", not to the ancient roff binary.
In spite of its age, roff is in wide use today, for example, the manual pages on UNIX systems (man~pages), many software books, system documentation, standards, and corporate documents are written in roff. The roff output for text devices is still unmatched, and its graphical output has the same quality as other free type-setting programs and is better than some of the commercial systems.
The most popular application of roff is the concept of manual pages or shortly "man pages"; this is the standard documentation system on many operating systems.
This document describes the historical facts around the development of the "roff system"; some usage aspects common to all roff versions, details on the roff pipeline, which is usually hidden behind front-ends like groff(1); an general overview of the formatting language; some tips for editing roff files; and many pointers to further readings.
The roff text processing system has a very long history, dating back to the 1960s. The roff system itself is intimately connected to the Unix operating system, but its roots go back to the earlier operating systems CTSS and Multics.
"The Predecessor runoff"
The evolution of roff is intimately related to the history of the operating systems. Its predecessor runoff was written by Jerry Saltzer on the CTSS operating system ("Compatible Time Sharing System") as early as 1961. When CTSS was further developed into the operating system the famous predecessor of Unix from 1963, runoff became the main format for documentation and text processing. Both operating systems could only be run on very expensive computers at that time, so they were mostly used in research and for official and military tasks.
The possibilities of the runoff language were quite limited as compared to modern roff. Only text output was possible in the 1960s. This could be implemented by a set of requests of length~2, many of which are still identically used in roff. The language was modelled according to the habits of typesetting in the pre-computer age, where lines starting with a dot were used in manuscripts to denote formatting requests to the person who would perform the typesetting manually later on.
The runoff program was written in the PL/1 language first, later on in BCPL, the grandmother of the C~ programming language. In the Multics operating system, the help system was handled by runoff, similar to roffs task to manage the Unix manual pages. There are still documents written in the runoff language; for examples see Saltzers home page, cf. section "SEE ALSO".
"The Classical nroff/troff System"
xditview(1x), X(7x). groff(1) grog(1) groffer(1)
"The roff Pipe"