on project management (was: the Linux man-pages as an educational tool)

"G. Branden Robinson" <[email protected]> Mon, 3 Aug 2026 11:09:02 -0500
Newsgroups org.kernel.vger.linux-man
Message-ID <20260803160902.5edjmpxaqr5uudbu@illithid>
--2zd34qebojhttaqc
Content-Type: text/plain; protected-headers=v1; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Subject: on project management (was: the Linux man-pages as an educational
 tool)
MIME-Version: 1.0

[looping in groff list because toward the end of this mail I present
some philosophy that I have applied to my work on that project]

Hi Alex,

At 2026-08-03T01:37:26+0200, Alejandro Colomar wrote:
> > Date: 2026-08-02 16:27:21-0700
> > From: Collin Funk <[email protected]>
> > I can't help but wonder of what happens in WG 14 rejects this
> > controversial, as obvious by this thread, change. Will the man-pages
> > changes be reverted? Or will we slowly watch them document personal
> > preferences instead of existing standards?
>=20
> This patch set is quite independent of the standard.  It documents a
> header file that has been provided since forever in glibc and most
> other POSIX-ish systems,

Just yesterday while watching an ncurses build scroll by on my tablet, I
had occasion to notice that Bionic libc provides a "memory.h" header.
Curious, I checked it out.

It's a thin wrapper for <string.h>.

I endorse your reformist attitude because every technological success
story begins ossifying as soon as its market position can be milked for
economic rent.  As the old Demotivator poster said of consulting: "If
you're not a part of the solution, there's good money to be made in
prolonging the problem."[1]

Thus trigraphs.  Thus K&R function declarations.  Thus "wastebasket
taxon" header files.

> so changes to the standard are unlikely to have any effects.  I've
> clarified this extensively.  If you want to discourage me from
> applying the change, you should rather bring up technical reasons.

I don't think Collin's totally off base.

What is the overall mission of the Linux man-pages project as you
conceive it?

Take some time to draft one, if you haven't already and I missed it.
Here are some points you might consider.

*  Is delivery of factual information more or less important than
   advocacy of correct methods and accepted idioms?

*  If the foregoing are equally important, are you _sure_ they need to
   be?  Can you escape dilemmas that frustrate day-to-day stewardship
   work by favoring one over the other?

*  If you maintain that the two are equally important, nevertheless, how
   do you resolve conflict?  Disclose the principles you employ to
   decide such issues, and write them down where people can find them.
   That way they can better understand why you reason the way you do,
   and you bind yourself to those principles, so that you and others are
   less seduced by the urge to "shift the goalposts" in a dispute.

> This passive-aggressive message is not something that will have the
> desired effects you could possibly reach with technical arguments.

I'd say less that it was a passive-aggressive message than that it was a
deployment of a slippery-slope argument.  Fallaciously?  I don't know.

But it is also true that people are pushing back on your proposals
regarding re=EBnvisioning of libc's memory buffer and string APIs from two
fronts.  Only one is technical.  The other is managerial.

As a maintainer, your role is to serve your community.  This is a
privilege and a responsibility.  Generally, one is accepted in that role
because one has demonstrated a high level of expertise and sufficient
resources to carry out the tasks the role requires.

Someone earlier in the thread made reference to the personage of past
glibc maintainer Ulrich Drepper, whose maintainership of glibc came to
an unhappy end.  Anyone who'd deny that Drepper was a world-class domain
expert or diligently applied himself to his work, I would not take
seriously.  Apart from glibc maintenance, he wrote some excellent papers
on dynamic shared objects and on the nature of the memory abstraction in
Unix and Unix-like systems.  (Since the latter paper got so deep into
the topic of cache memory architecture, I'd venture it applies more
broadly still.)

I reiterate: world-class.  Any engineer in this space who doesn't read
Drepper disserves themselves professionally.  His stuff is up there with
Goldberg's 1991 paper on floating-point arithmetic, in my opinion.  Even
if you don't 100% digest what these people have to say, they'll improve
your thinking, because you'll become more familiar with the problem
domain.  (And if you disagree with them and can back up your claims,
start writing a paper of your own.  That's where the confidence one
manifests in the Google interview or break room evaporates.)

So how does a guy like that get himself into trouble as a maintainer?

By persistently failing to attend to the demands/needs of the community
they serve.

Listen to your users.  Even if they're "wrong".

Here's how I apply the foregoing mode of analysis to my own work.

I've occasionally ruffled feathers by changing defaults in groff.[2]  I
_think_ that I have kept myself from being deposed by the sans-culottes
by going well out of my way to ensure that configuration knobs are
available to override those defaults, to document not just their
substance but their rationale, and to present examples in a
configuration file in /etc/groff so that all people have to do is
uncomment something to override my contemptible idiocy.  (Eventually,
some learn the hard way why I made my choice.)

Frequently, I pitch potentially disruptive changes--stuff that we'd
report in the "NEWS" file--as an email to the groff list with
"Proposed:" in the Subject line.  More often than not, what I suggest
involves such an esoteric detail of formatter behavior that I get no
feedback at all.  Few have mastered such oddities as diversion trap
management, to name an example of something that's moving a little bit
in groff 1.25 and might, theoretically,[3] break some old AT&T troff
documents (but none written targeting GNU troff itself).

