摘要

  • Netlib的创建者在1987年介绍了一项邮件服务:用户索取数学计算例程,服务器会把它调用的配套例程一并寄回,省去逐个寻找文件的麻烦。
  • 自动回复背后有人工选稿、用途索引和依赖关系记录。1995年的项目说明显示,邮件取软件的部分细致选项,当时的网页界面还没有。

好不容易找到需要的程序,拿回去才发现它还要调用另一个程序;找到另一个,后面又跟着几个。数学题尚未开算,研究者先做起了寻物启事。软件体积不大,找齐零件却很会消磨人。

Netlib把这件事放到了服务器一端。Jack J. Dongarra和Eric Grosse在1987年5月发表的论文展示了一种取软件的办法:发封电子邮件,写明要哪座程序库里的哪个例程,等回信。服务器默认连同该例程调用的其他例程一起发送。用户说出自己要的东西,收集配件的工作由服务接过去。

当时,数学软件常以整套程序库的形式装在磁带上分发。研究者可能只需要其中一小段,还得联系作者、取得介质,再处理不同系统磁带格式的差别。Netlib服务于这种零取的需求。论文所述的两处服务器分别位于Argonne National Laboratory和AT&T Bell Labs,电子邮件还能通过网关从其他网络送来。

用户可以索取总目录、某个程序库的目录,也可以直接要例程,或者按关键词查询。得到的回信里有源代码。网络负责递送,收件人的电脑随后负责使用这些材料完成计算。

其中最体贴的一步,是替用户找调用关系。一个例程可能需要若干辅助例程,辅助例程又有自己的调用。Netlib解释请求,把程序库名称变成查找范围,再利用系统装载工具解析所需的例程名,将得到的结果整理成应发送的文件清单。程序的组成关系,成了服务器实际办理的事情。

熟悉情况的人还能提更细的要求:只要点名的那一份;排除某个例程及其下属调用;只看文件名清单,暂时不取正文。这样,已经备有部分代码的人可以少收一些。一次邮件请求,既能把零件找齐,也能交代哪些零件家里已有。

论文里还有一个很有人的小插曲:有用户以为邮件对面是工作人员,会把请求写得客客气气。作者让程序容忍少量语法变化,也接受写在主题行里的请求,甚至处理过用数字4代替英语for的写法。这台服务可以接住几句礼貌话,用户也仍需把想要的东西说在它听得懂的范围里。自动服务的亲切感,有时来自少挑一点语法毛病。

1994年8月的Netlib服务介绍仍把邮件取件写得很清楚:请求的例程、附属例程,以及用户索取而作者提供了的文档或测试程序,可以一起返回。那时还有Xnetlib图形界面和浏览器等入口。同一批代码,逐渐可以从不同的门进去取。

进门之前,用户还得知道该找什么。始于1992年的Netlib索引规范要求说明程序解决什么问题,而且这段说明脱离原页面也要读得懂。关键词搜索会把条目单独找出来,只有一个生僻文件名,读者很难据此判断。有人必须替代码写一句有用的人话。

也有人负责挑选代码。1995年9月的项目说明把是否属于收藏范围、是否有新意、质量是否够用,列为编辑审看投稿的工作。邮件回复可以自动完成,收藏什么、怎样描述、配套文件怎样关联,仍然要有人照管。

这份说明还留下一个颇有趣的界面对照。田纳西站点的网页提供两种下载链接:取单个文件,或者连同依赖树一起取。但当时网页还缺少邮件里的某些细致选项,例如排除一整支下属调用,或指定到哪些目录寻找配套代码。新界面更直观,老邮件却还能把话说得更细。

Netlib让一次软件请求多做了一步:把用户点名的程序,和它干活时需要叫来的帮手凑齐。它改变了代码旅行的方式,也改变了谁来负责找零件。研究者收信后,总算可以少查几个文件名,多想一点原本要解的题。