开源评估框架
本文由本人翻译自 Bilgin Ibryam 的 A Framework for Open Source Evaluation,首发在云原生社区博客。
如今,真假开源无处不在。最近开源项目转为闭源的案例越来越多,同时也有不少闭源项目(按照 OSI 定义)像开源一样构建社区的例子。这怎么可能,开源项目不应该始终如此吗?
开源不是非黑即白,它具有开放性、透明、协作性和信任性的多个维度。有些开源是 Github 上的任何项目,有些必须通过 OSI 定义,有些是必须遵守不成文但普遍接受的开源规范。这里通过看一些商业和技术方面,再讨论社区管理习惯,来同大家分享一下我对评估开源项目的看法。
免责声明
- 这些是我的个人观点,与我的雇主或我所属的软件基金会和项目无关。
- 这不是法律或专业意见(我不是律师,也不是专门从事 OSS 评估的),而是外行的意见。 更新:我收到了多位开源律师的反馈并更新了文章!
- 这篇博文由订阅和分享按钮赞助,点击这些按钮表示支持。
知识产权
关于“开源”项目的第一个问题是关于知识产权的所有权。好消息是,即使不了解这些法律含义,你可以应用一个简单的 Litmus 测试。该项目是否属于你信任的信誉良好的开源基金会?例如,FSF 拥有其托管项目的版权,更多情况下拥有基金会(如 ASF、LF) 通过贡献者许可协议,聚合对其项目的贡献许可权。在任何一种情况下,你都可以相信他们将充当良好的去中心化管家,并且不会在一夜之间改变项目的未来方向。如果一个项目不属于信誉良好的软件基金会,而是由一家公司提供支持,那么问题是你是否信任该公司作为供应链合作伙伴。如果这些问题的答案是肯定的,请转到下一部分。如果答案是否定的,那么你最好调查一下版权所有者是谁,以及他们对你的长期前景和潜在风险是什么。今天的单一供应商开源项目,明天可能会变成闭源。
许可
商标出现在许可之前的原因是软件的权利人(通常是作者)通过许可授予最终用户使用一个或多个软件副本的许可。自由软件许可证是一种说明,它授予源代码或其二进制形式的使用者修改和重新分发该软件的权利。如果没有许可,这些行为将受到版权法的禁止。这里的重点是权利人可以改变主意并更改许可。权利持有人可以决定在多个许可证下分发软件或随时将许可证更改为非开源许可证。该软件也可能在公共领域,在这种情况下,它不受版权法的限制。公共领域并不等同于开源许可证,这是一种不太流行的方法,我们可以在这里忽略。
同样,如果不是律师,这是一个外行对许可的 Litmus 测试:该项目是否根据 OSI 批准的许可清单获得的许可?如果答案是肯定的,那么你可以依靠这些基金会的尽职调查来审查、分类许可并指出任何限制。如果答案是否定的,请让你公司的律师来查看和解释许可上的每个字以及可能的许可兼容性影响。
治理
在余下的检查中,我们正在从更多的商业和法律方面转向涉及开源项目领域的技术和社区。
假设不担心商标持有方(未来的合作伙伴)、许可(使用开源软件的条款),下一个问题是治理。治理是项目决定谁来做什么、他们应该如何做以及何时做的规则或习惯。它定义了与不同项目角色相关的职责、特权和权限,以及人们如何分配到角色和从角色中删除。此处的示例是小型日常活动,例如谁有权批准拉取请求、投票给候选发布、就项目架构达成共识、定义项目路线图以及选举项目治理委员会。
如果你正在评估对你的组织具有战略意义的项目,你想知道谁负责。不仅如此,你甚至可能希望你的开发人员对项目的方向有发言权。
还有一个简单的 Litmus 测试:对于开源基金会的项目,对于谁可以对重要决策进行投票,以及如何成为决策委员会的一部分,都有明确的规则。在某些基金会(例如 ASF)中,它基于社区成员的个人功绩,而在某些基金会(例如 CNCF )中,它从成为付费成员组织的员工开始。在基于区块链的开源项目中,它是基于令牌(Token)的投票持有人。其他基金会有不同的规则,但都力求在多个参与者之间实现中立和权力下放。如果一个项目由一家公司或一个人管理,你相信他们会为项目和社区的利益做出最佳决策。其中一些项目可能已经写下了他们遵循的治理规则,而有些可能根本没有。由你来确定治理动态及其对你的项目参与的重要性。除了具有治理透明度和公开决策之外,另一个方面是治理机构的信任度和声誉。当你查看项目的治理委员会时,是否有一位或一组具有经过验证的技术和社交技能的领导者,让你相信他们可以将项目提升到一个新的水平?或者你是否看到一个在政治斗争中不断争论的团体?这些是开源项目是否会成功并长期发展的一些指标,还是可以预期的头痛和停滞。
基础设施
拥有开源许可可能在技术上有资格作为开源项目,但这并不能说明项目是否以开源方式构建。有许多在 OSI 批准的许可下发布的软件示例,但它们是在封闭的基础设施之后开发的。通过基础设施,我的意思是用户快速提问的聊天频道。进行更深入的开发人员讨论的论坛和邮件列表。审查拉取请求的源代码管理系统,以及运行测试和每晚创建二进制文件的构建服务器。
对于关注开源项目的商务人士和律师来说,这些可能并不重要,但对于将要使用开源项目的技术人员来说,这些是一些假设的好处。这里要做的检查是探索软件是否是使用开放式基础设施以开源方式开发的,而不是闭门造车。以下是几个示例问题:
- 用户可以在项目聊天中提出问题并在没有中间人的情况下从另一个用户那里得到答案吗?
- 开发人员能否与项目提交者联系并获得深入的技术问题的答案?
- 你能否运行最新版本并确认已知的错误已修复?
- 架构师可以参加每周一次的社区电话会议并确定项目的未来方向吗?(原文 Can an architect the weekly community call and figure out the future direction of the project? )
对于封闭的基础架构,你必须创建支持工单并付费才能获得类似问题的答案。通过开放的基础设施和开放的参与,那些知道如何以开源方式工作的人可以获得答案。
社区和采用
开源软件的主要好处之一是它允许好创意的发展和传播。你可能拥有最先进的技术、最宽松的许可和开放式开发,但如果该软件没有不断壮大的社区和不断提高的采用率,那就是一个值得调查的迹象。不同的项目会有不同的采用率。有些可能会迅速成长为主流或被其他同类型项目所取代。一些项目可能有一个小但持续的增长率和一个持续数十年的生态社区。社区规模和采用率是开源项目的最终寿命指标。以下是你可以提出的一些示例问题:
- 项目中有多少活跃的开发人员(提交者),平均提交率是多少?
- 上个月有多少用户订阅了用户论坛以及提出了多少问题?
- 软件的最新稳定版本已被下载多少次?
- 还有哪些项目和服务依赖并使用这个项目?
- 有多少商业组织支持这个项目?
- 是否有商业组织围绕它提供产品、支持和服务?
- 这个项目有多少 StackOverflow 问题?
- 有多少书籍、会议演讲和职位描述提到了这个项目?
执行这些问题会给你一个指示,即该项目是在增长并成为其领域的事实上的标准,还是停滞不前并可能被下一个大项目所取代。
通常,开源与快节奏的开发和创新有关。同时,开源也是一种创建广泛采用和创建非官方标准的机制。许多开源项目已经变成了标准,例如用于容器编排的 Kubernetes、用于流处理的 Apache Kafka、用于 Web 服务器的 Apache httpd 等。软件中最昂贵的事情之一是找到具有合适技能的人。使用采用率高的开源项目将使你有更好的机会找到技术娴熟的人,并让他们能够更长时间地重复使用他们的技能。
总结
根据开源项目的关键程度,有不同的风险和评估标准。对于战略性的、难以替代的项目,这将是你的 IT 基础设施的基础,你需要是已经成为其领域事实上的开源标准的完善项目。在这里确定谁拥有该项目的商标以及谁将成为你的长期合作伙伴非常重要。通常,这些合作伙伴是项目所属软件基金会的成员组织或持有项目 IP 的单个公司。对于后者,你可能需要考虑长期风险,例如核心开发人员分叉项目的机会、提供项目即服务的超大规模者、公司收购等。
对于交付速度最重要的非战略性、战术性、短期项目,你可以让你的开发人员根据开放性、社区协作和热度(对于某些前端技术很重要)来推动选择和挑选项目。在这里,定期的安全修复、开发人员支持和许可兼容性检查等中短期风险可能就足够了。
在任何一种情况下,都没有适合所有情况的单一评估标准。你必须在长期商业风险、技术稳定性与最新热度、创新和开发人员满意度之间取得平衡。这里的框架将为你概括需要探索的领域和需要考虑的一些风险。祝你好运!