开源作者去世后,代码谁来继承?

文 | 肖滢

出品 | OSC开源社区(ID:oschina2013)

2008 年初,澳大利亚一对兄弟 Simon Zerner 和 Toby Zerner 开始了 esoTalk 的开发。不幸的是, esoTalk 尚处于 Alpha 阶段,主力开发人员哥哥 Simon 就在 2009 年年中去世。 

接替 Simon 维护和更新 esoTalk 的,是他弟弟 Toby。在 README.md 文件,写着这么一句话:“esoTalk 是 Toby Zerner 为纪念他的兄弟 Simon 而开发的。”最终,两兄弟留下了一个采用 PHP+MySQL 开发的,具有非常简单、快速、现代特性的开源论坛系统。 

esoTalk 的延续是那么地顺其自然。 

这就引出了一个话题,如果开源项目的作者去世了,代码由谁来继承?这实际上是两个问题。一是,版权由谁来继承;二是,代码由谁来维护? 

通常来说,继承版权和维护代码的不会是同一个人。毕竟,不是每个开源大佬都像 Simon一样,有个会写代码的弟弟。 

版权问题其实并不那么棘手。如果开源软件只有一个作者,那么版权完全归他所有。如果有多个作者,那么每个代码部分的作者,都拥有该部分的版权。 

有遗嘱就按遗嘱执行,没有遗嘱还有著作权法、继承法这样的法律来管。不管由谁继承,都不会过多影响用户使用开源软件。因为开源本身就具有特殊性,项目作者已经通过开源许可证,许可他人任意使用、复制、修改、分发代码,这已经包含了大部分版权所涉及到的权利。 

一般来说,作者在贡献之前会已经与项目维护的法律实体,比如基金会、企业,签订贡献者许可协议,将版权分配出去。签了这类协议,别说作者去世了,就是还活着,对交出去的代码,想做些什么也做不了。(详情可查看:贡献者许可协议(CLA),是开源开发者的保护伞还是枷锁?) 

所以问题就集中在,项目维护。其实很早就有人想要答案。 

未雨绸缪的假设 

“如果 Guido 被公交车撞了?”1994 年 6 月,有人在新闻组提出了一个假设。Guido van Rossum 是 Python 语言的发明者,同时也是 Python 社区的领导者。而这里的“公交车”,是许多可能的意外场景之一。 

06b8014fd4793525fd813502829513f4.png 

之所以会有这么一个问题,是因为 Python 对 Guido 过于依赖。对于想要使用 Python 的企业来说,就不得不考虑这样一个风险:如果 Guido 消失了,Python 还能活下来吗?商业产品有供应商基于利益继续支持,因此风险较低,但像 Python 这样的学术研究项目,如果开发人员的兴趣发生变化,或者开始了新工作,不久之后该项目可能会消失。 

这个问题不仅让企业用户担心,同时也在 Python 社区引起了讨论和重视。之后,虽然 Guido 仍然扮演核心角色,但社区一步步地通过成立基金会、指导委员会等方式来监督 Python 的未来。 

这一讨论影响范围甚广。几年后,有人在 Ruby 社区提出了一样的问题,“如果创始人 Matz 被公交车撞了该怎么办”。 

Matz 表示:“因为 Ruby 是我的快乐之源(至少在计算机领域是这样),只要我活着,我就不会放弃对 Ruby 的控制。” 并且他还进行了“提名” :“如果我发生了什么事,欢迎开源。所有的源代码都在那里,我希望 Shugo Maeda、Guy Decoux 和其他人会继续开发这个解释器。我相信,Dave Thomas 会告诉社区该走向何方。他和我一样理解 Ruby 哲学。” 

Debian 社区在 2005 年就认识到,在任何关键职位上,至少应该有两个活跃的人。“多少人被公交车撞到才会导致项目停止,我称之为公交车指数。指数≤1 是非常糟糕的。”开发人员 Petter Reinholdtsen 表示,对 Debian 来说,确保特权职位有良好的冗余非常重要。 

b285cd5d60ef4206d8e8d0c4eb224edd.png

