• 26
项目新生或泯灭?开发者去世后,开源项目该何去何从
统计 阅读时间大约5分钟(1960字)

2017-11-24 项目新生或泯灭?开发者去世后,开源项目该何去何从

安全问题只是这类事件的一个方面。

【猎云网(微信号:ilieyun)】11月24日报道 (编译:Denny)

编者注:本文作者为KLINT FINLEY,外媒科技专栏作家。

你可能从未听过Jim Weirich,或是他的软件,但你肯定用过基于他开发工具的应用程序。

Weirich帮助为Ruby语言创建了几个关键工具,Ruby是一款流行的编程语言,被用于Hulu、Kickstarter、Twitter等无数网站代码的编写。Weirich的代码是开源的,也就是说任何人都可以使用并对其进行修改。Ruby语言开发人员兼软件公司Test Double的联合创始人Justin Searls称他为“西方世界Ruby社区的创始人之一”。

在Weirich在2014年去世后,Searls注意到将没有人维护Weirich的其中一个软件测试工具。这意味着当其他开发者提交了错误修复、安全补丁或其他改进时,没有人去批准更改,随着代码的过时、与新技术的不兼容,任何依赖该于该工具的测试都将失效。

这一事件凸显了开源软件社区中越来越受关注的问题。程序员过世后,独一的代码何去何从呢?关于用户死后其社交媒体账号的处理有无数文章写过,但在程序员这个领域里,这却称不上什么大问题。部分原因是,大多数公司和政府所依赖的软件都有专员维护。但是如今,更多的程序依赖于像Weirich创造的这类晦涩而又重要的软件。

有的开源程序广为人知,如Linux操作系统、以及谷歌的人工智能框架TensorFlow。但实际上这些项目依赖于更小的开源代码库,这些代码库又依赖于其他代码库。这结果就是构成了一个复杂的、很大程度上不可见的软件依赖网络。

这一情况可能导致重大问题。如2014年,在开源程序OpenSSL中发现了一个名为“Heartbleed”的安全漏洞,而OpenSSL几乎被用于所有处理信用卡或借记卡支付网站上。这一程序与Linux的大多数版本捆绑在一起,但维护人员只是一小队志愿者,时间、资源的限制不允许他们做过多的安全调试。在Heartbleed漏洞修复后不久,另一常用开源程序Bash也被曝发现安全问题,将导致大量网络服务器等设备处于易受攻击状态。

安全问题只是这类事件的一个方面。如果代码库不保持更新,就有可能不支持新的软件。那么当用户更新软件时,依赖过时代码库的应用程序可能无法运作。当开发者去世、或放弃该项目时,所有依赖于该程序的人都会受到影响。去年,在编程师Azer Koçulu从网端删除一个叫做Leftpad的小代码库后,造成的连锁反应让脸书、Netflix等都倍感头疼。

“巴士因子”

掌握某一软件所有权的人越少,风险就越孤立。开发人员甚至专门为此取了一个病态的名字:“巴士因子(the Bus Factor)”,指的是在一个软件开发维护完全无法进行下去之前,需要有多少个团队成员被车压死。经Libraries.io鉴定,近3000多个开源库的维护人员数量极为有限,但是它们却被用于大量其他程序中。这也就是说,人数比例不足以保证开源库的稳定维护。

独立程序处于使用开源软件的风险下,当制造商停止更新、或停止运营程序,用户就会处于类似的困境中。在有的情况下,受鼓舞的程序员会“过继”孤儿开源码。

Searls在Weirich的一个项目中就是这样做的。在Weirich去世时,共同管理者参与管理了他的一些项目。不过Searls注意到,其中的测试工具Rspec-Given并没有被移交,于是他想负责更新这一工具。但是他在这个过程中还是遇到了一些麻烦。

Rspec-Given的代码托管在流行代码托管和协作站点GitHub上,近6700万个代码库在其上运营。Weirich在GitHub上的Rspec-Given页面是人们报告错误或自愿帮助改进代码的主要地方。但GitHub并未让Searls控制这个页面,因为Weirich在去世之前没有指名他接手。所以Searls必须为此创建一个新的Rspec-Given代码副本,并将其放在其他页面。此外他还必须说服分发代码的“数据包管理系统”Ruby Gems的运营商使用他的Rspec-Given版本,而不是Weirich的旧版本,以便所有用户都能获取Searls的改进。对此,GitHub拒绝讨论其项目转移控制政策。

这解决了与Rspec-Given工具有关的潜在问题,但也让Searls看到了更多可能出错的地方。Searls说:“人们很容易将代码开源看作一个单纯的技术现象,但是,一旦有些新事物出现,并被其他数百人所依赖,这也成为了一种社会现象。”

在软件包管理系统中,大多数维护人员至少在移交代码库上还有一个特定过程。虽然这个过程通常依赖于某人注意到一个程序成为孤儿程序,然后自愿采用这一过程。Ruby Gems项目的Evan Phoenix表示:“我们没有专门的官方政策,主要原因是这一情况并不经常出现,不过我们设置了顾问委员会,来逐个决定这类事项的处理。”

如今,一些软件包管理人员在监视他们的软件库时,会将使用广泛、但很久没有更新的项目标记出来。帮助维护编程语言Perl软件包管理器的Neil Bowers说,他有时候会找志愿者接管这些“孤儿项目”。 Bowers表示,他的团队将审查某个项目被放弃的声明是否属实,以及审查接手这一项目的人员。

“去世转交”措施

接管Rspec-Given启发了当时只有30岁的Searls,他为自己的开源项目制定了遗嘱和继任计划。此外,开发人员还可用一些别的方式来确保他们的成果不会过时。例如,他们可以将版权转让给基金会,如Apache基金会等。然而,很多开源项目本质上始于业余爱好,程序员可能不会想到要转移所有权,到那时为时已晚。

Searls认为,GitHub和Gems等软件包管理者可以在他们的平台上添加一个类似于“去世转交”的措施,如果创建者不再登录,程序员可以自动将程序或者帐户的所有权转让给其他人,或可在一定时间后对代码进行更改。

但是过渡计划不仅仅是让人们能够访问代码。 在Matplotlib算法库创始人John Hunter于2012年去世后,接任者Michael Droettboom指出,继任者也需要了解代码。他表示:“有时候其他人只能理解部分代码,知识只存在于创始人脑中。”

这意味着,让继任者尽早参与项目最理想时间是,程序刚被除开发者之外的用户采用时。Searls指出,这样的另一个好处就是能分配好维护项目的工作,防止开发人员倦怠。

1、猎云网原创文章未经授权转载必究,如需转载请联系官方微信号进行授权。
2、转载时须在文章头部明确注明出处、保留官方微信、作者和原文超链接。如转自猎云网(微信号:lieyunjingxuan
)字样。
3、猎云网报道中所涉及的融资金额均由创业公司提供,仅供参考,猎云网不对真实性背书。
4、联系猎云,请加微信号:jinjilei
相关阅读
推荐阅读
{{item.author_display_name}}
{{item.author_display_name}}
{{item.author_user_occu}}
{{item.author_user_sign}}
×