GitLab 许可证和兼容性
GitLab 社区版 (CE) 根据 MIT 许可证条款 授权。GitLab 企业版 (EE) 根据 “GitLab 企业版 (EE) 许可证” 授权,其中包含更多限制。
自动化测试
为了遵守我们使用的库的许可条款,我们必须确保在添加新的 gems 时检查其兼容的许可证。为了自动化这个过程,我们使用 Pivotal 的 License Finder gem。每次推送新的提交时它都会运行,并验证包中所有 gems 和 node modules 使用的许可证与 GitLab 社区版或 GitLab 企业版的许可证不冲突。
然而,自动化测试存在一些局限性。那些不是通过 Bundler、npm 或 Yarn 包含的 CSS、JavaScript 或 Ruby 库(例如手动复制到我们源代码树 vendor 目录中的库),必须独立手动验证。每当使用此类库时都要小心,因为自动化测试无法捕获其中存在问题的许可证。
一些 gems 可能不会在其 gemspec 文件中包含许可证信息,一些 node modules 可能不会在其 package.json 文件中包含许可证信息。这些不会被 License Finder 检测到,必须手动验证。
License Finder 命令
License Finder 提供了一些基本命令,您需要使用它们来管理许可证检测。
验证检查是否通过,和/或查看哪些依赖项导致检查失败:
bundle exec license_finder将新许可证加入白名单:
license_finder permitted_licenses add MIT将新许可证加入黑名单:
license_finder restricted_licenses add Unlicense如果许可证未被自动检测到,告知 License Finder 依赖项的许可证:
license_finder licenses add my_unknown_dependency MIT对于以上所有命令,请包含 --why "原因" 和 --who "我的名字",以便 decisions.yml 文件可以记录何时、为何以及谁批准了该依赖项。
有关 gem 及其命令如何工作的更详细信息,请参阅 License Finder README。
获得未知或 Lead 许可证软件的批准
有时我们需要使用许可证不属于 Blue Oak Council 许可证列表,或在列表中被标记为 Lead 评级的第三方软件。在这种情况下,软件安装前其用例需要获得法律批准。更多相关信息可以在 Handbook 中找到。
要获得法律批准,请按照以下步骤操作:
- 创建一个新的 legal issue。确保包含尽可能多的详细信息:
- 该软件使用什么许可证?
- 它将在何处以及如何使用?
- 它是否被 vendored 或 forked,还是我们将使用上游项目?
- 任何相关链接。
- 用例获得法律批准后,在 GitLab 项目中将该软件加入白名单。 请参阅上面的 License Finder 命令。
- 确保该软件也被 Omnibus 识别。针对
omnibus-gitlab项目创建一个新的 MR。 参考 这个 MR 了解更改应如何呈现的示例。您需要编辑以下文件:lib/gitlab/license/analyzer.rbsupport/dependency_decisions.yml
加密密钥
如果您的许可证是在本地开发或暂存环境中为 Customers Portal 或 License App 创建的,则需要设置一个名为 GITLAB_LICENSE_MODE 且值为 test 的环境变量,以使用正确的解密密钥。
这些项目默认设置为使用测试许可证加密密钥。
其他信息
有关许可证的更多信息,请参阅 Open Source 页面。