Linux 版 (精华区)

发信人: pangwa (everything will go end?), 信区: Linux
标  题: (Eric Raymond)大教堂和市集(2)
发信站: 哈工大紫丁香 (Mon Jan 24 14:16:30 2005), 转信

二. 邮件必须得通过

  1993年以前我在一个小的免费访问的名为Chester County InterLink的ISP
的做技术工作,它位于Pennsylvania的West Chester。(我协助建立了CCIL,并写了
我们独特的多用户BBS系统——你可以telnet到locke.ccil.org来检测一下。今天它
在十九条线上支持三千的用户)。这个工作使我可以一天二十四小时通过CCIL的56K
专线连在网上,实际上,它要求我这么做!

  所以,我对Internet email很熟悉。因为复杂的原因,很难在我家里的机器
(snark.thyrsus.com)和CCIL之间用SLIP工作。最后我终于成功了,但我发现不
得不时常telnet到locke来检查我的邮件,这真是太烦了。我所需要的是我的邮件
发送到snark,这样biff(1)会在它到达时通知我。

  简单地sendmail的转送功能是不够的,因为snark并不是总在网上而且没有一
个静态地址。我需要一个程序通过我的SLIP连接把我的本地发送的邮件拉过来。
我知道这种东西是存在的,它们大多使用一个简单的协议POP(Post Office 
Protocol)。而且,locke的BSD/OS操作系统已经自带了一个POP3服务器。

  我需要一个POP3客户。所以我到网上去找到了一个。实际上,我发现了三、
四个。我用了一会pop-perl,但它却少一个明显的特征:抽取收到的邮件的地址
以便正确回复。

  问题是这样的:假设locke上一个叫“joe”的人向我发了一封邮件。如果我
把它取到snark上准备回复时,我的邮件程序会很高兴地把它发送给一个不存在的
snark上的“joe”。手工的在地址上加上“@ccil.org”变成了一个严酷的痛苦。

  这显然应是计算机替我做的事。(实际上,依据RFC1123的5.2.18节,
sendmail应该做这件事)。但是没有一个现存的POP客户知道怎样做!于是这就给
我们上了第一课:
  1.每个好的软件工作都开始于搔到了开发者本人的痒处。
也许这应该是显而易见的(“需要是发明之母”长久以来就被证明是正确的),
但是软件开发人员常常把他们的精力放在它们既不需要也不喜欢的程序,但在
Linux世界中却不是这样——这解释了为什么从Linux团体中产生的软件质量都如
此之高。

  那么,我是否立即投入疯狂的工作中,要编出一个新的POP3客户与现存的那
些竞争呢?才不是哪!我仔细考察了手头上的POP工具,问自己“那一个最接近我
的需要?”因为:
  2.好程序员知道该写什么,伟大的程序员知道该重写(和重用)什么。

  我并没有声称自己是一个伟大的程序员,可是我试着效仿他们。伟大程序员
的一个重要特点是建设性的懒惰。他们知道你是因为成绩而不是努力得到奖赏,
而且从一个好的实际的解决方案开始总是要比从头干起容易。

  例如,Linux并不是从头开始写Linux的。相反的它从重用Minix(一个386机
型上的类似Unix的微型操作系统)的代码和思想入手。最后所有的Minix代码都消
失或被彻底的重写了,但是当它们在的时候它为最终成为Linux的雏形做了铺垫。

  秉承同样的精神,我去寻找良好编码的现成的POP工具,用来作为基础。

  Unix世界中的代码共享传统一直对代码重用很友好(这正是为什么GNU计划不
管Unix本身有多么保守而选取它作为基础操作系统的原因)。Linux世界把这个传
统推向技术极限:它有几个T字节的源代码可以用。所以在Linux世界中花时间寻
找其他几乎足够好的东西,会比在别处带来更好的结果。

  这也适合我。加上我先前发现的,第二次寻找找到了9个候选者——fetchPOP
,PopTart,get-mail,gwpop,pimp,pop-perl,popc,popmail 和 upop)。我
首先选定的是“fetchpop”。我加入了头标重写功能,并且做了一些被作者加入
他的1.9版中的改进。

  但是几个星期之后,我偶然发现了Carl Harris写的“popclient”的代码,
然后发现有个问题,虽然fetchpop有一些好的原始思想(比如它的守护进程模式),
它只能处理pop3,而且编码的水平相当业余(Seung-Hong是个很聪明但是经验不足
的程序员),Carl的代码更好一些,相当专业和稳固,但他的程序缺少几个重要的
相当容易实现的fetchpop的特征(包括我自己写的那些)。

  继续呢还是换一个? 如果换一个的话,作为得到一个更好开发基础的代价,
我就要扔掉我已经有的那些代码。

  换一个的一个实际的动机是支持多协议,pop3是用的最广的邮局协议,但并
非唯一一个,Fetchpop和其余几个没有实现POP2.RPOP,或者APOP,而且我还有一
个为了兴趣加入IMAP(Internet Message Access Protocol,最近设计的最强大的
邮局协议)的模糊想法。

  但是我有一个更加理论化的原因认为换一下会是一个好主意,这是我在Linux
很久以前学到的:
 3.“计划好抛弃,无论如何,你会的”(Fred Brooks,《神秘的人月》第11章)

  或者换句话说,你常常在第一次实现一个解决方案之后才能理解问题所在,
第二次你也许才足够清楚怎样做好它,因此如果你想做好,准备好推翻重来至少
一次。

  好吧(我告诉自己),对fetchpop的尝试是我第一次的尝试,因此我换了一下。

  当我在1996年6月25日把我第一套popclient的补丁程序寄给Carl Harris之
后,我发现一段时间以前他已经对popclient基本上失去了兴趣,这些代码有些陈
旧,有一些次要的错误,我有许多修改要做,我们很快达成一致,我来接手这个
程序。不知不觉的,这个计划扩大了,再也不是我原先打算的在已有的pop客户上
加几个次要的补丁而已了,我得维护整个的工程,而且我脑袋里涌动着一些念头
要引起一个大的变化。

  在一个鼓励代码共享的软件文化里,这是一个工程进化的自然道路,我要指
出:
 4. 如果你有正确的态度,有趣的问题会找上你的,但是Carl Harris的态度甚
至更加重要,他理解:
 5.当你对一个程序失去兴趣时,你最后的责任就是把它传给一个能干的后继者。

  甚至没有商量,Carl和我知道我们有一个共同目标就是找到最好的解决方
案,对我们来说唯一的问题是我能否证明我有一双坚强的手,他优雅而快速的写
出了程序,我希望轮到我时我也能做到。


--
 飞扬的青春
            自由的享受
                      ----欢迎光临Linux版


※ 修改:·pangwa 于 Jan 24 14:22:13 修改本文·[FROM: 210.46.79.57]
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 210.46.79.57]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.749毫秒