Linux 版 (精华区)
发信人: pangwa (everything will go end?), 信区: Linux
标 题: (Eric Raymond)大教堂和市集(6)
发信站: 哈工大紫丁香 (Mon Jan 24 14:18:32 2005), 转信
六. popclient变成了Fetchmail
这个工程的真正转折点是Harry Hochleiser寄给我他写的代码草稿,他把邮
件转发到客户端机器的SMTP端口,我立即意识到这个特征的可靠实现将淘汰所有
其他的递送模式。
几个星期以来我一直在修改而不是改进fetchmail,因为我觉得界面设计虽然
有用但是太笨拙琐碎了,到处充满了太多的粗陋的细小选项。
当我思考SMTP转发时我发现popclient试图做的事太多了,它被设计成既是一
个邮件传输代理(MTA)也是一个本地递送代理(MDA)。使用SMTP转发,它就可以从
MDA的事务中解脱出来而成为一个纯MTA,而象sendmail一样把邮件交给本地递送
程序来处理。
既然端口25在所有支撑TCP/IP的平台上早已被预留,为什么还要为一个邮件
传输代理的配置或为一个邮箱设置加锁的附加功能而操心呢?尤其是当这意味着抽
取的邮件就象一个正常的发送者发出的SMTP邮件一样,而这就是我们需要的。
这里有几个教益:第一,SMTP转发的想法是我有意识地模拟Linus的方法以来
的最大的单个回报,一个用户告诉我这个非同寻常的想法——我所需做的只是理
解它的含义。
11. 想出好主意是好事,从你的用户那里发现好主意也是好事,有时候后者更
好。
很有趣的是,你很快将发现,如果你完全承认你从其他人那里得到多少教益
的话,整个世界将会认为所有的发明都是你做出的,而你会对你的天才变得谦
虚。我们可以看到这在Linus身上体现得多明显!(当我在1997年8月的Perl会议上
发表这个论文时,Larry Wall坐在前排,当我讲到上面的观点时,他激动的叫了
出来:“对了!说对了!哥们!”所有的听众都哄堂大笑起来,因为他们知道同样的
事情也发生在Perl的发明者身上)。
于是在同样精神指导下工程进行了几个星期,我开始不光从我的用户那儿也
从听说我的系统的人那儿得到类似的赞扬,我把一些这种邮件收藏起来,我将在
我开始怀疑自己的生命是否有价值时重新读读这些信。:)
但是有两个更基本的,非政治性的对所有设计都有普遍意义的教益。
12. 最重要和最有创新的解决方案常常来自于你认识到你对问题的概念是错误
的。
一个衡量fetchmail成功的有趣方式是工程的beta测试人员表(fegtchmail的
朋友们)的长度,在创立它的时候已经有249个成员了,而且每个星期增加两到三
个。
实际上,当我在1997年5月校订它时,这张表开始因为一个有趣的原因而缩短
了,有几个人请求我把他们从表中去掉,因为fetchmail已经工作的如此之好,他
们不需要看到这些邮件了!也许这是一个成熟的市集风格工程的生命周期的一部分。
我以前一直在解决错误的问题,把popclient当作MTA和具有许多本地递送模
式的MDA的结合物,Fetchmail的设计需要从头考虑为一个纯的MTA,做为一个普通
Internet邮件路径的一部分。
当你在开发中碰了壁时(当你发现自己很难想通下一步时),那通常不是要问
自己是否找到正确答案,而是要问是否问了正确问题,也许需要重新构造问题。
于是,我重新构造了我的问题,很清楚,要做的正确的事是(1)把SMTP转发支
持放在通用驱动程序中,(2)把它做为缺省模式,(3)最终分离所有其他的递送模
式,尤其是递送到文件和标准输出的选项。
我在第三步上犹豫了一下,担心会让popdiant的长期用户对新的递送方法感
到烦心,在理论上,他们可以立即转而转发文件或者他们的非sendmail等价物来
得到同样的效果,在实际中这种转换可能会很麻烦。
但是当我这么做之后,证明好处是巨大的,驱动程序代码的冗余的部分消失
了,配置完全变得简单了——不用屈从于系统MDA和用户的邮箱,也不用为下层
OS是否支持文件锁定而担心了。
而且,丢失邮件的唯一漏洞也被堵死了,如果你选择了递送到一个文件而磁
盘已满,你的邮件就会丢失,这在SMTP转发中不会发生,因为SMTP侦听器不会返
回OK的,除非邮件可以递送成功或至少被缓冲留待以后递送。
还有,性能也改善了(虽然在单次执行中你不会注意到),这个修改的另一个
不可忽视的好处是手册变得大大简单了。
后来,为了允许处理一些罕见的情况,包括动态SLIP,我必须回到让用户定
义本地MDA递送上来,但是我发现了一个更加简单的方法。
所有这些给了我们什么启发呢?如果可以不损失效率,就要毫不犹豫抛弃陈旧
的特性,Antonine de Saint-Exupery(在他成为经典儿童书籍作家之前是一个飞
行员和飞机设计师)曾说过:
13. “最好的设计不是再也没有什么东西可以添加了,而是再也没有什么东西
可以去掉。”
当你的代码变得更好和更简单时,这就是你知道它是正确的时候了,而且在
这个过程中,fetehmail的设计具有了自己的特点,而区别于其前身popclient。
现在是改名的时候了,这个新的设计看起来比老popclient更象一个sendmail
的复制品,它们都是MTA,但是Senmail是推然后递送,而新的popclient是拉然后
递送。于是,在两个月之后,我把它重新命名为fetehmail。
--
飞扬的青春
自由的享受
----欢迎光临Linux版
※ 修改:·pangwa 于 Jan 24 14:22:35 修改本文·[FROM: 210.46.79.57]
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 210.46.79.57]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.590毫秒