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

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

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免