“我的开源项目被‘盗用’了!”

2023-12-24 02:38
文章标签 项目 开源 盗用

本文主要是介绍“我的开源项目被‘盗用’了!”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

整理 | 苏宓

出品 | CSDN(ID:CSDNnews)

  • UNIX 的命名者 Brian W. Kernighan:开源是一件非常好的事情,它对软件行业的发展至关重要(现在几乎所有东西都和开源有关)。如今我们其实已经取得了很大的进步,主要的软件系统,如操作系统、编译器和工具都可以作为高质量商品免费提供;

  • Vue.js 作者尤雨溪:开源有一个好处就是只要项目技术过硬,就可以跨越文化和语言的隔阂;

  • OpenCV 创始人 Gary Bradski :如果我要走商业化的道路,应该可以赚很多钱,但我更关心开源对社会进步的推动。但另一方面,我并不认同开源完全免费,资金支持很重要。

  • ......

当提及“为什么会选择开源”时,在《新程序员001:开发者黄金十年》中,这些嘉宾如是说。兴起于软件行业的开源,以开放、共享、协同为本质,成为众多科技公司和个人开发者的利器之一,而它在逐渐渗透到各个领域的同时也为技术创新提供了重要的渠道。

不过,当个人的创新成果成为他人商业化的产品时,开源似乎就“变了味”。

近日,澳大利亚的一位开发者 Brendan Gregg 发布了一篇《An Unbelievable Demo》控诉自己在多年前开发的一款开源项目被彼时的科技巨头 Sun Microsystems 作为商业产品的部分进行销售,其中该公司还将他的代码涉及其姓名的注释部分全部做了删除处理,而世界轮回,最终这款产品销售对象之一竟然是自己,颇为讽刺。

与此同时,值得注意的是,Brendan Gregg 发现他的开源项目被“盗”用并不是近期发生的事情,而是在 16 年前,但是如今想起仍似昨日,且今天仍有不少的开源作者们有着相似的经历。基于此文,Brendan Gregg 也希望呼吁更多开发者或企业不要直接复制他人的开源代码,因为这样的举措,一方面会来带重复劳动力,一方面也会让客户使用过时的软件版本,带来一定的安全风险。

Brendan Gregg:一位实战派大神

