导读:当今语言最流行的许可证,哪些许可证最可用,还有哪些内容缺乏?
许多开发者都知道开源软件构成了现代软件开发的支柱,数据显示,大部分的软件都是在没有许可证的情况下共享的。
Aleksandrs Volodjkins引用来自 OSI 社区项目ClearlyDefined 的数据,探索了 2023 年 9 月 21 日起收集的 ClearlyDefined 许可证数据集。
最受欢迎的许可证
MIT和Apache 2.0是迄今为止最受欢迎的许可证,尽管许可证的受欢迎程度因软件包管理器而异。这些许可证的简单性允许用户以最小的限制修改和分发代码而不施加额外的要求,这无疑促进了它们被广泛采用。
许可证的边界范围并不统一
所有包管理器的许可证范围并不统一,每种编程语言在其生态系统中都有自己的一组许可首选项。
例如,JavaScript 社区通常倾向于 MIT 许可证,而 Python 则对 Apache 2.0 表现出类似的亲和力。ISC许可证以其简单性和宽容性,在 JavaScript 社区中找到了自己的位置。BSD 许可证(3 条款和2 条款)保持稳定,但使用率相对较低。体现自由软件精神的GNU 通用公共许可证 ( GPL ) 享有盛誉,但它落后于 MIT 和 Apache 2.0。
未经许可组件的挑战
尽管完善的许可证很普遍,但 ClearlyDefined 数据集中出现了一个“令人担忧”的情况,很大一部分开源组件缺乏指定的许可证或带有 SPDX 标识符“NOASSERTION”。这种模糊性带来了此类组件被使用后的不确定性,可能会阻碍协作、造成法律复杂性以及开发者的安全问题。
对清晰度和标准化的需求
解决未经许可的组件问题对于开源社区的持续健康发展至关重要。开发者、组织机构和整个社区都受益于清晰和标准化的许可。它不仅促进协作,还确保法律合规性并保护贡献者的知识产权。此外,它还可以帮助开发者跟踪可能存在漏洞的组件。
迈向协作解决方案
未经许可的组件问题是开源社区需要面对的挑战,需要采取社区范围的方法。ClearlyDefined项目旨在通过邀请不同组织的开发人员众包已发布的每个软件组件的许可元数据全球数据库来应对这一挑战。
它允许开发者通过一个简单的 API 获取每个组件的许可元数据的缓存副本,并贡献任何丢失或错误识别的许可元数据,从而帮助创建一个准确的数据库,以造福所有人。
JavaScript(npm)
JavaScript 的 npm包管理器包含主要使用MIT许可证 (53%) 的组件,其次是Apache 2.0 (14,76%) 和ISC (10,48%)。ISC 许可证由互联网系统联盟发布,虽然在 JavaScript 项目中很流行,但其它编程语言使用的并不多。
一小部分项目没有许可证 (8%) 或 SPDX 识别的许可证/NOASSERTION (5.49%)。
.NET(Nuget)
这是Nuget中最令人震惊的数据之一,它暴露了.NET 的一个缺点,它的大部分组件要么没有许可证 (26.76%),要么被发现是 NOASSERTION (31.95%)。
其中,MIT或Apache 2.0下的许可证分别为 21.55% 和 13.37%。
Java(Maven)
Maven(Java 的包管理器)中的绝大多数组件都在使用Apache 2.0许可证 (69.18%)。拥有第二受欢迎许可证MIT 的组件占 7.4%。具有 NOASSERTION 的组件为 14.75%。
Python(Pypi)
对于Python 的包管理器Pypi来说, MIT和Apache 2.0许可证下的组件占据主导地位,分别占 29.14% 和 23.98%。BSD 2-Clause和GPL 3.0下的组件分别为 6.25% 和 6.11%。很大一部分组件没有许可证 (23.69%)。
Ruby(Gem)
Gem(Ruby 的包管理器)的绝大多数组件都使用MIT许可证 (63.11%)。其次是Apache 2.0和BSD 3-Clause许可证,分别占 8.22% 和 6.66%。
PHP(Composer)
MIT许可证是Composer包管理器中PHP组件中最受欢迎的选项,占 64.37%。BSD 3-Clause和Apache 2.0下的项目分别占 5.72% 和 3.92%。
Go
Apache 2.0和MIT许可证在Go 中占据主导地位,分别为 32.49% 和 20.1%。很大一部分 Go 组件却没有许可证 (29.67%)。
Rust(crate)
对于crate(Rust 包管理器),MIT和/或Apache 2.0下的项目占主导地位。他们共计占 83.52%。
结语
开源许可证是作者与计算机软件用户之间的法律合同,合同允许在定义的条款和条件下使用,修改或共享源代码,蓝图或设计。它确保了软件可以根据指定条款和条件在商业应用中使用。
开源许可证是将应用程序或软件代码变成开源应用程序或软件的证明。若没有开源许可证,即使用户公开发布在GitHub上,该应用程序也无法使用。
目前虽然已经有200多个开源许可证,没有好坏的区别。决定哪种最佳开源许可证与其政策最合适,还是多综合我们的软件复杂性与需求。
编辑:万能的大雄
参考:
https://blog.opensource.org/the-most-popular-licenses-for-each-language-2023/