此外,Debian 还主张将权力分散,而不是集中于领导者一人身上。比如,Debian 负责人可在特定的领域做出决定,但是须将之交付给另外的技术负责人;民主程序可以罢免项目负责人和推翻负责人的任何决定等等。(详情可查看:开源长老 Debian 就是这么硬气!)因此当 Debian 的创始人 Ian Murdock 去世时,社区实现了平稳过渡。 

可见,对于贡献者众多,还有基金会、委员会等组织护航的开源项目来说,核心人员的离去并不会带来太大的打击。没有某个特定人物长期把持决策,也就没有人能在社区引起动荡。 

这个问题最终被延伸为,如果社区中某一个人拥有的特权过多,在他出现意外之前,应该做些什么来保证项目正常运转。 

鉴于 Linus 在 Linux 社区的独裁统治,所以大家关心的问题也就变成了:如果 Linus 被公交车撞了? 

小众项目续命难 


不是所有项目都像 Python、Ruby 一样这么幸运。对于较为小众的开源项目来说,创始人去世后,想要续命并不容易。

web.py 是一个用于 Python 的轻量级 web 框架,2013 年初,创始人 Aaron Swartz 自杀身亡。在此后的三年间,该项目几乎陷入了停滞。GitHub 上的 web.py 仓库虽然有少量的代码提交记录,但再也没有发布新版本。 

之后几年,虽有开发者相继接棒进行维护,但 web.py 的前景也难掩颓意。web.py 的命运,会迎来转机吗?或许很难。不论是 GitHub 上最新的提交记录,还是社区网站上最新的邮件讨论,都停留在 2020 年。一年多了,它们仍然静悄悄。 

像 web.py 这样由于主要开发者去世而导致项目搁浅的事情并不鲜见。就连在 Ruby 社区颇有名望的贡献者 Jim Weirich 去世后,他创建的两个最受欢迎的项目—— Rake 和 Builder,在两年之内都没有新版本发布记录。不过好在最终被人注意到了,Weirich 开发的多个开源工具都有了继任者。 

还有更多少为人知的开源项目,湮没在时间的长河之中。 

这其实跟创始人主动抛弃一个项目面临着一样的问题:代码给交给谁。但又有很大不同,主动意味着有的是时间讨论或计划给它找个好下家。 

而没有人维护,那就意味着,如果其他开发人员提交错误修复、安全补丁或其他改进,将没有人批准更改,这个项目很快就会因为代码过时,或者与新技术不兼容而被用户放弃。 

一位 web.py 用户说,将不会在新项目使用 web.py,因为它没有得到积极维护。Flask/Werkzeug、Bottle 和 Tornado 基本上填补了相同的“微框架”细分市场,它们明显更好、更现代。 

继任者是必要的 


有人认为,应该任其自生自灭,因为如果一个开源项目有价值,那么它自然有人继承。但事情并没有这么简单。 

一个项目被放弃,尤其是一些被高度使用的底层关键库被放弃,可能会导致数十万个软件应用程序受影响。像 Linux 或深度学习框架 TensorFlow 等著名的大项目,都依赖于较小的开源代码库,而这些库又依赖于其他库,从而形成了一个复杂、庞大的软件依赖网络。Libraries.io 的分析显示,用于超过 1000 个其他程序的开源库多达 2400 多个,但它们很少受到开源社区的关注。 

42ddd95d2ea95b86225295bcae1e6f94.png

Debian 10 buster 服务器软件包依赖关系 

因此,为那些因开发者突遭变故而被抛弃的开源项目找到继任者是很有必要的。在接手 Weirich 遗留的 Rspec-Given 项目之后, Justin Searls 就为自己的开源项目制定了遗嘱和继任计划。WIRED 杂志的撰稿人 Klint Finley 认为,将版权转让给开源组织,比如 Apache 基金会,也是一个明智的选择。 

即使有能力有意愿维护开源项目,但在实际操作中可能会遇到不少麻烦。Klint Finley 记录了 Searls 在这个过程中有多难。“GitHub 拒绝让 Searls 控制 Rspec-Given,因为 Weirich 没有为他提供权限。所以 Searls 不得不创建一个新的代码副本,并将其托管在其他地方。他还必须说服 Ruby Gems(一个用于分发代码的“包管理系统”)的运营商使用他的 Rspec-Given 版本,而不是 Weirich 的版本,以便所有用户都可以访问 Searls 的更改。GitHub 拒绝讨论关于转移项目控制权的政策。” 

