自由软件的斗士Eric Raymond把这句“足够多的眼睛可以让所有的bug无处遁形”称 为“Linus 定律”,也是证明开源软件比“闭源”软件更有优势的一个论据。最近微软一位安全方面的资深工程师Shawn Hernan在博客中批驳了这一论断,作为“闭源”软件的代表,微软工程师这么说不奇怪,但是Shawn的写作水平很高,这 篇博客可以作为“议论文”的范文。
要驳倒对方观点,秘诀不是去正面和对方交锋,而是绕开其锋芒,去挑战其前提假设,Challenge the assumption。看样子Shawn也是深谙此道,直接找到了“Linus定律”的Assumption:
- 开源软件比“闭源”软件有更多的Code Review。
- Code Review可以让软件更加安全;
逻辑学上的三段论,结论就是“开源软件比闭源软件更加安全”,Shawn指出这两个前提假设(assumption)都是不成立的,所以这个结论也 是不正确的。
干得好,Shawn!真希望每一个程序员都能有你一样的Critical Thinking和论证能力,所以,从我做起,我们也来Challenge一下Shawn的Assumption:)
首先,人家“Linus定律”不是专门针对安全性bug的,你为什么假设人家说的是安全性问题呢?这世界上除了安全性bug还有很多其他的bug 呢,你是不是评理找错了对象呢:)
Shawn的潜台词是安全性问题高于一切,其实开源的目的并不是要造出最安全的软件,而是通过共享源代码鼓励创新和快速的软件开发(你也可以 Challenge我这个Assumption,但至少我现在是这么理解开源的)。
回到安全性问题本身,我个人觉得在安全性上开源软件比“闭源”软件没什么必然的优劣之分,安全性和其他任何软件的特性一样,决定于 项目的重点和倾向。源 代码是程序员写的,程序员会根据工作重点倾向于加强某些特性。如果某个软件项目强调代码可读性,那么可读性就会强一些;如果某个软件项目强调运行 效率,那么运行效率就好一些;如果某个软件项目强调安全性,那么安全性自然也会好一些。
从这点上开,我相信微软的软件安全性会好一些,因为毕竟微软很强调安全,而且也不是光说不练,花了不少力气整治安全性。我知道我知道,微软产品不断 爆出安全漏洞,也不断地在打补丁,我只能说:一切创造过这么庞大软件项目而没有造出一个安全漏洞的同志,都有资格嘲笑微软。