要点

  • 1996 年,Duane Wessels 从最后一个商业化前的 Harvest Cache Daemon 版本分叉代码,将独立分支命名为 Squid,并于 7 月发布 1.0.0。
  • Squid 早期的改动显示,延续来自持续维护:它加入条件式 HTTP 请求、HTTPS 对象处理,以及服务不中断时重建磁盘缓存的能力。

研究项目可以结束,项目中的工具却仍在响应请求。1996 年,Harvest 的 Web 缓存就遇到了这个实际问题。Harvest 曾开发多个组件,其中包括对象缓存;但一些项目成员转入产业界,与此同时,一项另行获得 NSF 资助的缓存研究开始推进。曾参与 Harvest 的 Duane Wessels 需要一套可公开使用的软件,支持新的部署和研究。后来他在技术回顾中写道,他从 Harvest 最后一个商业化前版本继续开发,并把这条分支命名为 Squid,以区别于另一条商业化衍生路线。

这次分叉有明确的运行目的。缓存位于用户和远端 Web 服务器之间,保存热门对象的副本,让重复请求能从更近的位置获得。Harvest 也支持缓存层级。这种需求不只存在于实验室:一篇 1996 年关于新西兰部署的论文称,Harvest Cache 于 1995 年 10 月开始投入生产;到次年 2 月,一台服务器处理的流量相当于新西兰与世界其他地区互联网流量的约 5%。这是特定地区一位运营者的估算,不能当作全球采用率。

Squid 的第一版并非只给原封不动的源码换了名字。1996 年 4 月 19 日的 1.0 beta 变更记录把 Harvest cached-1.4.pl3 列为基础版本,并记下新增的 If-Modified-Since 请求、SSL 对象支持,以及在缓存继续服务时于后台重建磁盘存储。这些变化对应代理服务器的日常要求:确认已存对象是否更新,处理更多连接类型,并在维护存储时不让服务停下来。Squid 1.0.0 于当年 7 月正式发布。

Wessels 后来的回顾提到,接下来一年里项目吸收了代码贡献、补丁、功能建议和错误报告。变更记录让这一过程更具体:修复随着版本陆续发布,Squid 也继续处理与 Harvest 缓存节点的兼容。1997 年的 RFC 2186 记录了 ICP——一种邻近缓存之间快速交换查询与命中结果的协议,并指出它源自 Harvest 的层级缓存工作。分叉可以改变代码,同时仍保留其他缓存能够理解的协作方式。

Squid 的起点说明了一种具体的延续方式。运营者若要继续运行缓存,并不要求 Harvest 这个项目名称原样存续。维护者可以拿起一套已知代码,发布独立分支,再按实际运行中遇到的问题修订它。这并不保证长期有人维护:新项目仍需要人手、经费和彼此兼容的部署。但它让研究成果进入了可以持续发布版本的软件维护周期。

来源