无独有偶,Luacheck 的继承也因为所有权转移的问题,拉锯了两三年。Luacheck 是一个用于对 Lua 代码进行 linting 和静态分析的工具,创建者 Peter Melnichenko 去世之后,GitHub 上的仓库就一直处于悬而未决的状态。之后,尽管社区创建了分支,但在 Google 搜索“luacheck”,Peter 创建的仓库仍然是第一个结果,直到今天,人们仍在向旧的仓库发布 issue。 

89ce45cf76c4310201b47f64c6001be8.png 

几年前,Searls 曾建议 GitHub 和 Gems 等包管理器可以在他们的平台上添加类似“亡者开关”的东西,万一创建者长时间没有登录或者修改,系统可以自动将项目或帐户的所有权转移给其他人。 

“亡者开关”没有在 GitHub 实现。不过, GitHub 在 2020 年 5月新增了一项功能:添加账户的继任者。它允许仓库所有者在无法管理的情况下,邀请同平台的其他用户作为继任者。继任者虽然不能直接登录原帐户,但他们可以将公共仓库进行存档以及转移。 

GitLab 也正在讨论账户继承这一事项。GitLab 表示,这主要是为了应对账户所有者去世的情况。尽管初衷是为了解决由于账户长期不使用可能出现的身份盗用或其他与安全相关的问题,不过同时也明确了开源仓库官方继承的流程。如果能够提前指定继任者,Searls 曾经面临的问题不会再出现。 

“添加继任者”这一功能不过是扫清了些许障碍,但会让开发者或者开源社区更早地认识到,未雨绸缪是很有必要的。 

话说回来,最难的还是找到合适的继任者。倒也不必灰心,不妨把更多的视线拉回到开源这件事情上来。代码开源之后,它就有了无限续命的可能。假以时日,会出现有能力有意愿的开发者将它们捡起来并变成自己的。正如 WhiteSource 的首席执行官兼联合创始人 Rami Sass 所言:“它不属于任何人,它属于每个人。”

END

a5e01f585de0078ebb74f18a3f66fa85.png觉得不错,请点个在看呀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目中使用CLR编程

1、创建自己的项目 2、右键“解决方案。。。”→添加→新建项目→C#→数据库→SQL Server项目,如下图所示: 3、选择操作数据库

SDN火爆!未来五年年复合增长率达98%

在如今的网络世界,软件定义网络SDN和网络功能虚拟化NFV成为了新的“宠儿”,特别是对于运营商来说,已经将它们视为面向未来转型的关键。因此已经有越来越多的运营商开始尝试引入SDN和NFV技术,尽管它们的标准还尚未完善。 最早采用S…

python桌面程序开发_程序员之路:python3+PyQt5+pycharm桌面GUI开发

先看效果:图 1 没错,学过C#的同学应该很熟悉这个界面,按钮风格和界面风格很相似,万万没想到,python也可以做出这样的界面,简直了!(图 1) 正文开始 一、安装python 为啥要…

转: MySQL 赋予用户权限(grant %-远程和localhost-本地区别)

2019独角兽企业重金招聘Python工程师标准>>> ‍‍相关参考资料:MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。 grant s…

kafka控制台模拟消费_Kafka 详解

kafka简介Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需…

python在web可以开发吗_Python Web开发

参考原文 WSGI接口 WSGI(Web Server Gateway Interface)是一个接口,用来屏蔽底部的细节(如TCP的建立连接,HTTP原始请求和响应格式等)。WSGI接口定义非常简单,只需要Web开发者实现一个函数&#…

更新丨.NET 7 预览版2 中的 ASP.NET Core

点击上方蓝字 关注我们(本文阅读时间:6分钟).NET 7 预览版2 现已推出,其中包括对 ASP.NET Core 的许多重大改进。以下是此预览版中新增内容的摘要:• 推断来自服务的 API 控制器操作参数;• SignalR 集线器方法的依赖注…

LoadRunner+Android模所器实现抓包并调试本地服务端

