昨天,火山引擎被曝不遵守 Apache 2.0 许可证要求,其中的 Application Performance Monitoring - Distributed Tracing(应用性能监控全链路版)以非法方式重新发行了 Apache SkyWalking。
Apache SkyWalking 官网上声称:
火山引擎的团队更改了所有软包名称,删除了 Apache 软件基金会的抬头,在重新发行时没有保留 Apache 软件基金会和 Apache SkyWalking 的 LICENSE(许可证)和 NOTICE(告知)文件。此外,在对方的网站上找不到任何声明他们在发行 SkyWalking 的内容。
起因
Apache SkyWalking 是一个分布式系统的开源 APM,是 Apache 软件基金会的顶级项目。
1 月 28 日,Apache SkyWalking 收到了一个提交者(匿名)的许可证违规报告。他们有一个云服务,叫做应用性能监控全链路版(Application Performance Monitoring - Distributed Tracing)。在 Java 服务监控部分,匿名提交者提供了这个代理下载链接:
Apache SkyWalking 官方团队下载并在已经将其存档,已经确认这是一个 SkyWalking Java agent 的二次分发,并给出了三点证据,读者可以与官方的 SkyWalking 源代码(https://github.com/apache/skywalking-java)进行比较。
细节
以下是官网披露的违反 Apache 2.0 许可证的细节:
1、第一个也是最简单的部分是 agent.config 文件,该文件使用相同的配置键和相同的配置格式。
这是火山引擎的版本,可以对比 SkyWalking agent.config
2、在 apmplus-agent.jar 即 Volcengine 的代理核心 jar 文件中,你可以轻松找到几个与 SkyWalking 的核心类一模一样的核心类。
ComponentsDefine 类根本没有变化,就连组件 ID 和名称都一样
这是火山引擎的版本,SkyWalking 的版本链接:
3、代码名称、软件包名称和代码层次结构全部与 SkyWalking 6.x 版本一模一样。
火山引擎版本的软件包层次结构
SkyWalking 的版本详见:
Apache 许可证
Apache 许可证是著名的非盈利开源组织 Apache 采用的协议,Apache 2.0 许可证相对 GPL 已经非常宽松了。比如:商业软件可以任意的使用 BSD,Apache 2.0 发布的软件代码不需要开放源代码,只需要提及代码的原出处就可以了。
协议中明确写出,只要遵守该许可的条款和条件的前提下,每位贡献者将被授予永久的、全球性的、非排他性的、免费的、免版税的、不可撤销的版权许可,以复制、准备衍生作品、公开展示、公开使用、再许可、分发本作品和其衍生作品(无论是以“源码”还是“目标”形式)。
也就是不仅可以用,还可以对基于 Apache License Version 2.0 的作品或衍生作品进行修改或增补,并应用到商业项目。但前提是满足以下几个条件:
- 需要给代码的用户一份 Apache License;
- 如果你修改了代码,需要在被修改的文件中说明;
- 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明;
- 如果再发布的产品中包含一个 Notice 文件,则在 Notice 文件中需要带有 Apache License。你可以在 Notice 中增加自己的许可,但不可以表现为对 Apache License 构成更改。
也就是说,就是需要在相关产品的发行版本,Notice 文件、源码或文档里,添加归属声明的可读拷贝,并给接收者提供开源项目中提供的 Apache License Version 2.0 许可证的拷贝,在分发的衍生作品的源代码中,必须保留本作品源码中的所有版权、专利、商标和归属声明。
反思
所有的开源许可证都带有"披露要求"(notice requirement),即要求软件的分发者必须向用户披露,软件里面有开源代码。如果一种开源许可证没有任何使用条件,连保留作者信息都不需要,那么就等同于放弃版权了。
其实遵守并不难。一般来说,你只要在软件里面提供完整的原始许可证文本,并且披露原始作者,就满足了"披露要求"。
开源协议在方便每个开发者贡献代码的同时,不但保护原始作者的身份,也是为了可以阻止其它人将某个产品据为己有。
目前,世界上流行的开源协议也不少,如何来选择也是开发者需要考虑的问题。关于常用的开源许可证,最流行的六种 ----GPL、BSD、MIT、Mozilla、Apache 和 LGPL---- 之中做选择,也很复杂。
乌克兰程序员 Paul Bagwell,画了一张分析图,这里附上一张中文版,希望能帮助大家搞清楚这六种许可证之间的最大区别。
总结
目前国际公认的开源许可证的共同特征是,都允许用户免费地使用、修改、共享源码,但是都有各自的使用条件。在如今一个大的开源开发背景下,开源软件衍生的商业产品越来越多,开发者在选择和使用开源代码时,一定要注意遵守开源协议。
火山引擎相关负责人表示,火山引擎接到社区反馈后,第一时间调查处理此事,正在相关产品文档和分发SDK上加入SkyWalking的版权声明,并联系开发者沟通道歉。
火山引擎会严格遵循开源社区规范,全面自查,避免此类问题再次发生。