Clash: Clash For Windows是否违反了Clash的GPL协议?

Created on 27 Feb 2020  ·  19Comments  ·  Source: Dreamacro/clash

看到Clash在19年10月的时候把License从MIT改为了GPL,那么CFW在闭源代码中跟进了Core的新版本,是否违反了GPL?
只是提问。

Most helpful comment

Emmmmmmmm By the way, I am only worried about safety of CFW because of no open source code, No one care whether it get the profit in this options.......

All 19 comments

是的

407 他改的在这里

GNU通用公共许可证

将你修改过的软件版本再分发给其他人的自由(自由之三)。这样可以让整个社区有机会共享你对软件的改动。可访问源代码是此项自由的先决条件。

显然,cfw的作者并没有开源,就算他有commit,也是不符合gpl的

@RtYkk clash for windows 本质是直接使用二进制,而不是像 clashx 和 clash for android 一样「内置」,这也算违反 GPL 的吗?🤔

Clash for Windows is IMO a derivative work of the Clash core, which AFAIU should disclose its source code. We should probably get a lawyer.

GPL does not only protect the source code per se but also every copyrightable work released under the license:

  1. Definitions.
    ... “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. ...

@RtYkk clash for windows 本质是直接使用二进制,而不是像 clashx 和 clash for android 一样「内置」,这也算违反 GPL 的吗?🤔

二进制文件好像是分情况的,要看具体怎么互相使用的。
按照GNU官网的解释:

究竟怎么区分是两个独立的程序,还是一个程序的两个部分呢?这是一个法律命题,最终会由法官来决定。我们相信合理的标准既依赖于通信的机制(exec、pipes、rpc、共享地址空间的函数调用,等等),也依赖于通信的语义(交换了什么样的信息)。
如果两个模块都包含在同一个可执行文件里,那么它们一定是一个程序的组件。如果两个模块运行时是在共享地址空间连接在一起的,那么它们几乎也构成一个组合软件。
反过来,pipes、sockets和命令行参数通常都是两个不同程序通信的机制。因此,如果使用它们来通信,这些模块正常应该是独立的程序。但是如果通信的语义非常密切,交换复杂的内部数据结构,那么它们也被会认为是一个大程序的两个组合部分。

按照我的理解,最终提供服务的是Clash Core,CFW不可能离开Core工作,所以CFW应该属于Core的衍生品,确实违反了GPL。但是找律师还是算了吧,于情于理都不可行。本身在和墙的斗争当中,我们就不该丧失任何开发者的力量;而且此类软件在大陆根本就是违法的,所以别想在大陆地区起诉了,在其他地区起诉更是不可能有作用。当然最终决定权在 @Dreamacro ,我提这个issue的目的只是想定个性,提个醒。

@RtYkk 修改的Clash Core并不是没有提供源码,源码在这里:https://github.com/Fndroid/clash/tree/rule-set

@test8421 CFW和Clash core的通信是通过调用Clash开放的Restful API进行的。

@test8421 事实上,对于这个项目来说,衍生品是不是开源其实并不是最最重要的事,还有着更重要的事:

  • 是否因这个项目而盈利或其他收益
  • 是否对这个项目有正反馈

还有如果有一天我在这个开源项目上衍生了一个闭源版本的 Clash(多了一些功能但并不想开源),那么我是不是自己违反了这个协议😂

@Dreamacro GPL 协议是你作为版权所有者授权其他不拥有版权的人使用的协议,不太可能你授权了反而丧失权利了。
现实中有许多项目是有 GPL+商业授权的。

Emmmmmmmm By the way, I am only worried about safety of CFW because of no open source code, No one care whether it get the profit in this options.......

@test8421 事实上,对于这个项目来说,衍生品是不是开源其实并不是最最重要的事,还有着更重要的事:

* 是否因这个项目而盈利或其他收益

* 是否对这个项目有正反馈

还有如果有一天我在这个开源项目上衍生了一个闭源版本的 Clash(多了一些功能但并不想开源),那么我是不是自己违反了这个协议😂

@Dreamacro 闭源版本的Clash大概率违反了GPL,除非闭源版本没有使用任何开源版本的代码,或者在闭源版本中导入开源版本的功能。顺带一提 @ysc3839 ,GPL的意义就在于防止这种闭源衍生版本的发行,不论是否为代码原作者,只要以GPL授权,任何人都不能剥夺他人获得衍生品源码的权利!也正是因为如此,GPL才能在专有软件横行的世界开启一座通往自由世界的大门!作为翻墙者,我们的境况又与Richard Stallman何其相似啊!我作为一个使用者,受限于自身目前的能力,也不好意思向开发者提出要求,但还是希望两位开发者 @Dreamacro @Fndroid 能感受到GPL所代表的自由精神。

附上GNU官方对GPL常见问题的解释:https://www.gnu.org/licenses/gpl-faq.html

@Dreamacro GPL 协议是你作为版权所有者授权其他不拥有版权的人使用的协议,不太可能你授权了反而丧失权利了。
现实中有许多项目是有 GPL+商业授权的。

