groff: History
1.2 History
===========
'troff' can trace its origins back to a formatting program called
'RUNOFF', written by Jerry Saltzer, which ran on the CTSS (_Compatible
Time Sharing System_, a project of MIT, the Massachusetts Institute of
Technology) in the mid-sixties.(1) (⇒History-Footnote-1) The
name came from the use of the phrase "run off a document", meaning to
print it out. Bob Morris ported it to the 635 architecture and called
the program 'roff' (an abbreviation of 'runoff'). It was rewritten as
'rf' for the PDP-7 (before having Unix), and at the same time (1969),
Doug McIlroy rewrote an extended and simplified version of 'roff' in the
BCPL programming language.
In 1971, the Unix developers wanted to get a PDP-11, and to justify
the cost, proposed the development of a document formatting system for
the AT&T patents division. This first formatting program was a
reimplementation of McIlroy's 'roff', written by J. F. Ossanna.
When they needed a more flexible language, a new version of 'roff'
called 'nroff' ("Newer 'roff'") was written. It had a much more
complicated syntax, but provided the basis for all future versions.
When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
version of 'nroff' that would drive it. It was dubbed 'troff', for
"typesetter 'roff'", although many people have speculated that it
actually means "Times 'roff'" because of the use of the Times font
family in 'troff' by default. As such, the name 'troff' is pronounced
't-roff' rather than 'trough'.
With 'troff' came 'nroff' (they were actually the same program except
for some '#ifdef's), which was for producing output for line printers
and character terminals. It understood everything 'troff' did, and
ignored the commands that were not applicable (e.g. font changes).
Since there are several things that cannot be done easily in 'troff',
work on several preprocessors began. These programs would transform
certain parts of a document into 'troff', which made a very natural use
of pipes in Unix.
The 'eqn' preprocessor allowed mathematical formulae to be specified
in a much simpler and more intuitive manner. 'tbl' is a preprocessor
for formatting tables. The 'refer' preprocessor (and the similar
program, 'bib') processes citations in a document according to a
bibliographic database.
Unfortunately, Ossanna's 'troff' was written in PDP-11 assembly
language and produced output specifically for the CAT phototypesetter.
He rewrote it in C, although it was now 7000 lines of uncommented code
and still dependent on the CAT. As the CAT became less common, and was
no longer supported by the manufacturer, the need to make it support
other devices became a priority. However, before this could be done,
Ossanna died by a severe heart attack in a hospital while recovering
from a previous one.
So, Brian Kernighan took on the task of rewriting 'troff'. The newly
rewritten version produced device independent code that was very easy
for postprocessors to read and translate to the appropriate printer
codes. Also, this new version of 'troff' (called 'ditroff' for "device
independent 'troff'") had several extensions, which included drawing
functions.
Due to the additional abilities of the new version of 'troff',
several new preprocessors appeared. The 'pic' preprocessor provides a
wide range of drawing functions. Likewise the 'ideal' preprocessor did
the same, although via a much different paradigm. The 'grap'
preprocessor took specifications for graphs, but, unlike other
preprocessors, produced 'pic' code.
James Clark began work on a GNU implementation of 'ditroff' in
early 1989. The first version, 'groff' 0.3.1, was released June 1990.
'groff' included:
* A replacement for 'ditroff' with many extensions.
* The 'soelim', 'pic', 'tbl', and 'eqn' preprocessors.
* Postprocessors for character devices, POSTSCRIPT, TeX DVI, and
X Windows. GNU 'troff' also eliminated the need for a separate
'nroff' program with a postprocessor that would produce ASCII
output.
* A version of the 'me' macros and an implementation of the 'man'
macros.
Also, a front-end was included that could construct the, sometimes
painfully long, pipelines required for all the post- and preprocessors.
Development of GNU 'troff' progressed rapidly, and saw the additions
of a replacement for 'refer', an implementation of the 'ms' and 'mm'
macros, and a program to deduce how to format a document ('grog').
It was declared a stable (i.e. non-beta) package with the release of
version 1.04 around November 1991.
Beginning in 1999, 'groff' has new maintainers (the package was an
orphan for a few years). As a result, new features and programs like
'grn', a preprocessor for gremlin images, and an output device to
produce HTML and XHTML have been added.