But I also have a counterexample.

2 release cycles in a row, in anticipation of groff 1.24 and 1.25, I've
pitched a small redesign of GNU troff such that the configured
hyphenation language--basically, the set of patterns used for automatic
hyphenation of words, which are locale-specific (English, French,
German)--is a property of the environment, like all other hyphenation
configuration parameters, rather than a global one.

Twice in a row, one person has spoken against the change--it _would_
require changes to some macro packages.  That person is Peter Schaffter,
author of mom(7), a macro package that shows off GNU troff's
capabilities as a typesetting system better than any other.

I haven't yet managed to make a concrete case to him strongly enough to
persuade him that the objective is worth the candle.

Now, I'm dead certain that my proposal is the correct course from a
software design perspective.  It's a Yourdon/Constantine "cohesion"
no-brainer.

But, because environments are formatter-level objects, such a change's
impact is not limited to internal data design.  It affects the language,
and I have users.  So, I've interpreted Peter's objection as a
procedural veto.  Rhetorically, he hasn't been so strident.  What I
infer is that I need to spend time coming up with one or more concrete
exhibits to establish the benefit of the change.  I have an idea for
what would do it: a multi-lingual document, say an mm(7) document where
most of the body text is in English but the document uses the package's
"bottom block" `BS` and `BE` macros to present at the foot of every page
some kind of disclaimer in, for instance, French.

Just articulating the idea isn't enough.  Given the unusual resistance
on this point, and recognizing the general indulgence shown by the
community toward my madcap reformist schemes as something I'd be wise
not to squander, I've decided what I need to do is build a real document
with a real macro package, and illustrate what changes to that package
would be necessary to fulfill the promise of the redesign.

I expect the disruption level to be low and the benefit to be high--for
its applicable problem domain.  The potential impact either way is
limited because multilingual documents are simply not common.

Because groff's community is small, I interpret a single dissenting
voice as putting consensus out of reach.  It helps in this case that the
single dissenting voice is a known member of the community.  If our
mailing list suffered from anonymous drive-by trolls, I'd be in the
perilous position of bifurcating participants into a class that gets
"taken seriously" and a class that does not.  I spoke earlier in this
thread of "moral hazard".  I feel there is significant moral hazard in
making such classifications.  For one thing, sometimes anonymous
contributors make cogent points, and for another, temptation is
ever present to make the class of "people to be taken seriously"
coextensive with those who agree with, flatter, or indulge you.

Kings, presidents, executives, generals, and "BDFL"s express
mystification and confusion regarding their failures because they
mistake sycophancy for objective judgment.

Regards,
Branden

[1] https://www.reddit.com/r/Demotivational/comments/1fdyxe/consulting/

[2] The most famous example is the great hyphen-minus debacle of 2023.
    https://lwn.net/Articles/947941/

[3] And I do mean theoretically.  I surveyed a large corpus of
    historical Unix troff documents and could not find _any_ that came
    close to slipping through the "hole in the grammar" that I
    identified and closed.
    https://savannah.gnu.org/bugs/?68357#comment1

--2zd34qebojhttaqc
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEh3PWHWjjDgcrENwa0Z6cfXEmbc4FAmpwvRYACgkQ0Z6cfXEm
bc5ShRAAjLfzg/gCEXnkEq9/Lfu2GcK2IWhewY2GcFCT0EuPmmtDVWQeK4S5fr4f
8qJgZWKsTuUXrvAClDhxazRh/XEkpjMDifKUWRb3rR0b5WKiP4QWI928oO5sTtIi
VDaCzCUBKI4ug6w5uqi9rG2TAAju3u9Iyx83VuJHStfTsch0IH4hsDIr/sDuAcLX
oIBcxS2y0mGnVoGv2Iu/IcmkJLa/oN5aZT+UdFcXJzcehA9Th7lkEeYiyQQFrjjZ
3g+FfDqgR7S9ajWaD+YOKjdo8efy+F85csBHMLG0AmfntBCTY+K5VDYjgao1jadu
UvdqrrUbvGy6uw3oWmPXkH5yj14C5qP91tusaCFrYLZkSNKDGIGfE3fTGxvtuKmM
8K5mSoJM8dGzOYe8vuCcvkHUdCjFfs9cEtJ8UsEJIn/21VK3kqPcjXKf1dL+92Sx
lgeTg6OkobRLybhm1v50fVZDXWcgYF875Oz4clvPqA17mCLlClP0d/M2fI50xtsZ
EjCn0rIOKpC7nOO7UHFE6EtFeieCGK275SpXABfzzsPB7l+93ZnUUXLbpYDt08bA
fs6qhttlxUjYP06euThjWb7vUd4/noO5YReT+9lZj0cXqBDbTfKR/CgZdlG2WKdc
F+7BWEUfI/WQ81gedphtW/n9ns/70yg+xUZPU6DfnIjJMefKCOQ=
=0DDT
-----END PGP SIGNATURE-----

--2zd34qebojhttaqc--