@wuyuansushen 商业化并不意味着阻止你获取二进制文件的同时获取源代码,付费的话大概率是提供技术支持,或者是云托管之类的,如果真要付费授权使用的话那么他不可能以GPL授权,否则就违反了GPL。

@test8421 我认为你说的

不论是否为代码原作者,只要以GPL授权,任何人都不能剥夺他人获得衍生品源码的权利

是错的,因为常见问题中有提到
https://www.gnu.org/licenses/gpl-faq.html#ReleaseUnderGPLAndNF

如果你是自己代码的版权持有者,那么你可以在不同时间按照不同的非互斥许可证发布。

@test8421 之所以会有闭源版的原因主要有两个:

  1. 了解到存在拿 clash 付费做所谓「定制版」的事情
  2. 存在非良性 Fork,什么是非良性 Fork 呢?或者说在我看来什么是非良性 Fork 呢?
    首先是在 Fork 过后加了点功能后便不停的同步上游,并在自己渠道上进行分发,但长时间内都对上游毫无贡献

如果你能打包票不让上述两件事情发生,当然我也愿意开源,毕竟开源可以更容易发现问题并解决问题。如果你不能阻止上述事情发生,那么请你不要做一个所谓的「开源斗士」。这已经是权衡后的结果。

除非闭源版本没有使用任何开源版本的代码,或者在闭源版本中导入开源版本的功能。

要说的一点是,你可以到 https://github.com/Dreamacro/clash/graphs/contributors 上看提交数据。如果说 clash 是不是存在我自己没法实现的功能的话,截止到目前只有 PROCESS-NAME 这个规则。但无法否认即使只改一个 typo 也是对项目有利的。我也并没有因为有 premium 就停止对开源版本的维护,说到底本来就是打算有两个版本的,只是由于上述的原因把另一个版本闭源了。

premium 也不是真正意义上的闭源,如果有意愿想提交,我也可以直接加到 Collaborator 里

@test8421 我认为你说的

不论是否为代码原作者,只要以GPL授权,任何人都不能剥夺他人获得衍生品源码的权利

是错的,因为常见问题中有提到
https://www.gnu.org/licenses/gpl-faq.html#ReleaseUnderGPLAndNF

如果你是自己代码的版权持有者,那么你可以在不同时间按照不同的非互斥许可证发布。

确实,我说错了,需要加这一个例外,但我不认为所有的贡献者都认为Clash的版权持有者是Dreamacro。

@test8421 之所以会有闭源版的原因主要有两个:

1. 了解到存在拿 clash 付费做所谓「定制版」的事情

2. 存在非良性 Fork,什么是非良性 Fork 呢?或者说在我看来什么是非良性 Fork 呢?
   首先是在 Fork 过后加了点功能后便不停的同步上游,并在自己渠道上进行分发,但**长时间内都对上游毫无贡献**

如果你能打包票不让上述两件事情发生,当然我也愿意开源,毕竟开源可以更容易发现问题并解决问题。如果你不能阻止上述事情发生,那么请你不要做一个所谓的「开源斗士」。这已经是权衡后的结果。

除非闭源版本没有使用任何开源版本的代码,或者在闭源版本中导入开源版本的功能。

要说的一点是,你可以到 https://github.com/Dreamacro/clash/graphs/contributors 上看提交数据。如果说 clash 是不是存在我自己没法实现的功能的话,截止到目前只有 PROCESS-NAME 这个规则。但无法否认即使只改一个 typo 也是对项目有利的。我也并没有因为有 premium 就停止对开源版本的维护,说到底本来就是打算有两个版本的,只是由于上述的原因把另一个版本闭源了。

premium 也不是真正意义上的闭源,如果有意愿想提交,我也可以直接加到 Collaborator 里

这些开源可能造成的后果应该在你开源之前就考虑好,开源等于是默许了第2点的发生。至于第一点,我觉得这些定制版肯定是需要谴责的。你无需给我套「开源斗士」的帽子,从头到尾我就没要求过放出源码,你后面说的内容我觉得已经偏离讨论范围了,我就不多说了。

不过既然没有其他人对闭源有异议,我也不准备冒着被喷「开源斗士」的风险多说什么了,最后祝项目开发顺利吧!

从遵循 GPL 的角度:

  1. 联系主要贡献者,额外要授权,同意将他们贡献的代码用于闭源版本
  2. 将改为 GPL 协议后的其他人贡献的、未取得额外授权的代码从闭源版本移除,相关功能重写一遍(大公司的法务希望将引起纠纷风险降低最低的,会采用净室原则,把这些代码实现的功能写成详细的文档,然后找一个没看过这些代码的人重写,但对于 clash 这样的项目来说没必要这么折腾)

未来提 pr 的都让签 CAA(Copyright assignment),把相关权利转给原作者,或者带 Outbound License 条款(允许原作者以其他协议分发第三方贡献)的 CLA ,这样闭源版本就可以用第三方向 GPL 授权的开源版本贡献的代码了。协议模板可以用 Harmony Agreement Selector 生成。

