开源使用继续 стремительно 增长,不仅在用例和场景方面,而且在数量方面也是如此。对于开发人员来说,通过单次运行 npm install
依赖 1,000 个 JavaScript 包或在 Docker 镜像中拥有数千个包是微不足道的。与此同时,人们越来越关注确保许可证合规性。
如果没有正确的许可证,您可能无法以您想要的方式合法使用软件组件,或者可能承担与您的商业模式相悖的义务。例如,一个 JavaScript 包可能被标记为 MIT 许可证,该许可证允许商业重用,而它的一个依赖项被许可为 著佐权许可证,要求您在相同的许可证下免费提供您的软件。合规意味着找到适用的许可证,并评估和遵守条款,这对于单个组件来说还不错,但对于大型项目来说可能令人生畏。
幸运的是,这个开源挑战有一个开源解决方案:ClearlyDefined。ClearlyDefined 是一项众包、开源的 开源促进组织 (OSI) 工作,旨在收集、整理和向上游/规范化关于开源组件的数据,例如许可证、版权和来源位置。这些数据是减少开源许可证合规性摩擦的基石。
ClearlyDefined 背后的前提很简单:我们都在努力查找和理解与我们使用的开源相关的关键信息——无论是查找许可证、了解要归属的对象,还是识别与特定包相关的源代码。ClearlyDefined 允许我们协作并分担合规工作,而不是各自独立挣扎。此外,ClearlyDefined 社区寻求向上游推送任何更正,以便未来的版本能够更清晰地定义,并使约定更加明确,以提高社区对项目意图的理解。
工作原理

ClearlyDefined 监控开源生态系统,并使用一系列开源工具(如 ScanCode、FOSSology 和 Licensee)自动收集来自开源组件的相关数据。结果被汇总和聚合以创建定义,然后通过 API 和 UI 呈现给用户。每个定义包括
- 组件的声明许可证
- 在所有文件中发现的许可证和版权
- 精确的源代码位置,精确到提交级别
- 发布日期
- 嵌入式组件列表
巧合的是(嗯,其实不是),这正是您进行许可证合规性所需的数据。
整理
由于工具问题或数据在源头丢失或不正确,任何给定的定义都可能存在差距或缺陷。ClearlyDefined 使用户能够通过改进值和填补空白来整理结果。这些贡献会像任何开源项目一样被审查和合并。结果是改进的数据集,供所有人使用。
抢占先机
在某种程度上,这个过程仍然是在追逐问题——在软件包已经发布后进行分析和整理。为了抢占先机,ClearlyDefined 社区还将合并的整理结果反馈给原始项目,作为拉取请求(例如,添加许可证文件、澄清版权)。这提高了未来版本的清晰度,并建立了一个良性循环。
适应,而非强制
在进行分析时,我们发现了许多表达许可证相关数据的方法。不同的社区将 LICENSE 文件放在不同的位置,或者在署名方面有不同的做法。ClearlyDefined 的理念是发现这些约定并适应它们,而不是要求社区做不同的事情。这样做的一个附带好处是,可以使隐式约定更加明确,从而提高所有人的清晰度。
与此相关的是,ClearlyDefined 注意不要过于努力地寻找这些有趣的数据。如果我们必须过于聪明并推断太多才能找到数据,那么很有可能源头并不那么清晰。相反,我们更愿意与社区合作,以更好地理解和澄清正在使用的约定。从那里,我们可以相应地更新工具,并使其更容易“清晰定义”。
NOTICE 文件
作为用户的额外福利,我们设置了一个 API 和 UI,用于生成 NOTICE 文件,使您可以轻松地遵守大多数开源许可证中发现的署名要求。您可以向 ClearlyDefined 提供组件列表(例如,将 npm package-lock.json 文件拖放到 UI 上),并取回由多个渲染器之一(例如,文本、HTML、Handlebars.js 模板)渲染的完整 NOTICE 文件。鉴于我们已经拥有所有合规性数据,这非常简单。在此衷心感谢 OSS Attribution Builder 项目,感谢他们制作了一个简单且可插拔的 NOTICE 渲染器,我们可以直接将其插入 ClearlyDefined 服务中。
参与其中
您可以通过以下几种方式参与 ClearlyDefined
- 成为活跃用户,为您的合规工作流程做出贡献
- 使用界面审查其他人的整理结果
- 参与 代码(Node 和 React)
- 在 我们的邮件列表 或 Discord 频道 上提问和回答问题
- 向 OSI 捐款,用于 ClearlyDefined。我们将用这笔钱来资助开发和整理。
我们很高兴继续发展我们的贡献者社区,以便许可协议可以继续成为任何团队采用开源的易于理解的一部分。有关更多信息,请查看 https://clearlydefined.io。
评论已关闭。