摘要

  • Eric Allman 在 1994 年的文章中说,Sendmail 的主要开发在 1987 年 2 月后停顿,到 1991 年 7 月才恢复;期间供应商和外部贡献者维护了不同变体。
  • 他列出多项重启工作的原因,包括 Berkeley 的邮件系统改动、版本分化,以及他认为没有进入多数实现的新 SMTP 扩展。
  • Sendmail 8.6.6 支持部分扩展,却在另一些方面受限。公开版本让边界可以被检查,但并不证明普及部署或完整合规。

长时间停顿变成了版本问题

在成为商业产品或开源经济讨论中的象征之前,Sendmail 已经是 Berkeley Unix 环境的一部分。Internet Hall of Fame 的传记称,Eric Allman 在加州大学伯克利分校开发了 delivermail 和 Sendmail,当时他也参与 INGRES;两者后来随 BSD 发行。这段背景说明公开源码为何重要:构建操作系统的人可以检查邮件路由程序,并将其编译进自己的运行环境。

Allman 在 1994 年发表的《Changes in Sendmail Version 8》进一步描述了随后的停顿。Sendmail 的主要开发在 1987 年 2 月后基本停止,直到 1991 年 7 月才重新活跃起来。期间有人提供最低限度的维护,供应商和外部贡献者则分别发展各自的版本。Allman 对重启工作列出了多项原因:Berkeley 需要配合子域地址结构和 4.4BSD 调整邮件程序;他审阅了 Bryan Costales 的 Sendmail 书稿;各个分支需要重新统一;SMTP 标准也已经变化。

这是多个因素交织的维护决定,不能简化成一个触发点。代码既要服务新的 BSD 发行版,又要收敛分叉,还要回应协议演变。Allman 写道,IDA-Sendmail 从配置文件发展成规模可观的补丁集合,并被自行编译源码的人广泛采用。他也判断,IDA 团队和大多数供应商都没有把较新的 SMTP 澄清和扩展纳入实现。这是他在 1994 年作出的回顾判断,并非对每家供应商或每套安装环境的独立普查。

两者的区别很重要。标准已经发布,实际运行的软件却可能继续遵循旧假设。如果实现代码是私有的、分散的,或难以取得,运营者就未必有一条可操作的路径,把标准文本变成经过测试的替代版本。公开发行版可以让变更及其局限变得可见,从而缩小距离。但它不能要求供应商发布更新、管理员安装更新,或远端邮件服务器接受这些行为。

Version 8 把能力边界写了出来

Allman 以 Sendmail 8.6.6 说明,协议支持并非简单的“支持”或“不支持”。文章称它提供 RFC 1425 定义的基本 ESMTP、RFC 1427 的邮件大小扩展,以及对 RFC 1426 BODY 参数的有限支持。文章还指出,8.6.6 不会通告 8BITMIME;当对端 SMTP 不支持 8 位数据时,它也无法正确转换邮件。

这比笼统地说“Sendmail 8 支持新的 SMTP 标准”更准确,因为它把具体能力限定到某一版本。RFC 1425 定义基于 EHLO 的 ESMTP 能力协商,RFC 1427 定义 SIZE,RFC 1426 则描述后来与 8BITMIME 关联的 BODY 扩展。对端通告什么、发件方如何选择、接收方如何处理,都会影响邮件能否按预期传送。Allman 的文章没有说明各地何时升级,也没有统计这些路径在生产环境出现的频率。

另一份 Sendmail Version 8 变更说明把软件描述为对 RFC 1123“有条件合规”,并分别列出已经满足的要求和仍有保留的部分。该网页引用的扩展 RFC 编号晚于 1994 年文章所讨论的 RFC。两份材料不应被拼成一份混合的功能清单;它们共同说明,谈合规必须同时交代软件版本、对应规范和例外。

因此,Allman 的贡献不只是推出一个大版本号。他把实现边界变得可读:某个扩展是否存在、是否只是部分实现、转换功能又在哪里失效。版本号跳到 8 也有一个更平常的解释:4.4BSD 发行版中的文件已经编号为 8.1。这个编号并不表示所有协议问题都已解决。

公开源码给运营者一个可验证的对象

Heng Lu 的第 65 篇笔记提供了一种编辑视角:规范文本与正在运行的代码回答的是不同问题。这篇笔记不是 Allman 动机或 Sendmail 历史的证据。放到这里,区别很实际:规范说明系统应当能做什么;源码发行版让人检查一个实现;测试和真实邮件交换才能说明一对具体系统实际做了什么。

公开代码也重新分配了维护工作。维护者可以公开共同版本,供应商可以带入补丁,运营者可以拿本地行为与公开源码对照。与此同时,配置差异、私有补丁和旧软件包仍可能使环境分裂。公开只提供了检查和修复的可能性,并不会自动消除维护成本。

结论应当有边界。按 Allman 的回顾,Sendmail 的停顿扩大了 SMTP 文档演进与许多用户可获得实现之间的落差。Version 8 提供了可供比较的公开基线,并纳入部分新扩展;8.6.6 的例子同时保留了明确限制。规范发表不代表实现已部署,源码公开也不代表每个站点已经采用。真正要问的是:运营者能否识别确切版本、测试其行为,并在实现达不到要求时选择有维护保障的路径。

来源