大概是这样的,最新搞了一个开源项目 https://v2ex.com/t/758460 由于前端能力有限,从另外一个开源项目里扒了大部分 CSS,由于 Plausible 是 AGPL v3 协议,作者发来邮件需要我把项目从 Apache 2.0 也改成 AGPL v3,否则要采取法律途径...
吓得我赶紧连夜搞了个 PR
https://github.com/HyperCable/hypercable/pull/28
有没有熟悉开源协议的朋友,请教一下还需要注意什么?我可以移除这部分依赖之后再改回 Apache 2.0 或者 MIT 吗?
1 iseki 2021-03-09 12:35:41 +08:00 via Android 如果你的代码没有其他人的 pr,那么你可以随时决定你写的部分的许可证(仅仅是你写的部分(在不违反各项依赖的许可证的情况下 |
![]() | 2 FS1P7dJz 2021-03-09 12:40:18 +08:00 ![]() 我说楼主...做错事就要认错好不好 GPL 协议最主要的几个原则: 确保软件自始至终都以开放源代码形式发布,保护开发成果不被窃取用作商业发售。任何一套软 件,只要其中使用了受 GPL 协议保护的第三方软件的源程序,并向非开发人员发布时,软件本身也就自动成为受 GPL 保护并且约束的实体。也就是说,此时它必须开放源代码。 AGPL = GPL + 一条限制 一条限制:如果使用 AGPL 许可的软件与用户通过网络进行交互,也需要提供源代码给用户,所有的修改也要给用户。 所以既然对方是 AGPL,那么你使用了对方的代码,你的项目也已经上线了,那自然就变成 AGPL 协议, |
3 wangxn 2021-03-09 12:41:33 +08:00 via iPhone @iseki 按照那个发邮件的人的意思,AGPL 是扩散的吧,用了的话整个项目必须是 AGPL 。你说的像是 LGPL 协议。 |
![]() | 4 FS1P7dJz 2021-03-09 12:41:58 +08:00 如果你依然坚持用 Apache 2.0 那么就不要用别人的代码,自己写,或者使用兼容协议的组件 |
![]() | 5 alan0liang 2021-03-09 12:42:10 +08:00 via Android ![]() 把来自 plausible 的代码彻底清除之后就跟他们没关系了,只要代码全是自己写的,并且不违反依赖库的 license,就可以自己随意定 license 。license 是用来限制别人的,自己可以随意处置自己写的代码(当然,不能违反依赖项目的 license)。 Disclaimer: IANAL |
![]() | 6 bagheer 2021-03-09 12:44:01 +08:00 ![]() css 不是人家创造出来的?? 奇怪,这语气显然是不把前端当代码 |
![]() | 9 hooopo OP @alan0liang 就是说 license 是以文件为单位的吗 不是整个项目为单位? |
![]() | 10 alan0liang 2021-03-09 12:48:52 +08:00 via Android @hooopo #9 其实 license 可以比文件更细,但是 AGPL 要求 derivative work 全部 AGPL,这时候整个项目都可以看作 derivative work,所以项目全部需要 AGPL 。 |
![]() | 11 hooopo OP @alan0liang 可怕 |
![]() | 12 justin2018 2021-03-09 13:00:58 +08:00 @hooopo 另外一个开源项目是哪个项目 我挺喜欢这个 UI 的 求 Github 地址 |
13 wwwe 2021-03-09 13:06:55 +08:00 via Android 看了一下 Plausible 之前用的是 MIT 协议,是不是用那时候的版本的代码就没问题了? 还有一个问题,难道说用了 AGPL 协议统计服务的网站也必须遵守 AGPL 么? |
![]() | 14 hooopo OP |
![]() | 15 alan0liang 2021-03-09 13:13:13 +08:00 via Android ![]() @wwwe 我觉得可以认为统计服务和网站本身的关系只是 mere aggregation,不构成 derivative work,见 https://opensource.stackexchange.com/a/4500 ; Again, IANAL. |
![]() | 16 anguiao 2021-03-09 13:13:20 +08:00 我想知道原作者是怎么发现的 |
18 luckyc 2021-03-09 13:19:45 +08:00 css 名字改改? |
19 leeg810312 2021-03-09 13:22:41 +08:00 via Android 移出使用的代码,有 release 包含相关代码的,删除这些 release,这样你可以仍然保持 Apache 许可 |
20 mxT52CRuqR6o5 2021-03-09 13:22:55 +08:00 via Android @wwwe 像 c 语言这种如果使用一个库,如果用静态链接则会受 gpl 传播影响,用动态链接就不会 (按照我的理解)前端应该也是类似的道理,你直接 script 标签引 js 库不受影响,但如果用 webpack 之类的打包工具把 gpl 协议的库 inline 到最后生成的 bundle 中就会受 gpl 影响了 |
![]() | 21 binux 2021-03-09 13:24:18 +08:00 via Android 我想知道抄 devtools 里的 computed CSS 算抄源码吗? |
22 Jirajine 2021-03-09 13:28:21 +08:00 via Android ![]() @alan0liang “只要代码全是自己写的”确实没问题,但一般开源项目很少满足这个条件。 像某些 GPL 许可的项目运营很久以后突然宣布修改协议并闭源这种,完全是违反协议的。 |
![]() | 23 LokiSharp 2021-03-09 13:28:57 +08:00 可以把 CSS 拆出来独立一个项目吧 |
![]() | 24 feather12315 2021-03-09 13:30:47 +08:00 via Android 写个中间层封装,动态导入 lib,该中间层用别的协议发布 |
25 Jirajine 2021-03-09 13:32:21 +08:00 via Android @mxT52CRuqR6o5 你说的应该是 LGPL,PL 按 FSF 的说法动态链接也不行。像 Qt 、GTK 这些允许你动态链接发布的都是 LGPL 许可的。 |
![]() | 26 alan0liang 2021-03-09 13:32:27 +08:00 via Android ![]() @mxT52CRuqR6o5 动态链接也不行,不然就不会有 LGPL 了。 |
27 ai277014717 2021-03-09 13:32:38 +08:00 这种代码改改名字调换一下顺序。还会产生纠纷不? |
![]() | 28 yaphets666 2021-03-09 13:33:05 +08:00 @binux 当然不算了 源码是啥意思 源代码文件里的代码 |
![]() | 29 no1xsyzy 2021-03-09 13:42:42 +08:00 ![]() @Jirajine 不一定有违反什么,许多项目的 CONTRIBUTING 设置的是贡献者完全放弃权利捐献给项目方( GNU 项目似乎就推荐你完全放弃权利全部给 FSF )。 你当然可以不接受,那也就是说你也不应当贡献进主代码树(硬分叉)。 但同时,已经 GPL 发布的版本你仍然被允许使用,你甚至可以在此版本上建立硬分叉,独立维护一个开源版本。 @mxT52CRuqR6o5 LGPL 才不影响动态链接。GPL 仍然影响动态链接。 @hooopo 你要 filter-branch 或者 BFG,历史提交中存在 AGPL 授权的代码的话,这些提交也同理。 另外,AGPL 不可撤销。我已经 fork 了你处于 AGPL 状态的版本,你删光别人的 AGPL 授权代码再 relicense 也没用了,一旦 AGPL 发布过就再也回不去了 °3° |
![]() | 30 binux 2021-03-09 13:49:34 +08:00 via Android |
31 vbcity 2021-03-09 14:02:14 +08:00 还是上国内的 gitee 吧, 外国人再怎么厉害,也没法整我们中国人的代码,即便是抄的,那也是鞭长莫及。 |
![]() | 32 no1xsyzy 2021-03-09 14:07:11 +08:00 ![]() @wwwe @alan0liang 一是不构成 derived work,二来 A 前缀是针对网络交互的,实际上与运行了 AGPL 的代码的服务进行交互的不包含提供内容的服务器。 AGPL 的要求不是 “用户” 而是 “网络交互的对端”(因为充分地考虑到 P2P 程序的存在。) 以 Plausible 为例,(如果我没理解错的话)此处客户端是 “用户浏览器中运行的 JS”,服务端是 “接受回报并生成分析的 Elixir 程序”。 如果你根据其 protocol 重新实现一个客户端,或者重新实现一个服务端,则不需要向对方告知你修改了代码。 如果你修改了服务端,你必须向任何尝试向你的服务端提交信息的客户端告知你修改后的服务端源码。 如果你修改了客户端,你必须向你尝试提交信息的服务端告知你修改后的客户端源码。 @hooopo 话说我倒是觉得奇怪,analytics 类系统为什么还会有用 Apache ? 通常而言,重度反 Google 人士才会自己写一个 analytics,而反 Google 人士都喜欢用 AGPL 。 而且 analytics 系统是可以比较容易地被 cloud-private 的。 |
![]() | 34 a719031256 2021-03-09 14:12:25 +08:00 GPL 系列-假开源 MIT-真开源 |
![]() | 35 rootmaster 2021-03-09 14:14:33 +08:00 作者在国外 ,让他来告啊 ,钱都是问题 |
36 Jooooooooo 2021-03-09 14:17:06 +08:00 可以不理他, 你在中国他就管不着. |
![]() | 37 throns 2021-03-09 14:29:14 +08:00 |
38 impl 2021-03-09 14:46:07 +08:00 哈哈,楼主抄的太明显了 |
![]() | 39 no1xsyzy 2021-03-09 14:55:06 +08:00 ![]() @hooopo 我发现说得不够明确。 你可以 BFG 掉别人的代码然后再重新以 Apache 授权,这一操作是没问题的。 但是已经发出的 AGPL 授权不可撤回,也就是说我(或者地球上任何自然人或法律实体)将永远可以在 AGPL 授权的条款下使用你的代码。 也就是说,你即使切换回去,当前的快照也是 double-licensed 的状态。 别人可以任意地选取其中一种许可接受。 再参考 https://choosealicense.com/appendix/ 可知,AGPL 大部分情况下限制更严格(所以通常无差)。 这里主要的差异就是你的 trademark 被释放了,别人(在选择了接受 AGPL 授权的情况下)可能可以在自己的网页内贴上一句 “我用了 HyperCable 来进行访问量统计” 之类的话语 这在 Apache License 2.0 下是显式不授权的(但并不是说 AGPL 下存在显式或隐式的授权)。 |
42 alienx717 2021-03-09 15:34:43 +08:00 你可以打印出来把源码给他,到付 |
![]() | 43 Greatshu 2021-03-09 15:53:21 +08:00 我遇到过,直接无视,同时上传到自建 git 服务器 |
![]() | 44 Chappako 2021-03-09 16:02:15 +08:00 ![]() 回复里好些人偷的那么脸不红心不跳的 |
![]() | 45 caola 2021-03-09 16:05:03 +08:00 @hooopo 临时解决办法,直接压缩一下 CSS 代码就可以了, 以后有时间慢慢修改一下 class 的名称之类的,再更换一下 CSS 的前后顺序,反正让人看不出是抄的就行 |
![]() | 46 QBugHunter 2021-03-09 16:06:54 +08:00 ![]() |
![]() | 47 imzcg2 2021-03-09 16:07:32 +08:00 via Android 删库不跑路。换国内 git 服务并且不理他。tx 直呼内行 |
![]() | 48 coderluan 2021-03-09 16:46:53 +08:00 低情商 : 仗着位置不怕告, 你是腾讯吗? 高情商 : 宣布是外包干的, 已经开除了, 然后改几个对方说的文件, 剩下的装没看见, 表示可以赔使用者几毛钱, 但是不会赔偿开发者. |
![]() | 49 kaedea 2021-03-09 17:26:29 +08:00 via Android 这东西就跟玩盗版游戏,可以搞,just be guilty |
50 maggiett 2021-03-09 17:39:25 +08:00 上面那个不是很明显反串嘲讽的?这么直的勾你们也咬? |
![]() | 51 RedBeanIce 2021-03-09 17:46:30 +08:00 ![]() @maggiett 钓鱼的没有明显暗号,一律杀掉。否则怎么认得清。 |
![]() | 52 RedBeanIce 2021-03-09 17:48:09 +08:00 ![]() 楼上的部分人,真的可以直接 block |
![]() | 53 muzuiget 2021-03-09 17:55:31 +08:00 要么你死不认偷的,顶多是仿的,代码是自写的,人家没证据的话,耐不了你何。 你现在都已经发帖自爆认偷了,人家有资格叫你开源了。 要不你死厚脸皮下去。 |
![]() | 54 muzuiget 2021-03-09 17:57:26 +08:00 好吧,原来已经开源,那个版本只能是 AGPL 了。 |
![]() | 55 biguokang 2021-03-09 18:02:38 +08:00 @Jooooooooo 如果他的项目托管在 github,或者其他境外网站,有可能会被 DMCA 掉的。。。当然放 gitee 之类的就没影响 |
56 charlie21 2021-03-09 19:09:28 +08:00 有点意思 |
![]() | 57 HFX3389 2021-03-09 19:13:51 +08:00 有没有人来科普一下 GPL 、LGPL 、AGPL 、MIT 等等各种开源协议的区别呀? |
58 vbcity 2021-03-09 19:13:59 +08:00 @aisk 偷东西得看怎么偷啦。 只要不被发现,法律也没辙。 另外偷的对象也得区分对待。国内有厂家,解密了芯片,获取芯片的逆向汇编逻辑,从而了解了产品的核心设计思想,这算啥呢? 这叫“引进消化吸收”,为祖国的崛起做出了了不起的贡献。 另外,你要人家不抄袭,还是不要开源的好, 另外加上种种混淆加密,至少要增加别人破解的时间成本。最后呢, 不要卖给中国人高端的东西,他们会逆向的。 最后,狗头保命。。doge |
59 iseki 2021-03-09 20:41:31 +08:00 via Android @wangxn 是的,agpl 也是有传染性的,所以我说,在不违反依赖性的许可证的情况下,可以重新对自己的代码 relicense |
60 iseki 2021-03-09 20:42:58 +08:00 via Android 也就是说,假设该项目未接受其他人的 pr (否则必须逐一要求同意),在移除该依赖项后可以重新使用自己喜欢的许可证( |
61 dc25b 2021-03-09 20:56:12 +08:00 我还是想给楼主解决问题的态度点个赞,比置之不理什么的强多了。 |
62 maqingxi 2021-03-09 21:02:53 +08:00 要开发个项目真是不容易。 |
![]() | 63 mogita 2021-03-09 22:12:58 +08:00 对面 CEO 回复很真诚啊,看了也学到点东西。 |
![]() | 65 lewinlan 2021-03-09 22:31:58 +08:00 via Android 不把 css 当代码,这可不就在说我吗 X-) |
![]() | 66 baobao1270 2021-03-09 22:44:51 +08:00 看来搞开源之前阅读相关科普真的非常重要 我第一次用 GitHub 的时候,就去学习了各种 License 的区别,也知道了 GPL 的扩散性 |
![]() | 67 huangqihong 2021-03-10 08:38:23 +08:00 我想到了腾讯了 |
![]() | 68 encro 2021-03-10 08:54:28 +08:00 应用第三方,最好还是 MIT 吧。 一般来说商业公司选择 AGPL+另外一个商业协议是开源的比较好选择。 |
![]() | 69 ethusdt 2021-03-10 09:15:26 +08:00 我更好奇他是如何发现代码被 copy 了的? 有什么途径吗? 我之前遇到过 t/664883#reply0 |
![]() | 70 Felldeadbird 2021-03-10 09:34:38 +08:00 既然对方找上门,自己确实用了人家的代码,要么回滚库,要么按照 AGPL 执行。 |
![]() | 72 richardwong 2021-03-10 10:08:52 +08:00 @Greatshu 那你很勇哦 |
![]() | 73 no1xsyzy 2021-03-10 10:44:56 +08:00 @iseki @joesonw 操作上是可以 git filter-branch (这时候谁不用 BFG ?)之后 force push 的,之前的版本仍然可以被 relicense,当前快照可以以 AGPL 永久使用的原因是 OP 简单地替换了 License 。OP 的想法是 Apache 的情况下其实没多大差异,反正 Apache 授权代码可以简单地合并进 GPLv3/LGPL/AGPL 授权代码,但合并结果须以后者相同授权发布。 @Felldeadbird 不一定回滚库,也可以 filter-branch @FaiChou 外形上就非常相似了。 @baobao1270 @iseki 话说我不认为 GPL 侧有传染性,而是专有许可证有传染性。GPL 侧是 “无菌环境” 限定。 简单的类比:两个专有许可证放到一起会发生的情况跟两个病毒放在一起会发生的情况一样完全不可预料。而 GPL 就很简单 你必须无菌,并且合并时符合更高要求的无菌环境。 |
![]() | 74 lavvrence 2021-03-10 10:55:30 +08:00 让我们回顾一下践踏 GPL 的 QQ 影音: https://byvoid.com/zhs/blog/qq-player-ffmpeg-gpl/ |
![]() | 75 jsjgjbzhang 2021-03-10 11:00:25 +08:00 V2 上当然怎么正义怎么来了,关了论坛当然无视咯 |
76 327013234 2021-03-10 11:02:27 +08:00 读书人那能叫偷嘛 |
![]() | 77 ethusdt 2021-03-10 11:38:06 +08:00 @no1xsyzy #73 比如我开源一个前端 GPLv3 协议的项目到 github 上, 别人用 npm 安装, 我如何检测安装的项目没有遵循正确的协议? 可以在哪里添加脚本? 项目代码里还是 npm ? |
![]() | 79 ethusdt 2021-03-10 11:44:50 +08:00 @hooopo #78 我觉得已经有这种 bot 了, 我只是不知道怎么实现的. 而且你的代码如果是 copy 的, 作者怎么知道你“抄”了他代码? |
![]() | 80 no1xsyzy 2021-03-10 12:21:04 +08:00 @FaiChou 不清楚你指的范畴是什么? 甲、有客观依据的: 1. 从许可证声明来说,package.json 里有许可证声明。 2. 从协议兼容性及合规性自动化检测来说,也可以自动地检查整个依赖系的许可证声明。 乙、无客观依据,有客观方法的: 3. 从代码文本分析上来说,有各种相似度检测。具体的相似度百分比取值是玄学,只能保证同一相似度 scheme 下,相似度更高的更可能是更相似的(注意这一表达是个贝叶斯学派的表达)。 丙、无客观方法的: 4. 从代码检查来说,似乎除了雇用(组织内或外包)观测者以外并没有很好的方法。(本案中 OP 自称是 Twitter 上宣传被看到了。) 5. 从定性上来说,具体是否算 “抄” 是法庭的事儿。 |
82 siteshen 2021-03-10 16:09:56 +08:00 问下熟悉协议的大佬们,如果项目里 `pip install` 或者 `mvn install` 了某 AGPL 的包,是不是整个项目都应该 AGPL 了?不太清楚「 import 」、「使用」、「修改」等的区别和界限。 |
85 vbcity 2021-03-10 16:55:04 +08:00 @FightPig 额。 这叫“引进、消化、吸收”,读书人偷书不算窃。。 你要开源的话,就要做好被人家窃的准备,否则就别开源。 |
![]() | 87 sykp241095 2021-03-10 19:04:13 +08:00 |
![]() | 88 efaun 2021-03-10 19:09:58 +08:00 看了上面的一些回复,国内开发环境就是这样被破坏的 |
![]() | 89 liudengchn 2021-03-11 00:31:12 +08:00 既然是开发人员,还是守规矩的好~大家都遵守一定的规则,开发这个事情才能越玩越好。 |
![]() | 90 msg7086 2021-03-11 05:12:29 +08:00 ![]() LICENSE 是你给别人的授权。 你自己的代码,你是版权所有的,有无限的权利。而别人呢,默认没有任何权利。 现在你写了 LICENSE,你可以把你拥有的一部分权利转让给别人。 那么现在你(借)来了一部分别人的代码。 这部分代码不是你版权所有的,因此你默认没有任何权利。 现在对方以 AGPL 许可证授权你使用。 对方说: 兄弟,只要你的代码全都是 AGPL 的,那你就可以把我的代码也放进去用。 但是,如果你的代码不是 AGPL 的,那对不起,你不能用,请乖乖删掉。 那么你有两个选择。 1. 把你的代码改成 AGPL,然后白嫖别人 AGPL 的代码。 2. 保持你的许可证不变,然后删除白嫖的许可证不兼容的代码。 当然,你完全可以先选 1,以后再选 2 。 代码所有的作者可以一起决定代码的许可证。 如果删除了外来代码以后,所有代码都是你写的,那么你自己就可以更换许可证。 如果所有的代码是你和路人甲一起写的,那么你和路人甲两个人同时同意后就可以更换许可证。 许可证只对当前版本生效。换句话说,这个软件在今天之前的版本是 Apache 2.0 的,今天之后的版本是 AGPL 的,有朝一日等你改回 Apache 2.0 的话,也只对改回以后的版本生效。 所以,一般我们为了不惹麻烦,都是(借) MIT 或者 BSD 许可证的项目。 |