火山引擎违反Apache许可证协议:商业不遵守武德?

原创 精选
开源 安全
昨天,火山引擎被曝不遵守 Apache 2.0 许可证要求,其中的 Application Performance Monitoring - Distributed Tracing(应用性能监控全链路版)以非法方式重新发行了 Apache SkyWalking。

昨天,火山引擎被曝不遵守 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 服务监控部分,匿名提交者提供了这个代理下载链接:

​https://datarangers.com.cn/apminsight/repo/v2/download/java-agent/apminsight-java-agent_latest.tar.gz​

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 的版本链接:

​https://github.com/apache/skywalking-java/blob/395ce4f86ae14cf24af489a6aa7e849b1d9a27ed/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java。​

3、代码名称、软件包名称和代码层次结构全部与 SkyWalking 6.x 版本一模一样。

火山引擎版本的软件包层次结构

SkyWalking 的版本详见:

​https://github.com/apache/skywalking-java/tree/v6.6.0/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context。​

Apache 许可证

Apache 许可证是著名的非盈利开源组织 Apache 采用的协议,Apache 2.0 许可证相对 GPL 已经非常宽松了。比如:商业软件可以任意的使用 BSD,Apache 2.0 发布的软件代码不需要开放源代码,只需要提及代码的原出处就可以了。

协议中明确写出,只要遵守该许可的条款和条件的前提下,每位贡献者将被授予永久的、全球性的、非排他性的、免费的、免版税的、不可撤销的版权许可,以复制、准备衍生作品、公开展示、公开使用、再许可、分发本作品和其衍生作品(无论是以“源码”还是“目标”形式)。

也就是不仅可以用,还可以对基于 Apache License Version 2.0 的作品或衍生作品进行修改或增补,并应用到商业项目。但前提是满足以下几个条件:

  1. 需要给代码的用户一份 Apache License;
  2. 如果你修改了代码,需要在被修改的文件中说明;
  3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明;
  4. 如果再发布的产品中包含一个 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的版权声明,并联系开发者沟通道歉。

火山引擎会严格遵循开源社区规范,全面自查,避免此类问题再次发生。

责任编辑:薛彦泽 来源: 51CTO技术栈
相关推荐

2012-11-12 09:34:03

SDNOpenStackCloudStack

2014-04-04 10:07:46

ApacheWinJS

2014-07-09 10:53:58

软件许可证

2010-11-18 13:02:33

ApacheOracleJCP

2009-07-23 09:25:28

SaaS成本

2011-05-05 09:41:56

开源软件许可证

2011-08-04 10:32:33

Ruby 1.9.3BSD 许可证

2009-07-27 11:00:49

微软Linux代码开源操作系统GPL协议

2013-07-17 10:16:57

Github项目许可证

2010-08-24 09:49:05

虚拟化

2019-09-30 07:04:56

开源道德条款开发者

2013-12-09 10:04:16

Windows 8.1Windows 8.1

2020-05-08 13:49:02

开源许可证商用项目

2010-07-30 09:37:44

VMware许可证销售模式

2019-05-16 10:59:26

云计算电子化罗德岛州

2021-03-29 12:54:31

Ruby许可证代码

2023-03-19 15:51:25

开源开源许可证开发

2021-08-24 15:10:01

Dapr工具库应用程序

2009-02-19 16:38:43

虚拟化Novell微软

2009-04-03 17:14:32

服务器虚拟化虚拟化虚拟机
点赞
收藏

51CTO技术栈公众号