Help us learn about your current experience with the documentation. Take the survey.

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 中找到

要获得法律批准,请按照以下步骤操作:

  1. 创建一个新的 legal issue。确保包含尽可能多的详细信息:
    • 该软件使用什么许可证?
    • 它将在何处以及如何使用?
    • 它是否被 vendored 或 forked,还是我们将使用上游项目?
    • 任何相关链接。
  2. 用例获得法律批准后,在 GitLab 项目中将该软件加入白名单。 请参阅上面的 License Finder 命令
  3. 确保该软件也被 Omnibus 识别。针对 omnibus-gitlab 项目创建一个新的 MR。 参考 这个 MR 了解更改应如何呈现的示例。您需要编辑以下文件:
    • lib/gitlab/license/analyzer.rb
    • support/dependency_decisions.yml

加密密钥

如果您的许可证是在本地开发或暂存环境中为 Customers Portal 或 License App 创建的,则需要设置一个名为 GITLAB_LICENSE_MODE 且值为 test 的环境变量,以使用正确的解密密钥。

这些项目默认设置为使用测试许可证加密密钥。

其他信息

有关许可证的更多信息,请参阅 Open Source 页面。