打开 Brendan Gregg 的履历(http://www.brendangregg.com/),你会发现他正如传说中的那番,是一位“实战派大神”。他目前在 Netflix 从事大规模云计算性能方面的工作。

来自:http://www.brendangregg.com/appearance.html

Brendan Gregg 出版过《Systems Performance: Enterprise and the Cloud》、《BPF Performance Tools: Linux System and Application Observability》等图书;在 AWS re:Invent 2019、Ubuntu Masters 2019 、 NetConf、 PerconaLive 等会议上担任过演讲嘉宾;编写过 bcc/BPF 最终用户教程、Python 开发人员教程(https://github.com/iovisor/bcc/blob/master/docs/tutorial_bcc_python_developer.md)。

同时,他也是一位狂热的开源爱好者,开发并发布了基于 Linux perf_events 和 ftrace 的性能分析工具 perf-tools(https://github.com/brendangregg/perf-tools);用于性能分析的 FlameGraph(https://github.com/brendangregg/FlameGraph);用于从跟踪数据生成交互式 SVG 热图的程序 HeatMap(https://github.com/brendangregg/HeatMap)等等。

“我发现我的开源项目被‘盗用’了”

在《An Unbelievable Demo》控诉一文中,Brendan Gregg 提到了一家公司——Sun Microsystems,想必不少互联网从业者也并不陌生,作为曾经的科技巨头之一,其开发的 Java 仍然是当代主流的编程语言。2009 年,Sun Microsystems 被 Oracle 以 74 亿美元收购。而 Brendan Gregg 提及的事情则要追溯到 2005 年。

2005 年,Brendan Gregg 是 Sun Microsystems 公司的一名独立的性能顾问,他会为 Sun 公司员工做一些培训以及咨询工作,帮助他们的客户进行提升系统管理和性能。有时候,Sun 公司也会以当地专家的身份邀请他去参加 Sun 公司的客户会议以及其他 Brendan Gregg 个人可能感兴趣的活动。

在这一年中,Sun Microsystems 公司发布了一款可以检测所有软件的工具 DTrace。据维基百科显示,它最初由 Sun Microsystems 公司创建,用于实时诊断生产系统上的内核和应用程序问题。

在这款软件发布不久后,Brendan Gregg 在应用 DTrace 编写和发布高性能工具的过程中发现了一些问题:这款软件和他此前开源的 DTraceToolkit 和其他 DTrace 工具相比,有些类似,但是功能似乎稍逊一筹。

不过,由于 Brendan Gregg 并不是 Sun Microsystems 的内部员工,所以他对 Sun 公司的内部项目一无所知。

Brendan Gregg 与 Sun 公司的 DTrace 专家交谈始末

但是在一个偶然的机会下,他遇到了一位来自 Sun 公司的 DTrace 专家和开发人员,而这位专家正在世界做巡回演讲,展示 Sun 公司基于 DTrace 的新产品。

彼时,Brendan Gregg 在两位澳大利亚籍 Sun 公司员工的陪同下,和这位来自美国的  DTrace 专家见了面。在见面的过程中,其中一位澳大利亚籍 Sun 员工向对方介绍道,“Brendan 为我们教了一些课程,并且一直在做一些 DTrace 的相关工作。”

而 Brendan Gregg 本人也试图通过分享其曾编写了 DTraceToolkit 工具以此来打开双方共同的话题,但是这位 DTrace 专家似乎从来没有听过 Brendan Gregg 的名字,也从来没听过 DTraceToolkit 工具。Brendan Gregg 表示,“对他来说,我只是个随便的陌生人。”

后来,这位 DTrace 专家还是非常友好地给 Brendan Gregg 进行了  DTrace 新产品的快速演示。

在演示过程中, Brendan Gregg 发现对方的 DTrace 产品是他已经非常熟悉且更大版本的 Sun GUI 附加组件。譬如,当加载后,可以通过双击图标来运行多个 DTrace 工具之一。原始输出将呈现在单独的窗口中,或者结果将显示为折线图。在 Brendan Gregg 看来,这似乎相当平庸,因为原来的 Sun GUI 已经具有显示工具的原始输出或绘制折线图的功能。

Brendan Gregg 试图从这款工具中找到一些创新点。因此,他又继续浏览了一些新的 GUI 图标,其中他看到了一个用于跟踪套接字 I/O 的工具。其实,早在 2004 年,Brendan Gregg 自己尝试写过这个(socketsnoop.d,http://www.brendangregg.com/DTrace/socketsnoop.d)并将其作为开源项目发布,不过当时这款工具写的并不完整,用 Brendan Gregg 自己的话来讲,“这款工具没有办法访问内核源代码,因此不得不使用黑盒分析来解决所有问题;这款工具适用于大多数 TCP 流量类型,但不适用于其他类型,我在脚本注释中对此进行了警告。我还没有将它包含在 DTraceToolkit 中,因为我认为它还没有完成。”

因此,在 Brendan Gregg 看到 Sun 公司的 DTrace 这款产品中包含用于跟踪套接字 I/O 的工具时,他情不自禁地问道,“我可以看到套接字 I/O 脚本吗?”,与此同时,他点击启动了一个终端。而此时这位 DTrace 专家看起来有些惊慌失措,他认为 Brendan Gregg 不应该看他们的后台,但是他也意识到或许可以以此为卖点时,稍有停顿之后其回答道:“嗯,当然,你甚至可以在 GUI 中添加更多工具!”

于是,他给了 Brendan Gregg 一个开始查找的路径,经过一番体验以及搜索之后,Brendan Gregg 惊呆了,他发现了此前这位 DTrace 专家做演示时候的所有工具目录,然而这些目录中都有他熟悉的名字,甚至包括了一个名为 socketsnoop.d 的项目名。

此时,Brendan Gregg 意识到了某种可能性,于是他进一步输入 socketsnoop.d 时,发现屏幕上跳出来的都是他自己一年前不完整的尝试,彼时这些代码都是作为开源项目公开发布的。与此同时,Sun 公司的这个项目中也包含了一些奇怪的代码,而这些代码都是他早期的编码风格来编写的。

事情进行到这里,Brendan Gregg 几乎可以确定自己的开源项目被 Sun 公司应用到这款商业产品中。后来,他还尝试在这位 Sun 公司 DTrace 专家的电脑的所有工具中搜索 Brendan Gregg 这个的名字,但遗憾的是,Brendan Gregg 什么也没发现,这意味着 Sun 公司在用他开源代码的同时,直接把他的名字、许可等信息删除了。

Brendan Gregg 觉得讽刺的是,“现在,这位专家在澳大利亚悉尼,试图将 Brendan Gregg 的工具卖给 Brendan Gregg。”

在文章中, Brendan Gregg 表示,“我的大部分工具都有我自己的版权和 GPLv2 或 CDDL 许可证。但这些只有 Sun 的标准版权信息,而且开源许可证已被剥夺。虽然 Sun 的一些人鼓励开源贡献并建立一个社区,但其他人却在窃取同一个社区的产品。当拿走他们的作品时,更改许可和版权,然后将其出售。”

虽然后来,这位 DTrace 专家并没有说太多,或许是他不知道发生了什么事情,或许他也是从其他人那里得到了这款工具,但 Brendan Gregg 还是建议他直接从其开发的 DTraceToolkit 中获取工具的更新副本,并提醒他保留其姓名、版权和许可证。

重复地“造轮子”只能带来资源浪费

在文章中,Brendan Gregg 表示,“在我发布的开源工具中,我仍然无法相信 socketsnoop.d 被他们选用了。因为这款工具并不是很优秀,后来我还写了更好的套接字工具。”

或许在有些人看来,这或许并不是 Sun 公司的本意,而是个别人员的行为,但是 Brendan Gregg  认为这个和 Sun 公司的企业文化有着必不可少的关系。因为,后来 Apple 公司也曾将 Brendan Gregg 的数十种工具添加到了 OS X 中。但是对方保留了 Brendan Gregg 的姓名、版权和 CDDL 开源许可证等完整的信息,甚至也对开源项目进行了改进和增强。与此同时,多年后,无论是 Oracle 还是 BSD 社区在使用其工具的时候,都会根据开源相关的要求,保留作者完整的信息。

Brendan Gregg  在文章最后写道:

这是第一次但不是最后一次有人无意中试图向我出售我的作品。只是后来我学会了不告诉销售人员我发明了他们展示给我的东西,因为他们会觉得我像一个疯子一样,只是简单地说“我对这项技术有很多经验”和“就这样吧”。

我之所以现在提起这个案例,是因为我的 BPF 工具现在出现在可观察性产品中,并且其增长到比我的 DTrace 工具规模还要大得多。我会在以后的文章中详细介绍它,但我对开发人员的直接建议是:请不要重写我的 BPF 工具和 bcc 库;尝试按原样构建它们(bcc Python 或 bcc libbpf-tool 版本)并获取定期更新。这是因为它们正在进行中,重写它们会划分工程资源,并使您的客户使用过时的版本。

至于那个令人难以置信的演示:这不是我听到世界巡演时想象的伟大的 DTrace 产品。事实上,它是我自己的工具。我怀疑开源开发者在某个时候发现他们自己的代码已被重新命名的情况并不少见。但这种情况下的情况可能有点不寻常。一位美国开发人员因并非他编写的软件进行了世界巡回演讲,其中包括在澳大利亚无意中向作者进行了销售宣传和演示。

他甚至没有说一声“谢谢”。

网友热评

当 Brendan Gregg 发布这篇文章之后,引发很多网友的共鸣,其纷纷表示也曾有过相关的经历:

@Vincent Milum Jr:

  • 听起来你的经历比我的少一些。我最好的朋友之一,在我的一次演讲之后,我们在会议的大厅里见面了。他开始向我引用我发表的一篇文章,却没有意识到我是作者。

@cperciva:

  • 让我想起有一次 Apple 为 OS X 提供“更小尺寸的更新”。当时的我对他们实现的细节很好奇,因为我的博士论文涉及到这个话题,所以我联系了我的朋友(我有一些来自 FreeBSD / OS X 的 Apple 公司朋友),几个月后我得到的回复:“我们正在使用一个名为 bsdiff 的工具,你熟悉它吗?” 那是当然,因为我是上述工具的作者。

    (需要说明的是,本案中没有违反许可证;只是缺乏对他们使用的开源软件的出处的认识。)

@knolan:

  • 我在一个相当受人尊敬的机械工程实验室攻读博士学位。我的领域是实验流体力学。我最终在那里编写了大量 MatLab 代码,甚至在生物技术领域的实验室中与一家衍生公司合作了一段时间。

    经常性会有很多其他学生来找我寻求编码帮助,事实上,大多数人只是想让我为他们做他们的工作,而我有时候无法拒绝。其中有一次,有人想使用图像处理对微流体设备中的细胞进行计数。我和他们讨论了很久,并引导其了解了一些他们可以研究的方法,并帮助他们开始收集脚本中的所有示例等等。几个月后,我看到对方将我的简单介绍作为一篇零修改的论文发表了。不过,他至少在致谢中感谢了我。

    几年后,在大厂的科技实验室工作时,我们面试了旧实验室的一名候选人。他们向我展示了他们对热像仪图像进行了一些数据分析。我发现原来他们使用的是我曾经在那里任职时候写的脚本,却没有人对其进行过修改或改进过代码。我很生气,因为倘若没有进一步开发代码,那说明他们甚至没有阅读或理解过这段代码。

    在物理科学研究中,很多人对代码作者和开发者一无所知,就像我所说,许多人对代码感到胆怯因此会选择很多捷径去获取它,但他们不重视这份代码所需要的时间和专业知识,因为当他们一旦拥有这份代码时,他们就不会再考虑它背后的维护者亦或感谢作者。

开源本是创新的源泉,如果只是一味地汲取而没有任何的奉献,那么开源势将不会长久。与此同时,作为开源开发者,在带来开源软件的同时也要注重版权保护,防止自己的劳动成果被他人窃取。而对于开源软件如果避免被侵权,你有什么好的想法?欢迎下方留言分享。

参考:

http://www.brendangregg.com/blog/2021-06-04/an-unbelievable-demo.html

http://www.brendangregg.com/

https://news.ycombinator.com/item?id=27390512、

https://twitter.com/brendangregg/status/1400661237420023818

推荐阅读点分享点收藏点点赞点在看

这篇关于“我的开源项目被‘盗用’了!”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/530305

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

在.NET项目中嵌入Python代码的实践指南

《在.NET项目中嵌入Python代码的实践指南》在现代开发中,.NET与Python的协作需求日益增长,从机器学习模型集成到科学计算,从脚本自动化到数据分析,然而,传统的解决方案(如HTTPAPI或... 目录一、CSnakes vs python.NET:为何选择 CSnakes?二、环境准备:从 Py

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca