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

2018-12-26 14:12:58 +08:00
 coloz

我的项目:
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. 遵纪守规,尽力维护中国程序猿形象

16074 次点击
所在节点    程序员
58 条回复
coloz
2018-12-26 15:27:12 +08:00
@fullpowers 虽然我不认同,但真是有可能,从很多讨论可以看出,大家对开源协议的解读都不一样。
xeaglex
2018-12-26 15:30:59 +08:00
@coloz 感谢信息也可以,其实就是表明这个地方多多少少受了他的好处。用 MIT 协议开源的人能要的也只有这个名头了,不然他为啥要开源啊。
xeaglex
2018-12-26 15:33:01 +08:00
@bumz 额,我也是看了他们的英文回复所以得到“确实是衍生品”的印象……后面的中文回复怎么看都像是在辩解了哈哈。
coloz
2018-12-26 15:34:05 +08:00
@bumz 感谢,确实我们表达有问题,但我也不同意使用 steal 一词,我只是觉得我们用了一个常用的语法去定义类,没有考虑到这样的做法可能违反协议。
当然是否违反协议,大家也众说纷纭,只是我个人觉得不违反。
如果这种做法违反 MIT 协议,很多项目可能都要添加一句“这个项目是以下几十个项目的衍生品”。
bumz
2018-12-26 15:43:21 +08:00
@coloz #24 问题不在于 steal/copy/learn from,而在于你 steal/copy/learn from 的是 idea 还是 expression。如果你抄了 idea,没关系(比如用 ASCII Art 就是一个 idea );如果你抄了 expression,比如代码,那么你明显违反了协议。
coloz
2018-12-26 15:44:31 +08:00
@bumz 感谢指正,受益良多
w01230
2018-12-26 15:53:59 +08:00
Blynk Blinker 这个……
关于 LOGO 部分我也认为你们抄了~哈哈
chaichaichai
2018-12-26 15:54:05 +08:00
啊,我之前一直在使用 Blynk,感觉可以试一下你们的项目,但是你们官网好像挂了?不知道你们是否支持 server 端部署在私有服务器上
deanzh16
2018-12-26 15:58:09 +08:00
Please tell us the same thing.
这个也太好笑了吧
bumz
2018-12-26 15:59:09 +08:00
@coloz #19

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

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

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

如果我是你,我要么会在对应的文件添加版权信息,要么会完全删除这个仓库,删除侵权部分,并且从头重新 commit 一遍

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/521162

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX