【CSDN编者按】GitHub是全世界最流行的代码托管网站,上面托管了6700万个项目。但是各个开源项目之间所隐藏的复杂软件依赖关系网,带有很大的安全和性能隐患——特别在开源项目的所有者去世之后,很有可能会因为项目缺乏维护而带来其他应用性能的崩溃。本文的作者曾经希望继承某一“孤儿”项目的维护权,却因为客观原因而不了了之。在他看来,开发者应该给大批的“孤儿”开源项目以新生。
以下为译文:
也许你从未听说过Jim Weirich或他的软件,但你肯定用过基于他的软件构建的应用。
Weirich参与创建了流行编程语言Ruby的几个关键工具,许多流行的网站如Hulu、Kickstarter、Twitter和数不清的其他网站都是用Ruby编写的。他的代码是开源的,意味着任何人都可以使用并修改。“他是Ruby西方世界里的精英成员。”Ruby开发者、软件公司Test Double联合创始人Justin Searls说。
Jim Weirich
在2014年Weirich去世后,Searls发现没人再维护Weirich的一个软件测试工具了。也就是说,没有人再审查其他开发者提交的bug修改、安全补丁或其他任何改进。任何依赖于该工具的测试最终都会失败,因为代码总有一天会过时,并且与新的技术不再兼容。
这件事引发了开源软件社区越来越多的担心——在程序员逝世后,他的代码该怎么处理?
安全和性能问题
人们讨论过许多人死后的社交账号如何处理的问题,部分原因是因为许多公司和政府机构都依赖于各个团队维护的商业软件产品。但是今天,越来越多的程序都依赖于模糊却非常关键的软件,比如Weirich的软件。
一些开源项目很有名,如Linux操作系统和Google的人工智能框架TensorFlow,但这些项目也都依赖其他更小的开源库,而那些更小的库也会依赖于其他的库,最终造就了一个复杂且非常隐蔽的软件依赖关系网。
这会带来非常大的问题。比如2014年在OpenSSL里程序出了个著名的“Heartbleed”安全漏洞。几乎全世界每个需要处理信用卡或借记卡支付的网站都会使用OpenSSL这个开源软件,但实际上它的维护团队只有寥寥几名志愿者,而且他们也没有足够的时间或资源来进行所有的安全审查。在Heartbleed出现后不久,另一个著名开源软件Bash中也发现了安全问题,导致世界上无数的Web服务器和其他设备面临被攻击的风险。
肯定还有更多尚未发现的问题。一个名为Libraries.io的组织分析了软件项目之间的联系,发现超过2400个开源项目库都使用了1000多个其他的程序,但这1000多个程序几乎没有受到开源社区的任何关注。
而安全问题仅仅是问题的一部分。
如果软件库不能经常更新,那么总有一天会无法在最新的软件上运行。也就是说,所有依赖于过期软件库的软件都不能再运行。如果开发者去世,或者放弃一个项目,那么所有依赖于该项目的软件都会受到影响。去年,程序员Azer Koçulu从互联网上删掉了一个名为Leftpad的很小的软件库,结果连锁反应使得Facebook、Netflix和许多其他人都大为头疼。
公交车指数
一份软件的所有者越少,被孤立的风险就越高。开发者们甚至给它起了个名字:公交车指数——意思是说,多少人被公交车撞死会导致项目无人维护。Libraries.io发现,大约3000个常用的开源软件库只有少数几个维护者。
尽管商业软件厂商在停止支持旧软件时也会给用户造成类似的困扰,但总的来说,使用孤立的开源软件风险非常高。有时候,热情的程序员会收养孤立的开源代码。
Searls的Weirich项目就是类似的情况。Weirich最流行的项目在他去世时都有其他的管理者。但Searls发现其中一个项目——测试工具Rspec-Given并没有人接手,因此他想接过该项目并负责更新。但他遇到了一些困难。
Rspec-Given的代码放在了GitHub上。GitHub是全世界最流行的代码托管网站,上面托管了6700万个项目。Weirich的在GitHub上的Rspec-Given页面是人们报告bug或帮助改进代码的主要场所,但GitHub拒绝为Searls提供该页面的访问权,因为Weirich并没有在去世前指定他为管理者。因此,Searls不得不复制了该项目并放在了其他地方。他还必须说服Ruby Gems(一个用来分发软件的“包管理系统”)的管理者使用他的Rspec-Given版本,而不是使用Weirich的版本,这样所有Ruby用户才能访问到Searls的修改。GitHub拒绝讨论关于移交项目权限的政策。
这样就解决了与Rspec-Given有关的问题,但也让Searls意识到,许多事情都可能会出错。他说,“开源可以很容易地看成纯粹的技术问题。但一旦项目启动并被几百人使用之后,它就成了社会问题。”
绝大多数包管理系统的维护者都有一个临时的库权限移交流程,但这个流程仅在有人注意到某个项目已经被孤立,并且自愿收养的时候才会启动。Ruby Gems新项目的Evan Phoenix说:“我们并没有正式的政策,因为这个流程很少发生。但我们有个委员会来针对每件类似情况进行讨论。”
现在,一些包管理器会自动监视软件库,并对广泛使用但很久没有更新的软件做出标记。协助维护Perl编程语言的包管理器的Neil Bowers说,有时候他会寻找志愿者来收养孤立的项目。Bowers说,他的团队会找出被遗弃的项目,然后由其他人申请接管。
亡者开关
接管Rspec-Given启发了Searls,年仅30岁的他决定为他自己的开源软件项目立下遗嘱和后继的计划。开发者们也可以做一些事情来让软件包的未来更安全,比如,可以将版权转交给基金会,如Apache基金会。但许多开源项目都是作为个人兴趣开始的,所以很多程序员根本没有想过转移所有权。
Searls建议GitHub和Gems等包管理器能在各自的平台上加个“亡者开关”功能,以便在所有者很长时间不上线或不做修改后,自动将项目的所有权或所有者账号转移给他人。
但移交的计划远远不止允许别人访问代码这么简单。流行的数学库Matplotlib的创立者John Hunter于2012年逝世后,Michael Doroettboom接管了该项目,他指出,后继者必须能够理解代码。“有时候代码库里会有一部分只有一个人才能看懂的代码。”他说,“那些知识保存在了那个人的大脑中。”
总而言之,我们应当让别人尽早参与项目,最好是在别人一开始使用代码的时候。Searls指出,这样做还有其他的好处,比如可以分担维护的工作量,防止开发者过于疲劳。
原文:https://www.wired.com/story/giving-open-source-projects-life-after-a-developers-death/
作者:Klint Finley Business
译者:弯月,责编:郭芮
推荐阅读: