如果用普通开源信号衡量 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.web、texbook.tex 和 TRIP 测试材料,包括 trip.tex、trip.log、trip.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 版本,并在任务需要不同能力时选择 pdflatex、xelatex、lualatex 或其他格式的原因。
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 的治理信号有价值,正因为它让名称保持诚实。
来源
- CTAN,“TeX - A sophisticated typesetting engine”——包描述、当前版本、支持列表、仓库指针、许可证、维护者,以及 TeX Live/MiKTeX 收录元数据。
- CTAN mirrors,
/systems/knuth/dist/tex/——tex.web、texbook.tex和 TRIP 测试文件的源目录列表。 - CTAN,“Knuth License”——再发布和修改条款,要求修改后的包或文件改名。
- Donald E. Knuth,“The future of TeX and METAFONT”,TUGboat 11(4), 1990——Knuth 关于未来只修 bug 和版本号政策的说明。
- TeX Users Group,The TeX Live Guide--2026——TeX Live 概览、原版 TeX 冻结说明,以及 e-TeX、pdfTeX、LuaTeX、XeTeX 和相关引擎的扩展描述。
- The TeX FAQ,“What is the future of TeX?”——对 Knuth 冻结政策、pi 版本惯例和后继引擎背景的二级概括。
- TeX Users Group,“TeX Live”——2026 版本状态、发布日期、支持平台、包范围、更新模型和项目支持背景。
- Wikimedia Commons,“Donald Knuth in front of statue St. Mesrop Mashtots...”——本文封面所用 2006 年照片的来源页。