为何程序员们更倾向于闭源?

发表时间: 2019-07-15 16:33

近年来,“开源”成为各大科技公司技术加速落地与普及的推动力,不过在不断迭代的发展中,我们也发现一个至关重要且亟需解决的一个问题:发布自行研制的开源软件通常需要开发人员投入海量的不可预见的工作。如今虽然开源软件在科技界被公认为至关重要的软件,但它的资金支持却是不可持续的。

此前,我们也根据诸多的调查报告发现,很多个人开发者之所以不选择开源的首要原因就是在时间精力有限的情况下维护开源项目的成本太高。

针对这一问题,究竟该如何在研发维护与资金支持间保持平衡?对此,你有着什么样的看法?

作者 | Anna Nowogrodzki

译者 | 苏本如,责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

4月10日,天体物理学家宣布他们拍摄了有史以来第一张黑洞照片。这是一个令人振奋的消息,但是这些令人眼花缭乱的新闻却没有一个提到,如果没有开源软件的帮助,拍摄这个照片是不可能的。这张照片是使用 Matplotlib 这个 Python 的绘图库, 以及开源 Python 生态系统的其他组件创建的。然而,就在五天后,美国国家科学基金会(NSF)否决了一项资助该开源生态系统的拨款提案,称该软件缺乏足够的影响力。

这是一个常见的问题:开源软件在科技界被公认为至关重要的软件,但它的资金支持却是不可持续的。开源软件的支持工作通常由过份努力的研究生和博士后加班处理,这往往导致他们筋疲力尽。位于马萨诸塞州剑桥市的哈佛大学暨麻省理工学院的布罗德研究所的计算生物学家安妮·卡彭特(Anne Carpenter)所在的实验室开发了图像分析工具 CellProfiler,她说。“这就像当他们的奶奶去医院的时候,有医疗保险支持和只能依靠 GoFundMe 众筹平台的区别。对开源软件而言,这不是一种健康的生存方式。”

编写开源软件的科学家往往缺乏软件工程方面的正规培训,这意味着他们可能永远不会有机会学习代码文档和测试的最佳实践。但维护不善的软件又会浪费时间和精力,并妨碍软件的重用性。纽约冷泉港实验室的计算生物学家亚当·西佩尔(Adam Siepel)说,使用计算工具软件的生物学家通常要花费“一个又一个小时”的时间来让其他研究人员写的代码运行起来。亚当·西佩尔同时也是 PHAST 的一名维护人员,而 PHAST 是一种用于比较和演化基因组学的工具软件。“他们要花时间找到这些代码,但有时没有网站可找,或者链接断了,或者编译不通过,或者当他们试图在他们自己的数据上运行软件时,软件崩溃了。”

但也有一些资源可以提供帮助,还有一些模型可以模仿。德国海德堡欧洲分子生物学实验室的计算生物学家沃尔夫冈·胡贝尔(Wolfgang Huber)说,如果你的研究小组计划发布开源软件,你可以开始为软件的支持工作以及人们开始使用后出现的问题做准备了。这项工作并不容易,但它可以为开发人员赢得赞誉并提高他们的知名度,同时提高该领域的工作效率。他另外补充道,“我认为这是一种乐趣。”

有一个计划

对于科学软件的开发人员来说,软件发布日不是工作的结束,而是开始。来自北卡罗来纳州罗利市的赛伦斯的数据科学家蒂姆·霍珀(Tim Hopper)在 Twitter 上说道:“给一个人一条鱼,你只需要喂他一天。写一个为他钓鱼的程序,你就要用一辈子来维护它。”安妮·卡彭特雇佣了一名全职软件工程师来处理 CellProfiler 软件的维护工作,该程序每年记录大约 700 个问题和 100 个错误报告或新功能请求,或者每周记录大约 15 个问题。但大多数开源软件维护都是基于自愿的基础上完成的。“这些维护工作都是我自己在午夜后做的。”承担了 PHAST 技术支持工作的亚当·西佩尔说。

为了应对即将发生的事情,了解你将要从事的工作性质会很有帮助。一些软件只需要短期支持,而其他软件可能会使用几十年。Nelle Varoquaux 指出,在生物学机器学习领域,软件工具很快就会过时,因为数据集的大小变化是如此之快。Nelle Varoquaux 是加州大学伯克利分校的计算生物学家,也是Scikit-Learn(一种基于 Python 语言的机器学习工具包)的共同开发人员。她说:“当我开始攻读博士学位时,我所做的每件事都需要用到随机存取存储器,而且我从来没有碰到过内存问题。”但是今天,内存变成了一个巨大的挑战。她估计,她为了分析 DNA 和染色体构造而建立的两个工具(Iced 和 Pastis),在经过五年的维护时间后,就会变成过时了。

她补充说,软件过时并不是一件坏事:知道何时停止对软件的支持是一项重要技能。“在一个工具的效用达到极限时让其死去,或者当维护者想要退出时,让它成为孤儿并为它寻找一个养父母。” 沃尔夫冈·胡贝尔 这样建议道。

