V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hooopo
V2EX  ›  程序员

偷了点开源代码的 CSS,作者发邮件来要诉诸法律

  •  3
     
  •   hooopo ·
    hooopo · 63 天前 · 13871 次点击
    这是一个创建于 63 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大概是这样的,最新搞了一个开源项目 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 条附言  ·  63 天前
    咨询了一下 plausible CEO,他的回复:

    No worries, thanks for getting back to me and working with me on this. You didn't hurt us, there's no hard feelings. I think Hypercable is a cool project demonstrating some interesting tech :) We use AGPL to protect us from large corproations but if our code gets relicensed by somebody else under Apache, then we lose the protections. I hope you understand.

    Yes, the AGPL license is designed to be viral in this sense. If any AGPL code is used in a project, the whole project must be open sourced under the AGPL license. It's much more strict than MIT/Apache.

    This is what protects us from large corporations, for example Google has a policy to never use AGPL licensed code in their projects because it would force them to open-source their projects.

    > Once I have removed the references to AGPL v3, can I then change my project to another open source protocol, such as Apache v2 or MIT?

    Yes. For now you can change the project over to AGPL by just pushing a new license to the repo. Once you feel like your product is unique enough, doesn't look like Plausible, and doesn't use any of our code, you can change back to MIT/Apache. But when changing from AGPL to MIT/Apache, you need the permission of all the collaborators of the project.

    So, if during the time it's AGPL you accept any PRs or contributions, the contributors become copyright owners along with you and their written permission is required to change the license back.

    You can bypass this by not accepting any contributions while it's AGPL, or accepting contributions only with a Contributor License Agreement that signs the copyright of the contribution itself over to you. That way you remain the sole copyright owner and are free to change the license without anyone's permission.

    I hope this clarifies things a bit. We believe in using AGPL and recommend it, especially if you want to make money with your project. But you are the boss of your own project :)
    91 条回复    2021-03-11 09:18:51 +08:00
    iseki
        1
    iseki   63 天前 via Android
    如果你的代码没有其他人的 pr,那么你可以随时决定你写的部分的许可证(仅仅是你写的部分(在不违反各项依赖的许可证的情况下
    FS1P7dJz
        2
    FS1P7dJz   63 天前   ❤️ 4
    我说楼主...做错事就要认错好不好

    GPL 协议最主要的几个原则:

    确保软件自始至终都以开放源代码形式发布,保护开发成果不被窃取用作商业发售。任何一套软 件,只要其中使用了受 GPL 协议保护的第三方软件的源程序,并向非开发人员发布时,软件本身也就自动成为受 GPL 保护并且约束的实体。也就是说,此时它必须开放源代码。

    AGPL = GPL + 一条限制
    一条限制:如果使用 AGPL 许可的软件与用户通过网络进行交互,也需要提供源代码给用户,所有的修改也要给用户。

    所以既然对方是 AGPL,那么你使用了对方的代码,你的项目也已经上线了,那自然就变成 AGPL 协议,
    wangxn
        3
    wangxn   63 天前 via iPhone
    @iseki 按照那个发邮件的人的意思,AGPL 是扩散的吧,用了的话整个项目必须是 AGPL 。你说的像是 LGPL 协议。
    FS1P7dJz
        4
    FS1P7dJz   63 天前
    如果你依然坚持用 Apache 2.0 那么就不要用别人的代码,自己写,或者使用兼容协议的组件
    alan0liang
        5
    alan0liang   63 天前 via Android   ❤️ 1
    把来自 plausible 的代码彻底清除之后就跟他们没关系了,只要代码全是自己写的,并且不违反依赖库的 license,就可以自己随意定 license 。license 是用来限制别人的,自己可以随意处置自己写的代码(当然,不能违反依赖项目的 license)。

    Disclaimer: IANAL
    bagheer
        6
    bagheer   63 天前   ❤️ 3
    css 不是人家创造出来的??
    奇怪,这语气显然是不把前端当代码
    hooopo
        7
    hooopo   63 天前 via Android
    @FS1P7dJz 同意你的说法哇 所以我现在按照他的指示改了 但不清楚还有什么需要注意的地方
    hooopo
        8
    hooopo   63 天前 via Android
    @bagheer 你说的对!
    hooopo
        9
    hooopo   63 天前 via Android
    @alan0liang 就是说 license 是以文件为单位的吗 不是整个项目为单位?
    alan0liang
        10
    alan0liang   63 天前 via Android
    @hooopo #9 其实 license 可以比文件更细,但是 AGPL 要求 derivative work 全部 AGPL,这时候整个项目都可以看作 derivative work,所以项目全部需要 AGPL 。
    hooopo
        11
    hooopo   63 天前 via Android
    @alan0liang 可怕
    justin2018
        12
    justin2018   63 天前
    @hooopo 另外一个开源项目是哪个项目 我挺喜欢这个 UI 的 求 Github 地址
    wwwe
        13
    wwwe   63 天前 via Android
    看了一下 Plausible 之前用的是 MIT 协议,是不是用那时候的版本的代码就没问题了?

    还有一个问题,难道说用了 AGPL 协议统计服务的网站也必须遵守 AGPL 么?
    hooopo
        14
    hooopo   63 天前 via Android
    alan0liang
        15
    alan0liang   63 天前 via Android   ❤️ 1
    @wwwe 我觉得可以认为统计服务和网站本身的关系只是 mere aggregation,不构成 derivative work,见 https://opensource.stackexchange.com/a/4500 ; Again, IANAL.
    anguiao
        16
    anguiao   63 天前
    我想知道原作者是怎么发现的😂
    hooopo
        17
    hooopo   63 天前 via Android
    @anguiao 在 Twitter 上被转发了 就被看到咯
    l4ever
        18
    l4ever   63 天前
    css 名字改改?
    leeg810312
        19
    leeg810312   63 天前 via Android
    移出使用的代码,有 release 包含相关代码的,删除这些 release,这样你可以仍然保持 Apache 许可
    mxT52CRuqR6o5
        20
    mxT52CRuqR6o5   63 天前 via Android
    @wwwe 像 c 语言这种如果使用一个库,如果用静态链接则会受 gpl 传播影响,用动态链接就不会
    (按照我的理解)前端应该也是类似的道理,你直接 script 标签引 js 库不受影响,但如果用 webpack 之类的打包工具把 gpl 协议的库 inline 到最后生成的 bundle 中就会受 gpl 影响了
    binux
        21
    binux   63 天前 via Android
    我想知道抄 devtools 里的 computed CSS 算抄源码吗?
    Jirajine
        22
    Jirajine   63 天前 via Android   ❤️ 1
    @alan0liang “只要代码全是自己写的”确实没问题,但一般开源项目很少满足这个条件。
    像某些 GPL 许可的项目运营很久以后突然宣布修改协议并闭源这种,完全是违反协议的。
    LokiSharp
        23
    LokiSharp   63 天前
    可以把 CSS 拆出来独立一个项目吧
    feather12315
        24
    feather12315   63 天前 via Android
    写个中间层封装,动态导入 lib,该中间层用别的协议发布
    Jirajine
        25
    Jirajine   63 天前 via Android
    @mxT52CRuqR6o5 你说的应该是 LGPL,GPL 按 FSF 的说法动态链接也不行。像 Qt 、GTK 这些允许你动态链接发布的都是 LGPL 许可的。
    alan0liang
        26
    alan0liang   63 天前 via Android   ❤️ 1
    @mxT52CRuqR6o5 动态链接也不行,不然就不会有 LGPL 了。
    ai277014717
        27
    ai277014717   63 天前
    这种代码改改名字调换一下顺序。还会产生纠纷不?
    yaphets666
        28
    yaphets666   63 天前
    @binux 当然不算了 源码是啥意思 源代码文件里的代码
    no1xsyzy
        29
    no1xsyzy   63 天前   ❤️ 1
    @Jirajine 不一定有违反什么,许多项目的 CONTRIBUTING 设置的是贡献者完全放弃权利捐献给项目方( GNU 项目似乎就推荐你完全放弃权利全部给 FSF )。
    你当然可以不接受,那也就是说你也不应当贡献进主代码树(硬分叉)。
    但同时,已经 GPL 发布的版本你仍然被允许使用,你甚至可以在此版本上建立硬分叉,独立维护一个开源版本。

    @mxT52CRuqR6o5 LGPL 才不影响动态链接。GPL 仍然影响动态链接。

    @hooopo 你要 filter-branch 或者 BFG,历史提交中存在 AGPL 授权的代码的话,这些提交也同理。
    另外,AGPL 不可撤销。我已经 fork 了你处于 AGPL 状态的版本,你删光别人的 AGPL 授权代码再 relicense 也没用了,一旦 AGPL 发布过就再也回不去了 °3°
    binux
        30
    binux   63 天前 via Android
    @yaphets666
    @ai277014717
    但是有可能违反版权哦
    vbcity
        31
    vbcity   63 天前
    还是上国内的 gitee 吧, 外国人再怎么厉害,也没法整我们中国人的代码,即便是抄的,那也是鞭长莫及。
    no1xsyzy
        32
    no1xsyzy   63 天前   ❤️ 1
    @wwwe @alan0liang 一是不构成 derived work,二来 A 前缀是针对网络交互的,实际上与运行了 AGPL 的代码的服务进行交互的不包含提供内容的服务器。

    AGPL 的要求不是 “用户” 而是 “网络交互的对端”(因为充分地考虑到 P2P 程序的存在。)
    以 Plausible 为例,(如果我没理解错的话)此处客户端是 “用户浏览器中运行的 JS”,服务端是 “接受回报并生成分析的 Elixir 程序”。
    如果你根据其 protocol 重新实现一个客户端,或者重新实现一个服务端,则不需要向对方告知你修改了代码。
    如果你修改了服务端,你必须向任何尝试向你的服务端提交信息的客户端告知你修改后的服务端源码。
    如果你修改了客户端,你必须向你尝试提交信息的服务端告知你修改后的客户端源码。

    @hooopo 话说我倒是觉得奇怪,analytics 类系统为什么还会有用 Apache ?
    通常而言,重度反 Google 人士才会自己写一个 analytics,而反 Google 人士都喜欢用 AGPL 。
    而且 analytics 系统是可以比较容易地被 cloud-private 的。
    aisk
        33
    aisk   63 天前   ❤️ 22
    @vbcity 偷东西不被发现就没问题了?
    a719031256
        34
    a719031256   63 天前
    GPL 系列-假开源
    MIT-真开源
    rootmaster
        35
    rootmaster   63 天前
    作者在国外 ,让他来告啊 ,钱都是问题
    Jooooooooo
        36
    Jooooooooo   63 天前
    可以不理他, 你在中国他就管不着.
    throns
        37
    throns   63 天前
    @Jooooooooo
    @rootmaster 在中国是管不着,楼主被发现主要是在 Twitter 推广,受众基本都是外国人
    impl
        38
    impl   63 天前
    哈哈,楼主抄的太明显了
    no1xsyzy
        39
    no1xsyzy   63 天前   ❤️ 3
    @hooopo 我发现说得不够明确。
    你可以 BFG 掉别人的代码然后再重新以 Apache 授权,这一操作是没问题的。
    但是已经发出的 AGPL 授权不可撤回,也就是说我(或者地球上任何自然人或法律实体)将永远可以在 AGPL 授权的条款下使用你的代码。

    也就是说,你即使切换回去,当前的快照也是 double-licensed 的状态。
    别人可以任意地选取其中一种许可接受。

    再参考 https://choosealicense.com/appendix/ 可知,AGPL 大部分情况下限制更严格(所以通常无差)。
    这里主要的差异就是你的 trademark 被释放了,别人(在选择了接受 AGPL 授权的情况下)可能可以在自己的网页内贴上一句 “我用了 HyperCable 来进行访问量统计” 之类的话语 —— 这在 Apache License 2.0 下是显式不授权的(但并不是说 AGPL 下存在显式或隐式的授权)。
    hooopo
        40
    hooopo   63 天前
    @no1xsyzy Thanks♪(・ω・)ノ
    hooopo
        41
    hooopo   63 天前
    @throns 还是要在规则内玩啦 我现在只是对这些规则不太清楚...
    alienx717
        42
    alienx717   63 天前
    你可以打印出来把源码给他,到付
    Greatshu
        43
    Greatshu   63 天前
    我遇到过,直接无视,同时上传到自建 git 服务器
    Chappako
        44
    Chappako   63 天前   ❤️ 20
    回复里好些人偷的那么脸不红心不跳的
    caola
        45
    caola   63 天前
    @hooopo 临时解决办法,直接压缩一下 CSS 代码就可以了,
    以后有时间慢慢修改一下 class 的名称之类的,再更换一下 CSS 的前后顺序,反正让人看不出是抄的就行
    QBugHunter
        46
    QBugHunter   63 天前   ❤️ 5
    @rootmaster

    @Jooooooooo

    对于你们脸皮的厚度,在下佩服。。。。
    imzcg2
        47
    imzcg2   63 天前 via Android
    删库不跑路。换国内 git 服务并且不理他。tx 直呼内行
    coderluan
        48
    coderluan   63 天前
    低情商 : 仗着位置不怕告, 你是腾讯吗?
    高情商 : 宣布是外包干的, 已经开除了, 然后改几个对方说的文件, 剩下的装没看见, 表示可以赔使用者几毛钱, 但是不会赔偿开发者.
    kaedea
        49
    kaedea   63 天前 via Android
    这东西就跟玩盗版游戏,可以搞,just be guilty
    maggiett
        50
    maggiett   63 天前
    上面那个不是很明显反串嘲讽的?这么直的勾你们也咬?
    RedBeanIce
        51
    RedBeanIce   63 天前   ❤️ 2
    @maggiett 钓鱼的没有明显暗号,一律杀掉。否则怎么认得清。
    RedBeanIce
        52
    RedBeanIce   63 天前   ❤️ 2
    楼上的部分人,真的可以直接 block
    muzuiget
        53
    muzuiget   63 天前
    要么你死不认偷的,顶多是仿的,代码是自己写的,人家没证据的话,耐不了你何。

    你现在都已经发帖自爆认偷了,人家有资格叫你开源了。

    要不你死厚脸皮下去。
    muzuiget
        54
    muzuiget   63 天前
    好吧,原来已经开源,那个版本只能是 AGPL 了。
    biguokang
        55
    biguokang   63 天前
    @Jooooooooo 如果他的项目托管在 github,或者其他境外网站,有可能会被 DMCA 掉的。。。当然放 gitee 之类的就没影响
    charlie21
        56
    charlie21   63 天前
    有点意思
    HFX3389
        57
    HFX3389   63 天前
    有没有人来科普一下 GPL 、LGPL 、AGPL 、MIT 等等各种开源协议的区别呀?
    vbcity
        58
    vbcity   63 天前
    @aisk 偷东西得看怎么偷啦。 只要不被发现,法律也没辙。
    另外偷的对象也得区分对待。国内有厂家,解密了芯片,获取芯片的逆向汇编逻辑,从而了解了产品的核心设计思想,这算啥呢? 这叫“引进消化吸收”,为祖国的崛起做出了了不起的贡献。
    另外,你要人家不抄袭,还是不要开源的好, 另外加上种种混淆加密,至少要增加别人破解的时间成本。最后呢, 不要卖给中国人高端的东西,他们会逆向的。

    最后,狗头保命。。doge
    iseki
        59
    iseki   63 天前 via Android
    @wangxn 是的,agpl 也是有传染性的,所以我说,在不违反依赖性的许可证的情况下,可以重新对自己的代码 relicense
    iseki
        60
    iseki   63 天前 via Android
    也就是说,假设该项目未接受其他人的 pr (否则必须逐一要求同意),在移除该依赖项后可以重新使用自己喜欢的许可证(
    dc25b
        61
    dc25b   63 天前
    我还是想给楼主解决问题的态度点个赞,比置之不理什么的强多了。
    maqingxi
        62
    maqingxi   63 天前
    要开发个项目真是不容易。
    ck65
        63
    ck65   63 天前
    对面 CEO 回复很真诚啊,看了也学到点东西。
    hooopo
        64
    hooopo   63 天前 via Android
    @iseki 是的 更新了内容
    lewinlan
        65
    lewinlan   63 天前 via Android
    不把 css 当代码,这可不就在说我吗 X-)
    baobao1270
        66
    baobao1270   63 天前
    看来搞开源之前阅读相关科普真的非常重要

    我第一次用 GitHub 的时候,就去学习了各种 License 的区别,也知道了 GPL 的扩散性
    huangqihong
        67
    huangqihong   62 天前
    我想到了腾讯了
    encro
        68
    encro   62 天前
    应用第三方,最好还是 MIT 吧。
    一般来说商业公司选择 AGPL+另外一个商业协议是开源的比较好选择。
    FaiChou
        69
    FaiChou   62 天前
    我更好奇他是如何发现代码被 copy 了的? 有什么途径吗? 我之前遇到过 https://www.v2ex.com/t/664883#reply0
    Felldeadbird
        70
    Felldeadbird   62 天前
    既然对方找上门,自己确实用了人家的代码,要么回滚库,要么按照 AGPL 执行。
    joesonw
        71
    joesonw   62 天前
    @iseki 全部移除之后的那个 commit 开始可以是自己的 license. 之前的部分还是是 AGPL.
    richardwong
        72
    richardwong   62 天前
    @Greatshu 那你很勇哦
    no1xsyzy
        73
    no1xsyzy   62 天前
    @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 就很简单 —— 你必须无菌,并且合并时符合更高要求的无菌环境。
    jaylee4869
        74
    jaylee4869   62 天前
    让我们回顾一下践踏 GPL 的 QQ 影音: https://byvoid.com/zhs/blog/qq-player-ffmpeg-gpl/
    jsjgjbzhang
        75
    jsjgjbzhang   62 天前
    V2 上当然怎么正义怎么来了,关了论坛当然无视咯
    327013234
        76
    327013234   62 天前
    读书人那能叫偷嘛
    FaiChou
        77
    FaiChou   62 天前
    @no1xsyzy #73 比如我开源一个前端 GPLv3 协议的项目到 github 上, 别人用 npm 安装, 我如何检测安装的项目没有遵循正确的协议? 可以在哪里添加脚本? 项目代码里还是 npm ?
    hooopo
        78
    hooopo   62 天前
    @FaiChou 商机来了,可以做一个检测协议兼容性的 bot
    FaiChou
        79
    FaiChou   62 天前
    @hooopo #78 我觉得已经有这种 bot 了, 我只是不知道怎么实现的. 而且你的代码如果是 copy 的, 作者怎么知道你“抄”了他代码?
    no1xsyzy
        80
    no1xsyzy   62 天前
    @FaiChou 不清楚你指的范畴是什么?
    甲、有客观依据的:
    1. 从许可证声明来说,package.json 里有许可证声明。
    2. 从协议兼容性及合规性自动化检测来说,也可以自动地检查整个依赖系的许可证声明。
    乙、无客观依据,有客观方法的:
    3. 从代码文本分析上来说,有各种相似度检测。具体的相似度百分比取值是玄学,只能保证同一相似度 scheme 下,相似度更高的更可能是更相似的(注意这一表达是个贝叶斯学派的表达)。
    丙、无客观方法的:
    4. 从代码检查来说,似乎除了雇用(组织内或外包)观测者以外并没有很好的方法。(本案中 OP 自称是 Twitter 上宣传被看到了。)
    5. 从定性上来说,具体是否算 “抄” 是法庭的事儿。
    no1xsyzy
        81
    no1xsyzy   62 天前
    @no1xsyzy 4. 应是 “从全网代码监控来说”
    siteshen
        82
    siteshen   62 天前
    问下熟悉协议的大佬们,如果项目里 `pip install` 或者 `mvn install` 了某 AGPL 的包,是不是整个项目都应该 AGPL 了?不太清楚「 import 」、「使用」、「修改」等的区别和界限。
    FightPig
        84
    FightPig   62 天前
    @vbcity 这,,不是掩耳盗铃?
    vbcity
        85
    vbcity   62 天前
    @FightPig 额。 这叫“引进、消化、吸收”,读书人偷书不算窃。。 你要开源的话,就要做好被人家窃的准备,否则就别开源。
    ch2
        86
    ch2   62 天前
    @HFX3389 MIT 是真开源,随便你怎么用无所谓,其他的不是
    sykp241095
        87
    sykp241095   62 天前
    efaun
        88
    efaun   62 天前
    看了上面的一些回复,国内开发环境就是这样被破坏的
    liudengchn
        89
    liudengchn   62 天前
    既然是开发人员,还是守规矩的好~大家都遵守一定的规则,开发这个事情才能越玩越好。
    msg7086
        90
    msg7086   62 天前   ❤️ 2
    LICENSE 是你给别人的授权。
    你自己的代码,你是版权所有的,有无限的权利。而别人呢,默认没有任何权利。
    现在你写了 LICENSE,你可以把你拥有的一部分权利转让给别人。

    那么现在你(借)来了一部分别人的代码。
    这部分代码不是你版权所有的,因此你默认没有任何权利。
    现在对方以 AGPL 许可证授权你使用。

    对方说:
    兄弟,只要你的代码全都是 AGPL 的,那你就可以把我的代码也放进去用。
    但是,如果你的代码不是 AGPL 的,那对不起,你不能用,请乖乖删掉。

    那么你有两个选择。
    1. 把你的代码改成 AGPL,然后白嫖别人 AGPL 的代码。
    2. 保持你的许可证不变,然后删除白嫖的许可证不兼容的代码。

    当然,你完全可以先选 1,以后再选 2 。
    代码所有的作者可以一起决定代码的许可证。
    如果删除了外来代码以后,所有代码都是你写的,那么你自己就可以更换许可证。
    如果所有的代码是你和路人甲一起写的,那么你和路人甲两个人同时同意后就可以更换许可证。

    许可证只对当前版本生效。换句话说,这个软件在今天之前的版本是 Apache 2.0 的,今天之后的版本是 AGPL 的,有朝一日等你改回 Apache 2.0 的话,也只对改回以后的版本生效。

    所以,一般我们为了不惹麻烦,都是(借) MIT 或者 BSD 许可证的项目。
    hooopo
        91
    hooopo   61 天前 via Android
    @msg7086 通俗易懂
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1033 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 22:51 · PVG 06:51 · LAX 15:51 · JFK 18:51
    ♥ Do have faith in what you're doing.