当有人在使用、修改或分发开源软件时,没有遵守其许可证中规定的条款,就会发生开源许可协议违规。 开源许可协议授予特定的自由,例如查看、修改和共享代码的权利,但它们也施加义务。 这些义务因许可证类型而异。 例如,像 MIT 或 Apache 2.0 这样的宽松许可证需要署名,并且可能包括关于专利权的规则,而像 GPL 这样的 Copyleft 许可证则要求衍生作品以相同的许可证发布。 当用户忽略这些条款时,就会发生违规行为,例如未能署名原始作者、未披露更改或分发包含 Copyleft 代码的专有软件,但未使组合作品开源。
一个常见的例子是在专有应用程序中使用 GPL 许可的代码。 GPL 要求任何衍生作品也必须在 GPL 下获得许可,这意味着必须共享整个项目的源代码。 如果开发人员将 GPL 代码集成到他们的软件中,但不将其代码作为开源发布,则他们违反了该许可协议。 另一个例子是省略要求的署名。 例如,MIT 许可的代码强制要求在所有副本中包含原始版权声明。 如果开发人员使用 MIT 库,但从其文档或源文件中删除该声明,则他们违反了该许可协议。 同样,Apache 2.0 要求保留有关专利或贡献者的声明,如果未在分发的代码中包含这些声明,则构成违规行为。 即使是无意的疏忽,例如忘记更新项目分支中的许可证文件,也可能导致合规性问题。
违规行为可能导致法律诉讼、经济处罚或强制合规。 例如,像 VMware 这样的公司就因涉嫌将专有代码与未适当合规的 GPL 许可组件混合而面临诉讼。 除了法律风险之外,违规行为还会损害开源社区内的信任,从而使协作更加困难。 为了避免问题,开发人员应使用像 FOSSA 或 Scancode 这样的工具来审核依赖项,审查许可证条款以了解义务,并记录合规步骤(例如,添加署名文件)。 项目还可以在 CI/CD 管道中采用自动化许可证检查器,以尽早标记潜在问题。 了解许可证并维护依赖项及其要求的清晰记录对于防止违规行为(即使是意外的违规行为)至关重要。