# 排版机的革命:troff如何从贝尔实验室的“小项目”成为科技文档的工业标准
1973年,AT&T贝尔实验室的一间狭小办公室里,程序员Joe Ossanna对着Graphic Systems公司的CAT排字机屏幕,眉头紧锁。Unix团队刚刚完成了一个看似不可能的任务——为内部文档生成高质量的排版输出,但现有的工具笨重得令人绝望。他决定自己动手写一个排版系统,这个决定将催生troff,一个改变了科技文档呈现方式的传奇软件。然而,Ossanna没想到的是,这个“小项目”会在几年后引发一场排版技术的商业革命,甚至让AT&T陷入了一场关于软件定价和开源理念的激烈争论。
## 排版困境:Unix团队的“打印噩梦”
20世纪70年代初,贝尔实验室的Unix团队正处于操作系统开发的黄金时代。Ken Thompson、Dennis Ritchie和Brian Kernighan等人每天都在产出海量的技术文档——从系统手册到编程指南,再到数学公式密集的研究论文。但问题来了:这些文档的打印质量惨不忍睹。当时,实验室使用的排版工具是`roff`,一个由Jerry Saltzer在MIT开发的简单文本格式化程序,以及后来Bell Labs自己优化的`nroff`(用于终端输出)。但这些工具只能输出单调的等宽字体,无法处理复杂的页面布局、多字体切换,更别提数学公式了。
“我们写出的代码优雅得像诗歌,但打印出来的文档却像垃圾堆里捡来的草稿。”Dennis Ritchie后来在回忆录中调侃道。Unix团队急需一个能驱动高性能排字机的系统——他们手头正好有一台Graphic Systems公司的CAT排字机,这是一台昂贵的设备,能输出多种字体、字号和复杂的排版元素,但缺乏合适的驱动软件。
Joe Ossanna,一个性格内向但技术狂热的程序员,主动接下了这个任务。他当时正在参与Unix的早期开发,对文本处理有着近乎偏执的追求。Ossanna的目标很明确:创建一个“排版语言”,让用户能用简单的命令控制字体、行距、页边距、页眉页脚,甚至嵌入数学公式。他基于已有的`nroff`代码,但彻底重写了底层逻辑,使其能输出CAT排字机专用的二进制指令集。1973年,第一个版本的`troff`(typesetter runoff的缩写)诞生了。
然而,Ossanna的代码充满了“临时补丁”——为了支持CAT排字机的硬件特性,他硬编码了许多机器依赖的细节。这为后来的商业冲突埋下了伏笔。
## 商业风暴:AT&T的“定价失误”与开源觉醒
troff的成功超出了所有人的预期。到1975年,贝尔实验室内部几乎所有技术文档都使用troff排版,从《Unix程序员手册》到《C语言参考手册》,其输出的排版质量堪比专业印刷。消息很快传到了AT&T的管理层——当时,AT&T作为贝尔实验室的母公司,正面临一项反垄断诉讼,被迫将Unix授权给大学和研究机构。AT&T决定将Unix商业化,而troff作为其“杀手级应用”之一,被捆绑在Unix许可证中出售。
问题出在定价上。1979年,AT&T推出了Unix第七版(V7),其中troff的许可证费用高达20000美元(按今天的通胀率计算约合8万美元)。对于预算有限的大学和初创公司来说,这简直是天价。更糟的是,AT&T的律师们坚持troff是“专有软件”,禁止用户修改或分发。这引发了学术界的强烈不满——许多计算机科学家认为,troff本应是Unix社区共享的“公共财富”。
转折点出现在1981年。加州大学伯克利分校的计算机科学家们,在获得了Unix源代码后,决定绕过AT&T的许可限制,开发一个名为`ditroff`(device-independent troff)的免费替代品。这个版本由Brian Kernighan(troff的早期贡献者)和伯克利团队合作完成,它将troff的“设备驱动”部分与排版引擎分离,使其能输出到任何打印机或显示器,而不仅仅是CAT排字机。Kernighan后来回忆说:“我们当时只是想解决AT&T定价太高的问题,没想到这反而推动了troff的生态繁荣。”
与此同时,AT&T内部也发生了分裂。贝尔实验室的工程师们私下里向学术界提供troff的“非官方”拷贝,甚至有人将源代码匿名上传到早期的ARPANET(互联网前身)。这种“地下运动”迫使AT&T在1984年调整策略,将troff的许可证费用降至500美元,但为时已晚——伯克利的`ditroff`已经成为了事实上的标准。
## 遗产与启示:从排版工具到“文档即代码”哲学
troff的最终遗产远远超出了排版本身。它开创了“文档即代码”的理念——用户用纯文本编写排版指令,通过编译器生成最终输出。这种思想后来被LaTeX(1985年)、Markdown(2004年)等工具继承,成为科技文档写作的核心范式。troff还催生了“宏包”文化,用户可以通过定义宏来封装复杂的排版逻辑,比如`-ms`(手稿宏)、`-mm`(备忘录宏)等,这些宏包至今仍在某些Unix系统中使用。
商业上,troff的故事是一个典型的“定价失误”案例。AT&T试图用高价格榨取troff的价值,却忽视了学术社区的共创力量。最终,开源版本的troff(如GNU troff,即`groff`)完全取代了商业版本,而AT&T的Unix业务也在1990年代走向衰落。讽刺的是,troff的“免费化”反而让它的影响力持续了半个世纪——直到今天,Linux和macOS系统中仍默认安装`groff`,用于生成man手册页(Unix帮助文档)。
## 评论
troff的兴衰揭示了软件史上一个永恒的悖论:最成功的工具往往诞生于“非商业”的环境中。Ossanna和Kernighan在贝尔实验室的“内部项目”中,没有考虑市场、定价或专利,只关注解决一个具体问题——让文档看起来更专业。这种纯粹的技术驱动,反而创造了比任何商业软件都更持久的价值。相比之下,AT&T的商业化尝试显得短视且笨拙:它错误地将troff视为一种“可出售的资产”,而不是一种“基础设施”。今天的软件公司仍在上演同样的错误——将开源项目私有化后高价出售,最终被社区的分支版本取代。troff的故事提醒我们:在软件行业,用户和开发者之间的信任,远比短期利润更珍贵。
## 参考资料
- [The History of troff](https://www.troff.org/history.html) — troff官方历史页面,包含Ossanna和Kernighan的原始文档
- [Brian Kernighan on the Origins of troff](https://www.bell-labs.com/usr/dmr/www/chist.html) — Dennis Ritchie的回忆录,详细描述了troff在贝尔实验室的诞生过程
- [GNU troff (groff) Project](https://www.gnu.org/software/groff/) — 现代troff的继任者,开源社区维护的版本
- [AT&T Unix Licensing History](https://en.wikipedia.org/wiki/History_of_Unix#AT&T) — Wikipedia关于Unix商业化的条目,包含troff定价争议的背景
- [The Unix Programming Environment](https://en.wikipedia.org/wiki/The_Unix_Programming_Environment) — Brian Kernighan和Rob Pike的经典著作,其中大量使用了troff排版
1973年,AT&T贝尔实验室的一间狭小办公室里,程序员Joe Ossanna对着Graphic Systems公司的CAT排字机屏幕,眉头紧锁。Unix团队刚刚完成了一个看似不可能的任务——为内部文档生成高质量的排版输出,但现有的工具笨重得令人绝望。他决定自己动手写一个排版系统,这个决定将催生tr
发布于 2026/7/4