多双眼睛的审阅并不总能防止代码缺陷

有一种观点认为,由于开源软件要经过多双眼睛的审阅,因此所有的缺陷都会被消除。这是一种误解。
902 位读者喜欢这篇文章。
Disbelieving the 'many eyes' hypothesis

Internet Archive Book Images。CC BY-SA 4.0

编写代码很难。编写安全的代码更难——难得多。在您开始编写之前,您需要考虑设计和架构。当您编写代码来实现安全功能时,它通常基于经过仔细研究和详细检查的架构和设计。它们甚至可能反映出经过全球审查流程并被普遍认为是完美和牢不可破的标准。*

然而,无论这些设计和架构多么出色,将它们放入实际软件中总有一些特别之处。除了被证明在数学上正确的软件之外,** 编写能够准确实现您试图实现的功能的软件,介于科学和艺术之间。对于任何实际编写过软件、尝试调试软件或通过逐步执行来推断软件正确性的人来说,这并不奇怪;然而,这不是本文的重点。

没有人*** 真正相信这个过程产生的软件会是完美的,但每个人都同意软件应该尽可能接近完美和无缺陷。这就是为什么代码审查是软件开发的核心原则。幸运的是——至少在我看来——我们在日常生活中使用的许多代码都是开源的,这意味着任何人都可以查看它,并且有成千上万双眼睛可以审查它。

问题就在这里:有一种观点认为,由于开源软件要经过多双眼睛的审阅,因此所有的缺陷都会被消除。这是一种误解。一种危险的误解。这种观点的问题至少有两方面。第一个是“如果你建造了,他们就会来”的谬论。我记得当时有一个世界网站列表,如果你把你的网站添加到那个列表里,人们就会访问它。**** 同样,开源项目的数量曾经(可能)非常少,以至于人们很有可能查看和审查您的代码。那些日子已经过去了——很久以前就过去了。其次,对于许多安全功能领域——密码原语实现就是一个很好的例子——具备足够资格的眼睛数量很少。

不要认为我以任何方式暗示专有代码中的问题会少一些:恰恰相反。专有软件中的设计和架构不仅常常被隐藏起来不被审查,而且可以查看代码的眼睛也更少,层级压力和群体思维的危险也大大增加。“专有代码更安全”与其说是神话,不如说是假新闻。我完全理解为什么公司喜欢对其安全软件保密,恐怕“这是为了保护我们的知识产权”这句口头禅,他们只是在自欺欺人,实际上,发布它是很不安全的。所以对我来说,在安全软件方面,我完全支持开源。

那么,我们能做些什么呢?嗯,关心安全功能的公司和其他组织可以——而且我相信有责任——花费资源来检查和审查实现该功能的代码。与此同时,开源社区可以——并且正在——寻找方法来支持关键项目,并提高对代码的审查力度。***** 我们应该鼓励学术组织培训学生掌握安全软件编写和审查的黑魔法,更不用说强调开源软件的重要性了。

我们可以做得更好——而且我们正在做得更好。因为我们需要意识到,“多双眼睛假设”之所以是神话,不是因为多双眼睛不会改进代码——它们会——而是因为我们没有足够多的专家眼睛在看。然而。


* 是的,真的:“完美且牢不可破。” 让我们为了讨论的目的假装这是真的。

** ……这仍然依赖于设计和架构来实际完成您想要做的事情——或者您认为您想要做的事情——当然,祝您好运。

*** 没有人真正写过超过大约五行代码(或超过六个 Perl 字符)的人会相信。

**** 我添加了一个。他们来了。这就像某种魔法。

***** 例如,请参阅 Linux 基金会核心基础设施倡议

本文最初发表于 Alice, Eve, and Bob – a security blog,经许可重新发布。

User profile image.
自 1997 年左右以来,我一直身处开源领域,并且从那时起一直在家庭和工作中使用 (GNU) Linux 作为我的主要桌面:并非总是容易...... 我是一名安全专家和架构师,Enarx 项目的联合创始人,目前是一家初创公司的 CEO

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。

查找完美的开源工具

项目管理、商业智能、报告等。查看这些热门项目。

© . All rights reserved.