如果用普通开源信号衡量 TeX,它会显得反常:快速发布、可见路线图、issue 处理速度、功能开关,以及持续扩大的 API 表面。TeX 最强的治理信号几乎走向相反方向。Knuth 原版 TeX 被有意冻结,除了少见 bug 修复之外不再变化;围绕它的生态把这种冻结视为兼容性资产,而不是废弃迹象。[4][5][6]

这让 TeX 成为维护者可用的反例。多数项目必须证明自己仍然活着。TeX 证明,拥有者在变更允许发生的位置、禁止发生的位置、后继者如何标识自身这些事情上写下规则之后,一个小而稳定的核心仍能长期保有价值。持续发生的工作没有停止。它转移到发行版、宏包、格式、字体、pdfTeX、XeTeX、LuaTeX 这类引擎,以及 TeX Live 的日常运作中。原始引擎保持狭窄,整个栈的其他部分才知道自己的立足点。[1][5]

冻结本身就是契约

CTAN 当前的 TeX 包页面把 TeX 描述为一个带宏处理器的精密排版引擎。页面同时记录了 3.141592653 这个包版本,日期为 2021-02-05,维护者是 Donald E. Knuth,许可证是 Knuth License。[1] 这个版本号不是营销。它是治理信号。

Knuth 在《The future of TeX and METAFONT》中解释了这套模型:TeX 会接收 bug 修正,但不再开发功能,每次修正都会增加一位数字,使版本号趋向 pi。[4] TeX FAQ 从用户一侧概括了同一政策:3.0 版之后,Knuth 宣布自己不会继续开发,会继续修正上报的 bug,并希望自己去世后 TeX 冻结在 pi 版本。[6] 实际信息很直接:如果需要一种不同语言,就建一个不同引擎;不要把功能漂移夹带进 TeX 本身。

这与“没有维护”是两回事。它是一种范围受到严格约束的维护。常规项目传递的信号是:相信我们,因为我们会持续改进它。TeX 传递的信号是:相信这个核心,因为改进已经有了指定边界。

源代码是一件公共制品

源代码布局也强化了这份承诺。CTAN 的 TeX 源代码目录公开 tex.webtexbook.tex 和 TRIP 测试材料,包括 trip.textrip.logtrip.dvi 以及相关文件。[2] 这一点重要,因为 TeX 使用 WEB 写成,而 WEB 是 Knuth 的文学编程系统,程序同时也是供人阅读的文档。实现不只是一个 tarball;它是一份公开规格,测试材料就在旁边。

放到采用决策里,这会改变风险问题的问法。团队选择依赖时,通常会问维护者是否足够活跃,能不能应对下一个平台、语言或安全问题。面对 TeX,更好的问题有所不同:你需要这个引擎的规范行为,还是需要它的某个后继引擎?如果需要规范行为,冻结的源代码、bug 修复账本和测试套件就是强项。如果需要原生 Unicode、系统字体、直接 PDF 输出,或者可编程扩展钩子,原版引擎本来就不是提出这些要求的位置。

因此,源代码的作用更像锚点,而不是待办队列。它告诉实现者哪些东西必须保持稳定,然后把新需求推向相邻层。

改名规则让身份保持诚实

Knuth License 很短,也异常直接。CTAN 的许可证页面说,在没有修改的前提下,可以无限复制和再发布;也可以修改并再发布修改后的内容,但生成的包或文件必须改名。[3]

这条改名规则,就是让冻结得以运转的治理机制。它没有禁止实验。它防止修改后的引擎借用 TeX 身份,同时改变 TeX 所指的内容。用现代供应链语言说,这份许可证把来源脉络和许可权限分开。你可以研究这个引擎,可以分发它,可以在另一个名称下打补丁,也可以在它的思想上继续建设。许可不允许制造这种含混:一份文档究竟由 Knuth 的 TeX 处理,还是由一个碰巧复用 TeX 名称的修改系统处理。

这条线容易被低估,因为多数开源许可证关注许可、copyleft、专利授权或告知义务。这里最重要的规则是语义性的。名称是接口的一部分。发行版、论文档案、出版流程,或者长期保存的科学文档,都可以依赖“TeX”指向一条特定程序谱系,而不只是“一个受 TeX 启发的排版器”。

创新发生在核心周围

