开源最前线(ID:OpenSourceTop) 猿妹编译
编译自:https://www.wired.com/story/giving-open-source-projects-life-after-a-developers-death/
你可能从来没有听说过 Jim Weirich 或他的软件。但是你几乎肯定会使用基于他的软件开发出来的应用程序。
Weirich 为 Ruby 创建了几个关键工具,Ruby 是一门面向对象的脚本语言,Hulu,Kickstarter,Twitter 等许多网站代码都有用到 Ruby。Ruby 的代码是开源的,这意味着任何人都可以使用它并对其进行修改。Ruby 开发人员兼软件公司 Test Double 的联合创始人 Justin Searls 说:“他是西方 Ruby 社区的重要成员。
当 Weirich 在 2014 年去世时,Searls 注意到没有人维护 Weirich 的软件测试工具。这意味着如果其他开发者提交了错误修复,安全补丁或其他改进,就没人审核通过。任何依赖该工具的测试最终都会失败,代码也会变得过时,并且与新技术不兼容。
这件事情凸显了开源软件社区日益关注的一个问题。程序员过世后代码接下去怎么办呢?关于用户死后社交媒体账户会发生什么的文章已经写得很多了,但关于程序员过世后代码如何处理的问题却鲜有人关注,部分原因是因为大多数公司和政府都依赖于商业软件。但是今天,更多的程序依赖于像 Weirich 这样不容易理解但却很重要的软件。
一些开源项目是众所周知的,如 Linux 操作系统或 Google 的人工智能框架TensorFlow。但是这些项目中的组成部分都依赖于更小的开源代码库。而这些代码库又依赖于其他代码库。这样就形成了一个复杂并且不为人知的软件网络结构。
这可能会带来很大的问题,如 2014 年,在 OpenSSL 中发现了一个被称为“Heartbleed”的安全漏洞,几乎每个处理信用卡或借记卡支付的网站都使用这个开放源代码程序。该软件与大多数 Linux 版本捆绑在一起,但由一志愿者小组维护,他们没有时间或资源进行安全修复。在 Heartbleed 惨败后不久,另一个常见的开源应用程序 Bash 中也发现了一个安全问题,这使得无数的 Web 服务器和其他设备容易受到攻击。
现在肯定还有很多未发现的漏洞。Libraries.io 是一个分析软件项目间关系的团队,已经确定了 2,400 多个开放源代码库,被其他 1000 多个程序使用,但是却很少受到开源社区的关注。
安全问题只是其中的一部分。如果软件库没有及时更新,就可能会停止软件升级。这意味着在用户更新其他软件之后,依赖于过期代码库的应用程序可能无法运行。当开发人员死亡或放弃项目时,依赖该软件的每个项目都可能受到影响。去年,当程序员AzerKoçulu 从互联网上删除了一个叫做 Leftpad 的小代码库时,就造成了涟漪效应,据说在 Facebook,Netflix 和其他地方都受到影响。
巴士系数
一个开源软件维护的人越少,被孤立的风险就越大。开发者们甚至取了一个病态的名字:巴士系数,通俗的说就是在某个项目停止维护之前有多少应用程序在使用它。 Libraries.io 已经确定了大约 3000 个开源库,在许多其他程序中使用,但只有少数贡献者。
项目被孤立是使用开源软件的风险,但商业软件制造商也有可能会停止支持或更新旧程序。在某些情况下,有的程序员会采用被孤立的开源代码。
这就是 Searls 和 Weirich 项目中的遇到的实际问题。Weirich 最受欢迎的项目在他去世的时候有共同管理者。但是 Searls 注意到一个测试工具 Rspec-Given 并没有移交,他想要负责更新它。但他一路上却遇到不少麻烦。
Rspec-Given 的代码托管在代码托管和协作站点 GitHub 上,后者目前拥有 6700 万个代码库。 Weirich 在 GitHub 上的 Rspec-Given 页面是其他 Ruby 用户报告错误或自愿帮助改进代码的主要地方。但 GitHub 不会让 Searls 控制这个页面,因为 Weirich 在他去世之前还没有进行命名。所以 Searls 必须创建一个新的代码副本,并将其转移到其他地方。他还必须说服分发代码的“包管理系统”Ruby Gems 运营商使用他的 Rspec-Given 版本,而不再是 Weirich 的版本,以便使所有用户都能访问的变更。 GitHub 拒绝讨论其关于转移项目控制的政策。
相关方法能够解决与 Rspec-Given 有关的潜在问题,但是它也让 Searls 看到了许多可能出潜在问题。 Searls 说:“我们很容易将开源看作一种纯粹的技术现象。但是,一旦有些事情产生,并且被其他人所依赖,这也是一种社会现象。”
大多数软件包管理系统的维护人员至少有一个专门的流程来转移对库的控制权,但是这个过程通常取决于是否有人能够注意到项目已经被孤立,然后自愿接管它。 Ruby Gems 项目的 Evan Phoenix 说:“我们没有官方政策,主要是因为它不会经常出现。 “我们有一个顾问委员会,用来逐个处理这种类型的事情。”
现在,一些软件包管理人员会监视他们的库运行状态,并标记那些很久没有更新且使用频繁的项目。协助维护编程语言 Perl 软件包管理器的 Neil Bowers 说,他有时候会寻找志愿者接管孤立项目。鲍尔斯说,他的小组时常会指出,一个项目已经被开发者放弃,并推荐接管人。
一个“逝者开关”
只有 30 岁的 Searls 接管 Rspec-Given 时,为自己的开源项目制定了遗嘱和继任计划。开发人员还可以做其他事情来帮助未来的工作。例如,他们可以将版权转让给基金会,比如 Apache 基金会。但是许多开源项目本质上是以业余爱好开始的,所以程序员可能不会想到要转移所有权,等他意识到这一点的时候已经晚了。
Searls 认为,GitHub 和 Gems 等软件包管理者可以在他们的平台上添加一个类似于“逝者开关”的东西,如果创建者长时间没有登录,程序可以自动将项目或者帐户的所有权转让给其他人。
但是过渡计划不仅仅是让人们能够访问代码。迈克尔·德罗特姆(Michael Droettboom)在 2012 年创建人约翰·亨特(John Hunter)去世后接管了一个名为 Matplotlib 的 2D 数字绘图库,指出继任者也需要理解这些代码。他说:“有时候只有一个人只能理解部分代码,确切的说这些知识只存在于一个人的头脑中。”
一旦项目被原始开发人员以外的人使用,最好的办法就是尽早让他们参与进来,Searls指出,这还有另外一个好处就是分配维护项目的工作,可以防止开发人员的倦怠。
●本文编号2752,以后想阅读这篇文章直接输入2752即可
●输入m获取文章目录