[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Groff] Back to the future

From: Ingo Schwarze
Subject: Re: [Groff] Back to the future
Date: Thu, 6 Mar 2014 14:21:52 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

Hi Peter,

Peter Schaffter wrote on Mon, Mar 03, 2014 at 04:43:27PM -0500:

> if we're to figure out what to do about groff in the future,
> we're going to have to stick to the big picture.

Actually, as long as there is nobody who has the time and interest
and skills to actually do some groff C++ coding, figuring out those
questions is not exactly urgent, we can take our time.  Chatting
about it does not do much harm either (except consuming time), but
is not going to change anything unless somebody tackles the work.
And *if* somebody, or a few people, turn up who have the time and
interest and skills, they are likely the restart that discussion
anyway, because, well, they have the *interest* and it's not likely
they will be indifferent regarding *what* they will code...

I think in one respect, Peter and Eric miss each other's point.
When Peter talks about a "technical lead", he talks about a lead
developer, a lead coder.  I have no idea whether Peter could or
would do that, but he himself seems a bit hesitant, to say the
least.  When Eric talks about a "technical lead", he talks about a
discussion leader, a moderator, helping a pack of twenty hot-tempered
developers to find a consistent vision and jointly move on the cart
into that consistent direction, instead of constantly stomping on
each other's toes.  The risk of stomping, right now, seems somewhat

So, regarding the breathing, we are currently helpness, the patient
is in coma, and the discussion what a good physician might attempt
for rescue seems somewhat theoretical, for lack of physicians.
Regarding the bleeding, however, we do have a bunch of active
developers:  Peter for -mom, Eric for doclifter (related to manuals),
myself for mandoc(1) (related to manuals), and maybe a few more.
So the discussion about frontend issues is not wholly theoretical,
and it's only natural the discussion turns that way, because that
part of the discussion is likely to actually have some tangible
effects in the near future.

> The logical flow isn't groff => XSL-FO, it's XSL-FO => groff.

And that is exactly where i respectfully disagree with Eric.  It
is about neither, XML and XSLT and related technologies do not come
into the picture *at all*.  I consider XML and XSLT and friends to
be among the more unpleasant examples of overengineering haunting
today's software industry.  The source code of such systems is
basically unreadable by human beings, extremely hostile to any kind
of version control and diffing, those languages make it incredibly
hard to express simple programming features in simple ways, you
regularly need stacks of at least four languages (XML, XSLT, XPath,
FO) even for simple tasks, and i could no doubt go on ranting...

One of the strengths of roff is that the basic roff macro syntax,
developed more than 50 years ago, is still the best tool for semantic
annotation i'm aware of, *obsoleting* any use of XML and XSLT and
what not.  Applied to the task of authoring of manuals, well
exploiting the strengths of roff syntax allows us to help people
write and maintain manuals in very easy formats, that it is very
easy to write toolsets for, without having to bother with XML at
all.  That is why i am here.

So the graph is

  (*) human author
       \-> roff macro syntax 
            \-> GNU troff
                 \-> type-rendered and -set output
                      \-> human reader
            \-> macro interpreter (e.g. mandoc -Tascii)
                 \-> terminal output
                      \-> human reader
            \-> macro interpreter (e.g. mandoc -Thtml)
                 \-> CSS-capable HTML
                      \-> browser -> human reader
            \-> database generator (e.g. mandocdb)
                 \-> semantic search database
                      \-> apropos(1) etc -> human reader

Note that groff appears near the beginning - providing a user-friendly
input interface, avoiding XML - *and* at the end of the chain -
providing high-quality typeset output, while auxiliary interpreters
like mandoc appear only in the middle, as a supplement to the
bigger-picture groff tool chain.

> In the simplest of terms, groff is a typesetting backend.

And it is also a way to design markup languages.  That is very easy
to overlook, given how simple the design principles of these languages
are, but i consider this fact, and the simplicity of the way roff
approaches it, to be among the crucial assets of the fifty years
of roff legacy.

> The manpages debate is largely about groff usage, not
> groff development.

There is truth in that staement, i think.  

> ancillary to backend improvement, there's a pressing need
> for groff advocacy.

Sure, that may also help to attract not just users, but developers,
too.  However, I don't think that advocacy needs to be limited to
advertising groff for writing novels (and mathematical treatises,
of course).  I do not consider it detrimental to advertise the basic
roff macro syntax for manuals, as well.  Having more than one leg
for groff to stand on - rendering system and semantic markup system
- can only make it more stable, in particular since both aspects
have been central to roff for at least 25 years now, if not more.

At least, i'm still actively advocating roff syntax for manual

I don't think chasing away folks from roff syntax towards XML
is going to help groff, or anyone else.

> 5.  Implement new requests freely (as, for example, when Werner
>     added .fzoom) provided they do not break backward compatibility.

I agree with the principles you outline, but would like to add one
clarification to item 5: "freely" shouldn't be interpreted as "on
a whim"; adding a new request should only be considered when it
adds considerable value, and it should be done sparingly, lest the
roff request language drown in featuritis.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]