TeX 没有变成博物馆陈列物,因为围绕它的生态没有冻结。2026 年 TeX Live 指南清楚写出这处分工:Knuth 的原版 TeX 除了少见 bug 修正之外已经冻结,在 TeX Live 中以 tex 程序存在,并会在可预见的未来继续保留;TeX Live 也包含数个从原始程序派生出来的扩展 TeX 引擎。[5]

这份列表标出了真正的创新分布。e-TeX 在默认模式保持兼容的同时增加原语。pdfTeX 建立在 e-TeX 之上,增加 PDF 输出和其他扩展。LuaTeX 增加 Unicode 输入、OpenType 与 TrueType 字体支持、MetaPost 集成和一个 Lua 解释器。XeTeX 借助标准第三方库增加 Unicode 和系统字体支持。TeX Live 也在同一扩展章节中记录 LuaMetaTeX、HiTeX、pTeX 变体和 Aleph。[5]

这里有一条干净的架构经验。面对现代文档生产,TeX 没有要求原始二进制吸收每个新需求。它保持根部很小,让引擎、格式、宏包和发行版声明各自的增量。这也是用户能够运行旧 TeX 材料、安装当前 TeX Live 版本,并在任务需要不同能力时选择 pdflatexxelatexlualatex 或其他格式的原因。

TeX Live 项目就是这套模型的运维侧。它的 2026 年主页把 TeX Live 描述为一套综合 TeX 系统,包含 GNU/Linux、macOS、Windows 的二进制文件,主要 TeX 相关程序,宏包,字体,多语言支持,以及持续的包更新。主页还说明 TeX Live 2026 是当前版本,发布日期为 2026-03-01。[7] 原版 TeX 核心几乎不动,发行版仍在移动。

这对维护者意味着什么

TeX 模型不适合多数年轻项目直接套用。过早冻结核心会让用户被困住,阻挡必要的安全工作,并把缺失功能变成意识形态。TeX 能采取这种姿态,是因为这个引擎已经足够好地解决了一个具体问题,因为 Knuth 明确写下政策,因为源代码和测试一直可访问,也因为生态有空间让扩展工作在可区分的名称下展开。[2][4][5]

对成熟开源项目而言,TeX 给出的提醒很明确。一个项目要保持价值,并不总要扩大功能表面。有时最重要的治理动作,是让稳定性具备约束力:定义规范行为,写清允许哪些变更,保护项目名称免受语义漂移,保存严格的测试语料,并创造被认可的位置,让创新能够发生,同时不假装自己仍是旧核心。

最后一点最要紧。没有扩展路径的冻结核心会变成考古对象;缺少稳定核心的扩展路径会变成反复扰动。TeX 延续下来,因为两者同时存在:一个规范引擎,其版本号记录着只修 bug 的克制;一个更大的生态,让实际文档工作能够继续适应。结果是一个边缘仍然活着的稳定参考点,项目本身的节奏并不快。

对采用者来说,这条边界同样实际。如果需求是相对规范引擎的可复现性,就使用原版 TeX。如果需求是当代出版能力,包括 PDF 输出、Unicode、系统字体、语言支持、包管理和受维护的发行版工具,就使用 TeX Live 的现代引擎和格式。[5][7] 不要混淆这些选择。TeX 的治理信号有价值,正因为它让名称保持诚实。

来源

  1. CTAN,“TeX - A sophisticated typesetting engine”——包描述、当前版本、支持列表、仓库指针、许可证、维护者,以及 TeX Live/MiKTeX 收录元数据。
  2. CTAN mirrors,/systems/knuth/dist/tex/——tex.webtexbook.tex 和 TRIP 测试文件的源目录列表。
  3. CTAN,“Knuth License”——再发布和修改条款,要求修改后的包或文件改名。
  4. Donald E. Knuth,“The future of TeX and METAFONT”,TUGboat 11(4), 1990——Knuth 关于未来只修 bug 和版本号政策的说明。
  5. TeX Users Group,The TeX Live Guide--2026——TeX Live 概览、原版 TeX 冻结说明,以及 e-TeX、pdfTeX、LuaTeX、XeTeX 和相关引擎的扩展描述。
  6. The TeX FAQ,“What is the future of TeX?”——对 Knuth 冻结政策、pi 版本惯例和后继引擎背景的二级概括。
  7. TeX Users Group,“TeX Live”——2026 版本状态、发布日期、支持平台、包范围、更新模型和项目支持背景。
  8. Wikimedia Commons,“Donald Knuth in front of statue St. Mesrop Mashtots...”——本文封面所用 2006 年照片的来源页。