在传统软件许可方面培养的实践和期望可能会在面对开源软件时导致挫败感。 “请,只需向我展示许可”这个简单的请求可能会得到令人不满意的回应。虽然有时回应非常简单,但通常,开源软件的许可信息更加复杂,并且与传统软件许可设定的期望不符。
怎么回事?开源软件许可是否已损坏?没有。不仅许可条款类型不同,软件开发方式也不同,这导致了软件许可信息的传达方式也不同。部分原因在于律师的便利性和开发人员的便利性之间的权衡。
说开源软件可以“协作”开发,并不能完全捕捉到开源开发活动可能与传统许可软件的开发活动有多么不同。虽然有一些开源项目,像传统许可软件一样,由一个人或一个小的固定团队维护,但开源项目的协作可能发生在广泛的潜在贡献者之间。例如,GitHub 的2019 年度 Octoverse 报告称,超过 35 万人向排名前 1000 的项目做出了贡献)。但这不仅仅是贡献者的数量使它与传统许可软件的开发区分开来。为开源项目做出贡献的人们之间可能没有任何联系,除了发现对该软件项目的共同兴趣。参与可能会随着时间的推移而演变。最初的开发人员可能会离开,让其他人继续项目的开发。所有这一切都可能在没有计划或总体治理组织的情况下发生。
开源协作活动不是遵循规范性的治理规则,而是可以做到不仅轻量级,而且比传统许可软件预期的方式更具响应性和临时性。关于开源许可信息的实践适应了这种协作开发。
- 开源许可中的条款通过提供所需的权限(复制、修改、分发),不仅适用于二进制文件,也适用于源代码,从而促进了协作开发。《开源定义》已被证明是帮助人们关注符合其要求的许可的宝贵工具。
- 开源软件的许可信息嵌入在源代码中。当一个人获得源代码时,他会收到相应的许可信息。想象一下,在每年数百万次贡献的规模下,单独的许可管理是否可行?此外,通过将许可信息嵌入在源代码中,该许可信息可以反映与许可相关的细节,而这些细节在一些单独管理的许可流程中是不切实际的。例如,嵌入在源代码中使得指示哪些许可条款适用于软件的哪些部分成为可能。
为了说明开源许可实践的成果,请考虑以下示例软件项目:它始于五年前;到目前为止,已有 50 位贡献者做出了贡献;通过改编其他项目的部分软件添加了一些功能;原始代码的开发人员在三年后离开了;几家商业企业已经开始依赖该软件,无论是在他们的产品中还是在内部;如果更新该软件以考虑到其他软件和计算世界的相关方面的变化,则该软件可能还有 5-10 年的未来。
现有常用的表示开源项目许可信息的方法很容易适应这样一个项目的过程。在没有预先计划的情况下,贡献者可以来来去去;项目的部分具有不同的许可条款;商业企业可以继续分担维护软件的工作,治理开销成本很小,同时保留在与其他人的合作破裂时完全独立地分叉软件的能力。
相比之下,传统的软件许可方法将如何运作以支持这种开发?这种合作甚至有可能实现吗?我们将要建立一个完整的许可基础设施来跟踪数千个“主软件开发和分发协议”的适用性吗?我们将通过少数公司控制一切来简化许可吗?
让我们回到问题“什么是许可?”我谈论开源开发的特点的目的是为了说明,有一些重要的非法律因素促成了开源许可信息的表示方式。开源软件中许可信息的表示方式通常与传统许可的期望不符。但是,这些差异并不是系统崩溃的迹象。相反,这些差异支持大规模协作开发软件,这种构建软件的方法在过去的二十年中已被证明非常强大。
开源许可信息是什么样的?
一般来说,人们会考虑每个“软件组件”的许可条款。软件组件可能对用户可见,如应用程序,或者它可能对用户不太明显,如在与更大的程序组合时提供某些功能的库。
对于许多软件组件,许可很简单:十几个最常见的开源许可之一适用于组件中的所有软件。除了这些最常见的许可之外,还有许多文本变体不常用的长尾许可。但是,在《开源定义》的指导下,开源许可条款中的权限和限制保持在一定的范围内。
如果您要进行将开源软件集成到其他软件中的软件开发,那么您需要了解适用于正在集成的软件的任何著作权保留条款(例如著名的 GPL 许可系列中的条款)。
从我对开源软件开发方式的讨论中,您可能会清楚地看到,许可信息可能比单个许可更复杂。
- 虽然一个软件组件可能有一个主要的“项目许可”,但软件的某些部分可能在其他许可下获得许可。这可能会导致源代码的各个部分出现不同的许可声明。
- 一些项目 практикуют 在每个源文件中放置版权声明。其他项目主要依赖于存在一个或多个包含许可文本的文件。
- 版权声明指示了谁可能是软件部分的所有者(但是,考虑到版权声明实践的可变性,这种指示可能很弱)。
- 构建软件组件的源代码可能包含未反映在生成的组件中的软件,例如测试或构建相关的文件。这对于使用无 GPL 规则的人来说可能很重要(一个项目可能包含 GPL 许可的文件,但不在从中构建可执行程序的文件中)。
这种细粒度的许可信息在源代码中可以最有效地传达,因为大部分细节都与某些许可信息相关的软件部分有关。在最详细的层面上,源代码就是许可。当许可信息在源代码中时,该许可信息可以像源代码一样维护,例如在版本控制系统中,并且信息本质上可供任何获得源代码的人使用。
从源代码中提取许可信息并创建许可条款的摘要似乎很简单。但是,对于一个人或公司来说可能是好的摘要,对于另一个人或公司来说可能不足。不同的人可能会关注不同的许可细节。有人可能想确切知道软件的哪些组件受著作权保留条款约束。其他人可能不关心按组件划分的摘要。其他人可能想要所有许可声明,包括每个不同的版权声明。
您想查看哪些许可信息详细信息?软件开发工具丰富。扫描、提取和报告许可信息的工具是持续开发的一个活跃主题。现在,“什么是许可?”可以重新定义为“向我展示许可信息的报告”,其中该报告可能包括一系列不同的详细信息,具体取决于请求报告的人员关心什么。在最详细的层面上,源代码就是许可。
传统软件许可和开源软件许可针对不同的世界——以不同的方式构建的软件。做好准备。抱有不同的期望。
评论已关闭。