In the 1970s, the Multics off-spring
Unix became more and more popular because it could be run on affordable machines and was easily available for universities at that time. At MIT (the Massachusetts Institute of Technology), there was a need to drive the Wang
Graphic Systems CAT typesetter, a graphical output device from a PDP-11 computer running Unix. As runoff was too limited for this task it was further developed into a more powerful text formatting system by
Josef F. Osanna, a main developer of the Multics operating system and programmer of several runoff ports.
The name runoff was shortened to roff. The greatly enlarged language of Osanna's concept included already all elements of a full roff system. All modern roff systems try to implement compatibility to this system. So Joe Osanna can be called the father of all roff systems.
This first roff system had three formatter programs.
troff
(typesetter roff/) generated a graphical output for the CAT typesetter as its only device.
nroff
produced text output suitable for terminals and line printers.
roff
was the reimplementation of the former runoff program with its limited features; this program was abandoned in later versions. Today, the name roff is used to refer to a troff/:nroff sytem as a whole.
Osanna first version was written in the PDP-11 assembly language and released in 1973. Brian Kernighan joined the roff development by rewriting it in the C programming language. The C version was released in 1975.
The syntax of the formatting language of the nroff/troff programs was documented in the famous Troff User's Manual [CSTR #54], first published in 1976, with further revisions up to 1992 by Brian Kernighan. This document is the specification of the classical troff. All later roff systems tried to establish compatibility with this specification.
After Osanna had died in 1977 by a heart-attack at the age of about 50, Kernighan went on with developing troff. The next milestone was to equip troff with a general interface to support more devices, the intermediate output format and the postprocessor system. This completed the structure of a roff system as it is still in use today; see section USING ROFF. In 1979, these novelties were described in the paper [CSTR #97]. This new troff version is the basis for all existing newer troff systems, including groff. On some systems, this device independent troff got a binary of its own, called ditroff(7). All modern troff programs already provide the full ditroff capabilities automatically.