@RtYkk clash for windows 本质是直接使用二进制,而不是像 clashx 和 clash for android 一样「内置」,这也算违反 GPL 的吗?🤔

二进制文件好像是分情况的,要看具体怎么互相使用的。
按照GNU官网的解释:

究竟怎么区分是两个独立的程序,还是一个程序的两个部分呢?这是一个法律命题,最终会由法官来决定。我们相信合理的标准既依赖于通信的机制(exec、pipes、rpc、共享地址空间的函数调用,等等),也依赖于通信的语义(交换了什么样的信息)。
如果两个模块都包含在同一个可执行文件里,那么它们一定是一个程序的组件。如果两个模块运行时是在共享地址空间连接在一起的,那么它们几乎也构成一个组合软件。
反过来,pipes、sockets和命令行参数通常都是两个不同程序通信的机制。因此,如果使用它们来通信,这些模块正常应该是独立的程序。但是如果通信的语义非常密切,交换复杂的内部数据结构,那么它们也被会认为是一个大程序的两个组合部分。

按照我的理解,最终提供服务的是Clash Core,CFW不可能离开Core工作,所以CFW应该属于Core的衍生品,确实违反了GPL。但是找律师还是算了吧,于情于理都不可行。本身在和墙的斗争当中,我们就不该丧失任何开发者的力量;而且此类软件在大陆根本就是违法的,所以别想在大陆地区起诉了,在其他地区起诉更是不可能有作用。当然最终决定权在 @Dreamacro ,我提这个issue的目的只是想定个性,提个醒。

你的理解全是错的不知道吗? 按你的逻辑,现实例子,安卓不可能离开linux工作,所以属于linux衍生品,安卓是Apache,违反GPL?
GPL有明确的条款可以无污染使用。还想定个性?你是想扣个侵权的帽子吧。

@test8421 我认为你说的

不论是否为代码原作者,只要以GPL授权,任何人都不能剥夺他人获得衍生品源码的权利

是错的,因为常见问题中有提到
https://www.gnu.org/licenses/gpl-faq.html#ReleaseUnderGPLAndNF

如果你是自己代码的版权持有者,那么你可以在不同时间按照不同的非互斥许可证发布。

确实,我说错了,需要加这一个例外,但我不认为所有的贡献者都认为Clash的版权持有者是Dreamacro。

@test8421 之所以会有闭源版的原因主要有两个:

1. 了解到存在拿 clash 付费做所谓「定制版」的事情

2. 存在非良性 Fork,什么是非良性 Fork 呢?或者说在我看来什么是非良性 Fork 呢?
   首先是在 Fork 过后加了点功能后便不停的同步上游,并在自己渠道上进行分发,但**长时间内都对上游毫无贡献**

如果你能打包票不让上述两件事情发生,当然我也愿意开源,毕竟开源可以更容易发现问题并解决问题。如果你不能阻止上述事情发生,那么请你不要做一个所谓的「开源斗士」。这已经是权衡后的结果。

除非闭源版本没有使用任何开源版本的代码,或者在闭源版本中导入开源版本的功能。

要说的一点是,你可以到 https://github.com/Dreamacro/clash/graphs/contributors 上看提交数据。如果说 clash 是不是存在我自己没法实现的功能的话,截止到目前只有 PROCESS-NAME 这个规则。但无法否认即使只改一个 typo 也是对项目有利的。我也并没有因为有 premium 就停止对开源版本的维护,说到底本来就是打算有两个版本的,只是由于上述的原因把另一个版本闭源了。
premium 也不是真正意义上的闭源,如果有意愿想提交,我也可以直接加到 Collaborator 里

这些开源可能造成的后果应该在你开源之前就考虑好,开源等于是默许了第2点的发生。至于第一点,我觉得这些定制版肯定是需要谴责的。你无需给我套「开源斗士」的帽子,从头到尾我就没要求过放出源码,你后面说的内容我觉得已经偏离讨论范围了,我就不多说了。

不过既然没有其他人对闭源有异议,我也不准备冒着被喷「开源斗士」的风险多说什么了,最后祝项目开发顺利吧!

别瞎猜了,还大概率呢。cfw调用官方clash二进制,单独进程,内存隔离,协议通信,是标准的无污染使用方式。
我发现很多人对GPL的误解不是一般的深,还喜欢拿一些模糊性的陈述做文章。
维护开源首要条件就是了解开源,整天喊口号,你被喷开源斗士一点都不冤枉。

@fzhhik 实际上这个是有争议的。FSF 的解释尽可能扩大 GPL 的「感染」范围,这应该能够反映 GPL 起草时的初衷。但是大多数法官未必会支持 FSF 这样解释协议。

Was this page helpful?
0 / 5 - 0 ratings

Related issues

nobody-65534 picture nobody-65534  ·  3Comments

mchotdograp picture mchotdograp  ·  5Comments

HuLian21 picture HuLian21  ·  7Comments

Tsahao picture Tsahao  ·  4Comments

OneHappyForever picture OneHappyForever  ·  3Comments