Unsafe and Unused? A History of Utility Code in Mature Open Source Projects
通过对七个成熟开源项目的纵向挖掘研究,本文揭示了名称中包含"util"的文件更有可能涉及安全漏洞且经常未被使用,从而凸显开发者有必要重新审视此类工具代码随时间推移的安全性与可维护性。
原始论文根据 CC0 1.0(http://creativecommons.org/publicdomain/zero/1.0/)发布到公有领域。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一座庞大而繁忙的城市,成千上万的建筑师和建造者正在不断建造和翻新一座巨大的共享摩天大楼。这座摩天大楼就是一个开源软件项目。在这座城市里,有一条特殊规则:每当建造者创造出一种可能对“所有人”都有用的工具或功能——比如一把万能扳手或一把万能钥匙——他们就被鼓励将其放入一个特定、标签清晰的房间,称为"Util"(即"Utility"的缩写)。
这个想法很棒:与其让每位建造者都自己制造扳手,不如大家直接从"Util"房间取用。这既节省时间,又保持井然有序。
但来自罗切斯特理工学院的一支研究团队提出了一个简单的问题:这些"Util"房间随着时间推移究竟发生了什么?它们是保持安全且有用,还是变得危险、混乱且被忽视?
为了找出答案,他们研究了七座著名的“摩天大楼”(如 Linux 内核、Django 和 Apache Tomcat 等软件项目),涵盖了总计 147 年的开发历史。他们审视了每个文件的演变、每次重命名以及每一项安全修复。以下是他们发现的内容,用简单的方式解释如下:
1. "Util"房间无处不在(但并不总是被有效使用)
研究人员发现,"Util"房间非常普遍。在某些项目中,近20% 的所有房间都被标记为"Util"。
- 好消息:这些房间被频繁使用。在某些项目中,"Util"房间内的工具被取用和使用的频率是普通房间内工具的7 倍。
- 问题所在:仅仅因为一个房间被标记为"Util",并不意味着它被高效利用。有时,建造者会创建一个新的"Util"房间,随后因其实际上并无用处而将其重命名,甚至完全弃用。
2. "Util"房间更混乱(更复杂)
如果普通房间是一个简单的壁橱,那么"Util"房间往往是一个充满 tangled 电线和复杂机械的混乱车间。
- 研究发现,在7 个项目中的 6 个里,"Util"文件的复杂度显著高于普通文件。
- 原因何在?因为每个人都把他们的“通用”工具往里面塞。久而久之,这些文件因功能过多而变得臃肿,使其更难理解,也更难维护安全。
3. "Util"房间是团队共同努力的结果(但却是混乱的)
你可能会认为,如果一个文件被标记为"Util",那么每个人都知道如何使用它。但这项研究考察了谁在操作这些文件。
- 他们发现,通常在"Util"房间中构建工具的人,与使用该工具的人并非同一人。
- 事实上,在最新的数据中,超过57%与这些文件打交道的人,要么只负责构建,要么只负责使用,极少两者兼顾。这就像一家工厂,制造机器的人从不操作它们,而操作机器的人从不修理它们。这种脱节可能导致混乱。
4. "Util"房间是危险区域(安全风险)
这是最关键的发现。研究人员将“漏洞”(安全缺陷)比作建筑物地基上的裂缝。
- 巨大的激增:在项目早期,当文件数量很少时,"Util"文件出现安全裂缝的可能性比普通文件高出多达 10 倍。
- 长期来看:即使项目成熟,"Util"文件的风险依然更高。研究发现,"Util"文件涉及安全修复的可能性是非"Util"文件的2.75 倍。
- “惯犯”问题:当"Util"文件中的安全漏洞被修复后,它极有可能再次发生。这就像修补了一根管道的泄漏,结果几个月后同一根管道再次爆裂。这表明团队并未从错误中吸取教训,可能是因为文件过于复杂,无法得到彻底修复。
5. Linux 内核是个例外
研究人员注意到,Linux 内核(一个非常稳定且庞大的项目)的表现与其他项目不同。
- 它没有遵循通常的趋势。它的"Util"文件并不一定更危险,也不像其他项目那样频繁被重命名。
- 研究人员推测,这是因为 Linux 内核过于古老且稳定,其"Util"习惯在研究数据开始之前就已经定型。这就像一栋经过无数次翻修的老建筑,原始蓝图早已消失,但结构依然坚固。
结论
该论文总结道,虽然设立"Util"房间的想法很好(旨在避免重复造轮子),但在实践中,这些房间往往变得不安全且维护不足。
- 它们变得过于复杂。
- 它们出现过多的安全漏洞。
- 建造者与使用者之间往往缺乏沟通。
给建造者的建议:
不要仅仅给文件贴上"Util"标签就指望万事大吉。如果你是项目经理,你需要:
- 明确记录"Util"对你的团队具体意味着什么。
- 警惕这些文件变得过于复杂。
- 格外小心对这些文件进行安全检查,因为历史表明它们最容易出问题。
简而言之:将文件命名为"Util"并不能使其成为万能解决方案;有时,它反而使其成为一个高风险目标。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。