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)  (SeeHistory-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 McIllroy 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 McIllroy'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 formulæ 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.