约哥伦比亚大学的机器学习科学家安德烈亚斯·穆勒(Andreas Mueller)指出,无论你的软件要使用多长时间,良好的软件工程实践和文档都是必不可少的。这些包括持续集成系统(如TravisCI),版本控制(Git)和单元测试。穆勒说道:“持续集成系统会在你每次修改代码时后,告诉你代码是否仍然有效,或者是否遭到了破坏,只要你为它编写正确的测试程序来运行。版本控制则是一个记录源代码更改的系统,这样你就能够在必要时将代码恢复到任何以前的版本;而单元测试则测试每个单独的组件,以确保它的完好无损。三者结合在一起,会100%节省你的时间”。一些组织,如志愿者运营的Software Carpentry和西雅图华盛顿大学的eScience研究所,举办软件开发训练营,并在Github上提供教程。位于阿姆斯特丹的荷兰eScience中心则在网站https://guide.escience center.nl上提供了软件开发最佳实践指南。

为了便于维护,Nelle Varoquaux建议将重点放在代码可读性上,而不是峰值性能上。她说:“我总是努力让代码保持良好的可读性,有良好的文档记录和并且仔细测试,这样如果有什么东西坏了,我可以很快修复它。”

当涉及到软件时,这是不可避免的:“一旦你有了用户,他们就会发现bug,” Nelle Varoquaux说道。而沃尔夫冈·胡贝尔则建议通过使用像Stack Overflow这样的公共论坛来回答用户问题,在那里用户可以使用软件名称来标记他们遇到的问题。他建议:“不要回复用户发来的寻求支持的私人邮件。”并指出公共论坛有三个优势。首先,他们接触的用户比单个电子邮件多。相对于一个写电子邮件的人来说,可能会有100个人太害羞了而不敢提问。第二,他们倾向于鼓励更专注和更深思熟虑的问题。第三,他们可以阻止用户不要发送同样的问题给多个软件维护人员从而浪费他们的宝贵时间。

沃尔夫冈·胡贝尔还建议将你的软件提交到一个代码存储库,如CRAN(Comprehensive R Archive Network)或Bioconductor中,而不是发布到你的个人主页或Github中。CRAN或Bioconductor是一个用R语言编写的生物软件的伞状存档网络。像科学期刊一样,这样的存储库有专人管理,并且在提交时有命名规范和组件要求的指南。沃尔夫冈·胡贝尔提出,CRAN和Bioconductor在多个平台上提供测试和持续集成,以及强大、易于使用的安装程序。

资金支持

软件支持需要时间和资金。但资金可能难以获得。美国国立卫生研究院(NIH)和美国国家科学基金会(NSF)关注于新技术的研究,而开源软件的维护工作往往不符合他们的要求。安妮·卡彭特说:“总的来说,这确实是资助机构的悲剧。他们会资助50个不同的小组来创造50种不同的算法,但他们不会为一个软件工程师付钱。”

但这些组织和其他组织确实提供了一些资金。一个Twitter话题(详见go.nature.com/2yekao5)记录了来自NSF的生物基础设施司,NIH的人类基因组研究所和国家癌症研究所,以及NSF和英国生物技术和生物科学研究委员会(现为英国国家科研与创新署(UKRI)的一部分)的联合项目的资助。私人的美国基金会,如戈登和贝蒂摩尔基金会,艾尔弗·斯隆基金会和扎克伯格夫妇成立的CZI基金会也在资助开源软件的支持工作。CZI基金会为基于Python的图像处理软件scikit-image,ImageJ和Fiji platforms提供资金支持,同时也为安妮·卡彭特团队的软件工程师提供资金支持。

在英国,爱丁堡大学的软件可持续发展研究所为英国的研究人员或其合作者提供免费的、简短的软件可持续性在线评估,以及3000英镑(合3800美元)的奖学金。该研究所定期为人们提供长达六个月的时间与专家合作开发新软件或改进现有软件和维护实践的机会。在德国,沃尔夫冈·胡贝尔建议欧盟网络拨款委员会和德国科技部下辖的deNBI基金会为Bioconductor提供资金支持。

数字基础设施维护的普遍问题越来越受到重视。Nelle Varoquaux和她的同事从艾尔弗·斯隆基金会和福特基金会获得了138,000美元的资助,用于研究“维护开源软件的可见和不可见的工作”,包括投入时间从事这项工作的研究人员的过度劳累。这笔资助是由13个数字基础设施研究项目组成的投资组合的一部分,总计资助总额达130万美元之多。今年5月,CZI基金会宣布批准三项要求资助开源生物医学软件的申请,其中第一项资助将于今年6月开始。亚当·西佩尔在《基因组生物学》杂志上也发表了一篇评论文章,讨论了对开源软件的支持工作提供资助面临的挑战。

编写方便他人在广泛数据基础上使用的软件比编写只为你自己工作的软件要花费更多的精力。沃尔夫冈·胡贝尔说道:“这个差别非常之大,至少相当于一篇发表在《自然》杂志上经过润色的论文和在实验室会议上演示基本实验结果的第一堆幻灯片之间的差别。”

不过,这种时间和精力的投入还是有实际价值的。亚当·西佩尔的团队有时会回答用户提出的问题,并指出他们将软件应用在错误的数据上。这是进化生物学家才会注意到的细微之处,但是软件工程师可能不会注意到。“有一句惯用语叫:吃自己的狗粮。” 沃尔夫冈·胡贝尔说:“如果你用自己开发的软件来解决你面临的真正的问题,那么你就会知道这个软件哪里不好,哪里有缺失。让一个领域专家编写解决这个领域问题的软件往往会使这个软件更加有价值。”

原文: https://www.nature.com
/articles/d41586-019-02046-0

【End】