2023 年各语言最流行的许可证

2023 年关于最大软件包管理器所使用许可证的报告强调了教育开发者了解许可证信息重要性的必要性。虽然许多开发者知道开源软件构成了现代开发的支柱,但数据显示,他们的大部分软件在没有许可证的情况下被共享(并且很可能也被使用)。

使用来自 OSI 社区项目 ClearlyDefined 的数据, Aleksandrs Volodjkins 探索了 2023 年 9 月 21 日的 ClearlyDefined 数据集。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%)。使用 MITApache 2.0 许可证的组件分别占 21.55% 和 13.37%。

Java (Maven)

在 Java 的软件包管理器 Maven 中,绝大多数组件使用 Apache 2.0 许可证 (69.18%)。第二流行的许可证 MIT 的组件仅占 7.4%。带有 NOASSERTION 的组件占 14.75%。

Python (Pypi)

对于 Python 的软件包管理器 Pypi,使用 MITApache 2.0 许可证的组件占主导地位,分别占 29.14% 和 23.98%。使用 BSD 2 条款GPL 3.0 的组件分别占 6.25% 和 6.11%。很大一部分组件没有许可证 (23.69%)。

Ruby (Gem)

在 Ruby 的软件包管理器 Gem 中,绝大多数组件使用 MIT 许可证 (63.11%)。其次是 Apache 2.0BSD 3 条款 许可证,分别占 8.22% 和 6.66%。

PHP (Composer)

MIT 许可证是 PHP 的 Composer 软件包管理器组件中非常流行的选择,占 64.37%。使用 BSD 3 条款Apache 2.0 的项目分别占 5.72% 和 3.92%。 

Go

Apache 2.0MIT 许可证在 Go 中占主导地位,分别占 32.49% 和 20.1%。很大一部分 Go 组件没有许可证 (29.67%)。

Rust (Crate)

对于 Rust 软件包管理器 crate,使用 MIT 和/或 Apache 2.0 的项目占主导地位。加起来,它们占 83.52%。