1: [[!template id=project
2:
3: title="BSD licensed troff/nroff replacement"
4:
5: contact="""
6: [tech-userlevel](mailto:tech-userlevel@NetBSD.org)
7: """
8:
9: category="userland"
10: difficulty="hard"
11:
12: description="""
13:
14: While we now have mandoc for handling man pages, we currently still
15: need groff in the tree to handle miscellaneous docs that are not man
16: pages.
17:
18: This is itself an inadequate solution as the groff we have does not
19: support PDF output (which in this day and age is highly desirable)
20: ... and while newer groff does support PDF output it does so via a
21: Perl script. Also, importing a newer groff is problematic for assorted
22: other reasons.
23:
24: We need a way to typeset miscellaneous articles that we can import
25: into base and that ideally is BSD licensed. (And that can produce
26: PDFs.) Currently it looks like there are three decent ways forward:
27:
28: * Design a new roff macro package that's comparable to mdoc (e.g.
29: supports semantic markup) but is for miscellaneous articles rather
30: than man pages, then teach mandoc to handle it.
31:
32: * Design a new set of markup tags comparable to mdoc (e.g. supports
33: semantic markup) but for miscellaneous articles, and a different less
34: ratty syntax for it, then teach mandoc to handle this.
35:
36: * Design a new set of markup tags comparable to mdoc (e.g. supports
37: semantic markup) but for miscellaneous articles, and a different less
38: ratty syntax for it, and write a new program akin to mandoc to handle
39: it.
40:
41: These are all difficult and a lot of work, and in the case of new
42: syntax are bound to cause a lot of shouting and stamping. Also, many
43: of the miscellaneous documents use various roff preprocessors and it
44: isn't clear how much of this mandoc can handle.
45:
46: None of these options is particularly appealing.
47:
48: There are also some less decent ways forward:
49:
50: * Pick one of the existing roff macro packages for miscellaneous
51: articles (ms, me, ...) and teach mandoc to handle it. Unfortunately
52: all of these macro packages are pretty ratty, they're underpowered
53: compared to mdoc, and none of them support semantic markup.
54:
55: * Track down one of the other older roff implementations, that are now
56: probably more or less free (e.g. ditroff), then stick to the existing
57: roff macro packages as above. In addition to the drawbacks cited
58: above, any of these programs are likely to be old nasty code that
59: needs a lot of work.
60:
61: * Teach the groff we have how to emit PDFs, then stick to the existing
62: roff macro packages as above. In addition to the drawbacks cited
63: above, this will likely be pretty nasty work and it's still got the
64: wrong license.
65:
66: * Rewrite groff as BSD-licensed code and provide support for
67: generating PDFs, then stick to the existing roff macro packages as
68: above. In addition to the drawbacks cited above, this is a horrific
69: amount of work.
70:
71: * Try to make something else do what we want. Unfortunately, TeX is a
72: nonstarter and the only other halfway realistic candidate is lout...
73: which is GPLv3 and at least at casual inspection looks like a horrible
74: mess of its own.
75:
76: These options are even less appealing.
77:
78: Maybe someone can think of a better idea. There are lots of choices if
79: we give up on typeset output, but that doesn't seem like a good plan
80: either.
81:
82: """
83: ]]
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb