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

分享一次被老外指责违反 MIT 协议的故事

  •  1
     
  •   coloz · 2018-12-26 14:12:58 +08:00 · 16314 次点击
    这是一个创建于 2166 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的项目:
    https://github.com/blinker-iot/blinker-library/

    经过如下:
    https://github.com/blinker-iot/blinker-library/issues/287

    简单说下经过,

    1. 我们开发了一个名为 blinker 的物联网解决方案,现有的功能类似米家、阿里智能、home assistant。
    2. 我们并没有使用这个哥们儿的项目代码。
    3. 我们确实借鉴了其使用 C++模板类的方式,去构建了通信类,这在 issues 中一开始也说了。
    4. 但我们并不认为这个做法违法了 MIT 协议,项目更不是该项目的衍生版本,哥们一开始就说我们盗窃知识产权,这让我很不爽。

    我的处理方式,
    由于我和同事脾气都不太好,加上这哥们儿居然连 logo 和配置文件也觉得是一样,开始的时候回答简单粗暴了点。
    结果,这哥们儿貌似开始在 FB 上声讨我,因为不是英语国家的人,说的可能是俄语啥的,翻译出来也看不太懂。
    最后,我们换了一种写法,并添加了感谢信息,自认为算是结束了这个讨论。

    总结下经验

    1. 虽然我自以为已经很注意相关协议,在文档和 readme 中都注明了使用到的项目,但还是没料到这种事,国人在国际上名声不太好,老外一开始就会主观的认为你不守规矩,所以大家做开源软件,真是要一开始就把 readme 写得滴水不漏,避免老外指责。

    2. 除了要写 readme,还要及时更新,很多人和我们一样把 github 当仓库用,但缺忽略了 github 也是个公告板,如果用了漏写了什么,可能会遭人诟病。

    3. 之前经常鼓励别人多看开源项目,学习别人好的写法,但现在我认为,如果觉得别人写法好,也不要学习,反而应该竟可能规避。

    4. 学好英语,避免和老外交流出现错误的表达,如果英语不好,直接用中文回复,让老外自己翻译,用了错误的表达,会刺激到老外。

    5. 遵纪守规,尽力维护中国程序猿形象

    58 条回复    2021-11-01 18:41:12 +08:00
    Lax
        1
    Lax  
       2018-12-26 14:28:36 +08:00
    果然英语要表达恰当,不然容易留下弱点给对方攻击。对方针对那段 ascii art 显示的问题太过无理了
    PerFectTime
        2
    PerFectTime  
       2018-12-26 14:36:08 +08:00
    emm 有毒......
    sswxysswxy
        3
    sswxysswxy  
       2018-12-26 14:36:08 +08:00   ❤️ 2
    “ Are u silly B ???” 你们同事确实可爱 😂😂😂但愿这个不是你🤔🤔🤔
    jmc891205
        4
    jmc891205  
       2018-12-26 14:43:40 +08:00   ❤️ 1
    一上来就说 "I had forked blynk codes before, and I use the template class(c++) same as blynk to build blinker."
    有理也变成没理了
    coloz
        5
    coloz  
    OP
       2018-12-26 14:53:12 +08:00   ❤️ 1
    @sswxysswxy 不是我,也不是我同事,写了 Member 的才是我们,可能是某个用户,因为老外已经看到了,所以没删,怕删了,老外又有得说了
    fl2d
        6
    fl2d  
       2018-12-26 14:53:32 +08:00   ❤️ 1
    自己没做错的话,千万别道歉。该怼就怼,别因为对方是老外就怂了。

    当然前提是,自己没做错。
    coloz
        7
    coloz  
    OP
       2018-12-26 14:56:09 +08:00
    @jmc891205 英语不好,说的太急,后面我也做了解释,仅仅是用了同样 template 方式去实现一个模板,相同的代码,可能有 10 行不到吧
    jeffcott
        8
    jeffcott  
       2018-12-26 15:01:39 +08:00
    与主题无关,用中文还是用英语,这个问题我感觉挺现实的;

    我和你的看法一致,“如果英语不好,直接用中文回复,让老外自己翻译,用了错误的表达,会刺激到老外。”;

    但是,另一种更普遍的看法“ github 上用英语是基本礼貌”;

    这两种看法,楼主怎么看
    xeaglex
        9
    xeaglex  
       2018-12-26 15:03:04 +08:00
    按照通行的做法,如果思路上你参考了它的实现,哪怕语法上和命名上不同,你这的确都算他的衍生品。不过 MIT 协议仅仅要求你们在相应位置添加人家的版权信息而已,这又有何不可呢?
    Rh1
        10
    Rh1  
       2018-12-26 15:04:36 +08:00 via iPhone
    国外就没有杠精和喷子?国外程序员里就没有 V2 里某些奇葩?
    fullpowers
        11
    fullpowers  
       2018-12-26 15:07:41 +08:00
    借鉴别人的写法,自己造出一个的话会不会违法开源协议?
    (我也经常借鉴其他优秀开源项目的写法)
    gclove
        12
    gclove  
       2018-12-26 15:08:22 +08:00
    我觉得肯定借鉴了一些 ... 关键 MIT 不是自由宽松的许可证吗 ? 几乎没有什么限制
    KasuganoSoras
        13
    KasuganoSoras  
       2018-12-26 15:09:00 +08:00
    他要你删字符画那个是真的逗比,明明就是一条命令 figlet 就行了
    歪果仁也不是全都素质这么高,素质 dio 差的我也遇到不少了
    coloz
        14
    coloz  
    OP
       2018-12-26 15:09:34 +08:00   ❤️ 1
    @jeffcott 由于我英语不好,因此我认为我使用中文更礼貌。。。
    nooper
        15
    nooper  
       2018-12-26 15:09:38 +08:00
    什么是 mit,什么是 copy,什么是抄袭,一定要认认真真搞清楚。
    xmge
        16
    xmge  
       2018-12-26 15:14:44 +08:00
    如果觉得别人写法好,也不要学习,反而应该竟可能规避。 如果没理解错的话,自我感觉作者有点玻璃心了,因为一个老外就不学习,是不是把他看得太重了。想学习就学习,他爱咋咋滴。
    coloz
        17
    coloz  
    OP
       2018-12-26 15:15:38 +08:00
    @xeaglex MIT 并没有相关说明,如果我们是在他项目基础上修改的,我认为可以算是衍生品。
    事实上我们的代码,借鉴了很多前人的项目,只是“这个项目是以下几个项目的衍生品”,这种说法貌似没有看到过。
    由于我们并不认为是衍生品,所以并没有添加权利信息,只是添加了感谢信息
    tabris17
        18
    tabris17  
       2018-12-26 15:17:51 +08:00   ❤️ 1
    你可以用中文写,然后告诉对方,我写了,你 tm 自己看不懂中文怪谁
    coloz
        19
    coloz  
    OP
       2018-12-26 15:24:18 +08:00
    @gclove
    确实是借鉴了,但我们认为使用 C++template 语法,和泛型编程实现,是一个常见的用法,所以并没有在意。
    其中相同的几行的代码,是状态描述和对应函数:连接、未连接、连接中,我也认为是网络连接的正常写法。
    并没有考虑到这可能违反 MIT 协议,事实上 MIT 协议也对这种情况没有说明。

    现在已经没有用这个语法了,换个了方式写,并添加了对其的感谢
    bumz
        20
    bumz  
       2018-12-26 15:26:03 +08:00   ❤️ 2
    私以为那个老外的要求你们一个都不用满足

    因为你们的项目不是他的项目的 derivative work

    但是你们的「 To be honest, I had forked blynk codes before, and I use the template class(c++) same as blynk to build blinker.」反倒是在说你们的项目是一个 derivative work。这就等于直接认输了。

    「 But the way how to communicate and connect server and so on are all different with blynk.」这句话相当于是在说你们的项目是一个 new work,而不是原 work,因为它有 "protectable expression that is not found in a prior work"。而 new work 是 derivative work 的一个基本要求。所以这句话依旧在佐证你们的项目是 derivative work。

    私以为正确的做法是这样回复:

    Our work is NOT a derivative work of yours. Our code is new and DO NOT contain any piece of code from your work.

    We DID steal your ideas, such as project structure, architecture, logos, configuration options, headers, descriptions, but these are ideas, not code. Ideas cannot be copyrighted, it is not protected by your code license. Stealing your ideas DO NOT make our work a derivative work of yours, therefore we DID NOT violate your code license.
    coloz
        21
    coloz  
    OP
       2018-12-26 15:27:12 +08:00
    @fullpowers 虽然我不认同,但真是有可能,从很多讨论可以看出,大家对开源协议的解读都不一样。
    xeaglex
        22
    xeaglex  
       2018-12-26 15:30:59 +08:00
    @coloz 感谢信息也可以,其实就是表明这个地方多多少少受了他的好处。用 MIT 协议开源的人能要的也只有这个名头了,不然他为啥要开源啊。
    xeaglex
        23
    xeaglex  
       2018-12-26 15:33:01 +08:00
    @bumz 额,我也是看了他们的英文回复所以得到“确实是衍生品”的印象……后面的中文回复怎么看都像是在辩解了哈哈。
    coloz
        24
    coloz  
    OP
       2018-12-26 15:34:05 +08:00
    @bumz 感谢,确实我们表达有问题,但我也不同意使用 steal 一词,我只是觉得我们用了一个常用的语法去定义类,没有考虑到这样的做法可能违反协议。
    当然是否违反协议,大家也众说纷纭,只是我个人觉得不违反。
    如果这种做法违反 MIT 协议,很多项目可能都要添加一句“这个项目是以下几十个项目的衍生品”。
    bumz
        25
    bumz  
       2018-12-26 15:43:21 +08:00   ❤️ 1
    @coloz #24 问题不在于 steal/copy/learn from,而在于你 steal/copy/learn from 的是 idea 还是 expression。如果你抄了 idea,没关系(比如用 ASCII Art 就是一个 idea );如果你抄了 expression,比如代码,那么你明显违反了协议。
    coloz
        26
    coloz  
    OP
       2018-12-26 15:44:31 +08:00
    @bumz 感谢指正,受益良多
    w01230
        27
    w01230  
       2018-12-26 15:53:59 +08:00
    Blynk Blinker 这个……
    关于 LOGO 部分我也认为你们抄了~哈哈
    chaichaichai
        28
    chaichaichai  
       2018-12-26 15:54:05 +08:00
    啊,我之前一直在使用 Blynk,感觉可以试一下你们的项目,但是你们官网好像挂了?不知道你们是否支持 server 端部署在私有服务器上
    deanzh16
        29
    deanzh16  
       2018-12-26 15:58:09 +08:00 via Android
    Please tell us the same thing.
    这个也太好笑了吧
    bumz
        30
    bumz  
       2018-12-26 15:59:09 +08:00
    @coloz #19

    「确实是借鉴了,但我们认为使用 C++template 语法,和泛型编程实现,是一个常见的用法,所以并没有在意。
    其中相同的几行的代码,是状态描述和对应函数:连接、未连接、连接中,我也认为是网络连接的正常写法。」

    但是如果在法庭上「其中相同的几行的代码」可能足够让 jury 认为你们的项目是一个 derivative work。
    至于「使用 C++ template 语法,和泛型编程实现」这显然是 idea 而不是 expression。
    coloz
        31
    coloz  
    OP
       2018-12-26 16:00:21 +08:00
    @deanzh16 英语不好,配合百度谷歌翻译的,见笑了
    coloz
        32
    coloz  
    OP
       2018-12-26 16:02:42 +08:00
    @chaichaichai 企业版的才可以独立部署,计划提供个开源 APP,不需要 server 端也能用
    coloz
        33
    coloz  
    OP
       2018-12-26 16:09:41 +08:00
    @w01230 我们中文名叫点灯,通常学习单片机开发,把 IO 口置高置低让一个 led 灯亮灭,中文通常说点灯,英文说 blink,这是单片机开发第一课,相当于学编程的 hello world,我们这个方案,基础功能就是完成这种控制,加个 er,表示这是一个实现功能的控制器,也指学习单片机的新手。
    coloz
        34
    coloz  
    OP
       2018-12-26 16:15:19 +08:00
    @bumz 如果如此,是不是应该注明项目为多个项目的衍生品呢?
    但貌似看没有人这么写。 观察很多实现类似功能的程序,实际都有重合的写法和代码,有些是用不同语言同样的结构实现。 如何才能规避相同写法呢?
    w01230
        35
    w01230  
       2018-12-26 16:15:26 +08:00
    不过 MIT 不是可以随意拷贝 复制 修改发行的嘛(只要不侵权)……各位详解?
    exceloo
        36
    exceloo  
       2018-12-26 16:17:07 +08:00
    以为老外就没有沙雕?
    coloz
        37
    coloz  
    OP
       2018-12-26 16:19:46 +08:00
    @w01230 需要声明原作者
    w01230
        38
    w01230  
       2018-12-26 16:23:54 +08:00
    @coloz 多谢解释~
    disonlee
        39
    disonlee  
       2018-12-26 16:26:02 +08:00
    借鉴模板类的方式...这也算抄么....
    我真心认为这是借鉴并发扬光大...我要是原作者会很开心.....
    Kirscheis
        40
    Kirscheis  
       2018-12-26 16:26:28 +08:00 via Android
    你一开始的回复就错了。一旦你承认刚开始是从某个作品出发,哪怕你贡献了 100%的新内容,也就是原作品的源代码已经被删得一行都不剩下,也还是原作品的衍生。

    如果你希望参考某个作品但是重新创造新作品,正确的办法是采用 clean room design。

    如果我是你,我要么会在对应的文件添加版权信息,要么会完全删除这个仓库,删除侵权部分,并且从头重新 commit 一遍
    fullpowers
        41
    fullpowers  
       2018-12-26 16:26:47 +08:00
    https://github.com/SoyM/Esp32bot 这个会不会也侵权了
    bumz
        42
    bumz  
       2018-12-26 16:44:36 +08:00   ❤️ 1
    @Kirscheis #40 这个不一定吧

    如果你把它的每一行代码都替换成了新的,新作品 100% 没有原作品的代码,那么它就已经不再包含「 sufficient protectable expression from a prior work 」,也就不再是 derivative work 了

    case: lame, http://lame.sourceforge.net/about.php
    Kirscheis
        43
    Kirscheis  
       2018-12-26 17:28:22 +08:00
    @bumz

    感谢你的讨论

    我个人认为如果新的代码都和原功能彻底无关的话,确实有可能没有 sufficient protectable expression from a prior work,不过很难想象会有人从一个作品出发去衍生成另一个完全无关的东西...... 而一旦你的功能或者设计上有任何类似的地方,都无法说清楚不是 derivative work,根据以往的情况来看,即使是你个人在完全读懂原本代码的基础上从头自己实现,依然会被认为属于 derivative work,这也是 chinese wall 必要性的来源。

    不过对于你举的例子 lame,我记不太清楚它的历史了,但我大概记得它在开始时并不是 dist10 的一个衍生,而是作为一个独立的 patch。虽然运行依赖于 dist10,不过从第一行代码起就是 GPL 的吧。举个类似的例子的话,就很像是当年各种 windows 下的简单窗口程序,它们的工作都依赖于 windows API,离开 windows 都无法运行甚至编译,但也不能说这些程序都是 windows 的衍生作品吧。

    至于后来的 lame 的逐步实现并从 patch 变成彻底独立的软件,我认为这其中并不侵权的主要原因是由于 MP3 标准是确定的,兼容性要求导致其相似性,因此不存在创造性元素,举例来说,NEC vs. Intel, 1990
    atonku
        44
    atonku  
       2018-12-26 17:35:53 +08:00
    @jeffcott 楼主我倒是不知道,但是我怕老外能看懂我的中文,看不懂我的英语
    admirez
        45
    admirez  
       2018-12-26 17:54:49 +08:00
    借鉴了人家的思路,连个感谢都舍不得写?
    CHYK
        46
    CHYK  
       2018-12-26 18:13:48 +08:00
    最好声明原作者。。。这个还是蛮重要的。

    之后,还有,不适合展开的就是,我可没有说印度同事的坏话啊 :p
    感觉一展开就会引来异常骂战,这里没有印度的朋友吧,逃、
    chinvo
        47
    chinvo  
       2018-12-26 18:24:50 +08:00
    怎么说呢,前面的部分确实是楼主不对,用了别人的模板类,如果改动不大确实应该给模板类的文件加上版权声明,如果只是借鉴思路,最好也在文件或者 readme 写明。

    但是楼主一开始的表达直接说自己的项目是对方的一个衍生品,瞬间落了下风。

    后面老外要求删掉 ASCII art 就无理取闹了,ASCII art 并不是他个人的专利,也不是他个人的 idea,这点不能向他妥协。
    coloz
        48
    coloz  
    OP
       2018-12-26 18:38:57 +08:00
    @admirez @chinvo 没有这个意识,写作过程中,没有意思到使用泛型编程算是他的特有一个思路。
    如果意识到,肯定也不会这么写了,现在已经添加了了感谢,并且换了个写法。
    所以我做了总结,要学会规避他人写法
    bumz
        49
    bumz  
       2018-12-26 18:40:15 +08:00   ❤️ 3
    @Kirscheis #43 lame 一开始作为 derivative work,是 GPL,当最后一行原作代码被移除后,它得以解除 derivative work,使用 LGPL 版权。类似的例子还有 BSD,系统地移除了来自 AT&T Unix 的代码后获得了属于自己的版权。

    保护功能的是 patent。copyright 不保护功能和想法,只保护表达 (expression)。所以哪怕你的功能和原代码相同,只要你采用不同的方式实现,就 ok
    coloz
        50
    coloz  
    OP
       2018-12-26 18:41:32 +08:00
    @Kirscheis 您说的是,所以新的代码换了个写法
    Kirscheis
        51
    Kirscheis  
       2018-12-26 19:29:18 +08:00
    @bumz 谢谢,学习了。感谢已发送
    creatorz
        52
    creatorz  
       2018-12-27 08:00:09 +08:00
    @sswxysswxy 其实是我 hhhhh 实在看不下去这种 SX 了。跳出来骂两句
    neoblackcap
        53
    neoblackcap  
       2018-12-27 13:21:39 +08:00
    @w01230 MIT 能复制,分发,只是要保留作者的原来 MIT 声明,但是假如你的东西是用了 MIT,别人的实现里面有用他的专利,那么你就悲剧了。MIT 授权协议不管专利,据我了解 GPLv2 好像也是没有。GPLv3 不知道有没有。
    唯一一个详细说明专利授权的开源协议是 Apache 2.0,所以优先使用 Apache 2.0 的项目
    w01230
        54
    w01230  
       2018-12-27 13:35:24 +08:00
    @neoblackcap 多谢,原来还有这个东西,如果别人的也是 MIT,但是有别人的专利,这种授权还要交专利费?
    neoblackcap
        55
    neoblackcap  
       2018-12-27 14:13:24 +08:00   ❤️ 1
    @w01230 你们都不研究授权协议,当初 React 的授权协议风波不就是这样吗?违反专利当然是需要付专利费,所以理论上你可以在 GPL 或者 BSD 的代码里面埋一个专利坑。然后等别人用了,你就挥动你的专利大棒去收专利税。
    coloz
        56
    coloz  
    OP
       2018-12-27 17:12:15 +08:00
    @neoblackcap MIT 也可以这么做么?
    neoblackcap
        57
    neoblackcap  
       2018-12-28 03:51:25 +08:00   ❤️ 1
    @coloz 当然可以,BSD,MIT,GPLv2 这些都是在版权问题,都是围绕著作权做文章。但是专利是独立的,是专利法管的,要是 BSD 这些有用的话,FFmpeg 就不用附带一句他们实现的东西有可能违反专利法了,https://ffmpeg.org/legal.html。

    不过你要知道专利法是看国家的,比如我们国家就不保护已公开的算法思想,一旦开源,我们国家的专利法是帮不了你的。还有就是,你不能要求我们国家学加拿大。你想用中国的法去办俄罗斯的人也是不行的。你要去多个国家申请专利,这样你的法律大棒才能挥起来。所以一般这事也就跨国企业能玩。
    HADB
        58
    HADB  
       2021-11-01 18:41:12 +08:00
    是我的话,一开始直接说一下,借鉴了你的 template ,我会加上声明。不就完事儿了。对方本来要求的就是添加声明,而确实也借鉴了他的项目,哪怕一点点借鉴,我觉得也是值的加上一个声明的。就不会有后续这些事了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2501 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 02:27 · PVG 10:27 · LAX 18:27 · JFK 21:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.