为了测试Android软件的服务端的功能,需要重现某些客户端操作,便于发现功能问题,性能问题。也方便客户端与本机服务端特别是服务端代码进行断点调试。这个时候需要对网络操作进行重现。loadRunner是hp公司开发的压力测试工具。功能比较强大&am…

架构师

系统架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的人。具体来说是一个确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员。主要着眼于系统的“技术实现”…

统信uos系统考试题_148款!富士通及旗下晟拓品牌系列打印机适配统信UOS

近日,南京富士通电子信息科技股份有限公司(简称:富士通)及其旗下晟拓子品牌148款主流打印机产品与统信桌面操作系统UOS的适配工作即将完成,这次适配涵盖了富士通及晟拓的常用主流机型。富士通正式成为统信软件产品生态合作伙伴。本次适配&…

手机浏览器html5游戏,移动浏览器都爱 HTML5 ?

目前中国第三方手机浏览器市场竞争正在愈演愈烈,但由于各应用开发商对手机浏览器的内容和资源的整合能力、技术研发能力、战略布局目的等方面均各不相同,浏览器产品也出现了同质化严重、内容匮乏等问题,亮点突出、吸引用户的产品较缺乏&#…

怎么快速了解自己的MySQL服务器?

From: http://www.cnblogs.com/benshan/archive/2013/01/09/2853097.html 1、查看数据库服务器状态:status Linux 下的MySQL服务器状态 该列表中主要包括MySQL的版本(为version 5.1.61)、运行平台(debian-linux-gnu(i686)&#xf…

八类网线和七类网线的区别_什么是七类网线?七类网线水晶头如何制作?

要了解七类网线如何使用?需要掌握这四个问题:1、什么是七类网线?2、七类网线与六类网线有什么区别?3、七类网线用什么水晶头?如何制作7类网线水晶头?4、7类网线的应用场景?带着这四个问题&#…

poj2632 累死了

题意: 给定A*B的格子,放入N个机器人,每个机器人初始位置及朝向给定。给定M条指令。指令类型有三种: 1、L:左转90 2、R:右转90 3、F:前进一格 问执行指令过程中机器人是否发生碰撞&am…

代码生成器原理

整个架设思路分的4个部分:A:底层物理数据库层,主要是存储数据用的。B:数据库访问层,主要是为了写一套代码可以跑在多种数据库上。C:一些辅助工具、基础组件,是为了加强自动产生代码的功能、简化…

【Blog.Core开源】将Program升级为.NET6.0版本

大家假期好,好久不见,之前忙于其他事情,公众号暂时搁置了一个月了,新的一年开始了,很多小伙伴开始催更了,粉丝的要求必须满足。2022年打算重点推广BCVP社区,所以还是希望有愿意投稿的小伙伴&…

python画两条曲线_查找在matplotlib中绘制的两条曲线之间的区域(在区域之间填充)...

我有两条曲线的x和y值列表,它们都有奇怪的形状,而且我没有任何函数。我需要做两件事:(1)绘制它并对曲线之间的区域进行着色,如下图所示;(2)找到曲线之间该着色区域的总面…

OXY OPENCART 商城自适应主题模板 ABC-0020-05

OXY OPENCART 商城自适应主题模板 ABC-0020-05OXY FEATURESLayoutFoundation Framework – the most advanced responsive front-end framework in the world.100% Fully Responsive – Solid Flexible Responsive Layout that scales from 320px to 1440px.You can disable re…

年月跨度_建筑结构丨国内跨度最大的张弦桁架工程——合肥滨湖国际会展中心二期首榀桁架滑移成功...

来源:中建科工 华中大区。2020年12月8日全国公建领域最大跨度的张弦桁架钢结构工程合肥滨湖国际会展中心二期首榀桁架滑移顺利完成合肥滨湖国际会展中心二期项目位于合肥市滨湖新区锦绣大道与广西路交口,该项目2#综合馆建筑面积约4.8万平方米&#xff0c…

【C#/.NET】不用AutoMapper,我用啥呢?

微信公众号:趣编程ACE关注可了解更多的.NET日常实战开发技巧。如需源码请后台留言源码;**[如果觉得对您有帮助,欢迎关注]TinyMapper简介本文来自社区群粉丝投稿TinyMapper是一个.NET平台下的一个轻量级对象映射工具,号称是.Net平台下最快的对…