上一篇:一个90后员工猝死的全过程

来自公众号:机器之心
这是一个拥抱开源的程序员大牛的「神奇」经历,成文几个小时就在社交网站上获得了数千点赞。
「拥抱开源」不是说说那么简单的,如今很多科技公司都会把这句话挂在嘴边,把开源当作一个重要战略,它们希望自家的工程师投身开源社区,为领域内创造出良好的氛围,以此推动技术的进步,并从中获得更多开发者的支持关注。但有的时候,你很难放心把自己赖以生存的新技术拿来分享,它们可能会被用在各种预料之外的地方,有时别人甚至会借鉴你开源过的代码,反过来针对你。如果你是一个人,对方是一家大公司,这事情就会让你变得怀疑人生了。来自澳大利亚的开发者 Brendan Gregg 在最近的一篇博客中,控诉了 IT 公司 Sun Microsystems 窃取他开源项目「DTraceToolkit」的代码。DTrace 全称 Dynamic Tracing,即动态跟踪,是由 Sun Microsystems 开发的一个用来在生产和试验性生产系统上找出系统瓶颈的工具,可以对内核和用户应用程序进行动态跟踪并且对系统运行不构成任何危险的技术。这是一个很久以前的故事,如今的 Sun Microsystems 鲜有动态,上一次出现在众人视线,还是因为谷歌和甲骨文的十年版权之争获得最终裁决。1995 年,Sun Microsystems 推出了 Java。当年谷歌构建安卓操作系统,用了 Sun Microsystems 的一万多行代码。2009 年,甲骨文以 74 亿美元价格收购了 Sun Microsystems 和 Java 软件。2010 年,甲骨文以「谷歌擅自使用 Java API 作为 Android 操作系统的一部分侵犯专利及版权」为由提起诉讼。历经十年,2021 年 4 月,美国最高法院判处谷歌胜诉。曾经的 Sun Microsystems 是一家极具创新能力的 IT 巨头,但慢慢被其他竞争对手取代。接下来,Brendan Gregg 详细回忆了当年的故事。一个热门开源项目如何被盗这是我在开源世界中遇到的难以置信的经历,绝对不是编造。2005 年,我被卷入飓风中心。当时我是一名独立绩效顾问,而 Sun Microsystems 刚刚发布了 DTrace,这是一个可以检测所有软件的工具。当我忙着使用 DTrace 编写和发布高性能工具时,我发现一个问题:此前我开源的 DTraceToolkit 和其他 DTrace 工具,比 Sun 公司推出的工具要更全面,难道是一些内部项目消耗了他们的技术能力?DTraceToolkit v0.96 工具 (2006)。由于不是 Sun 公司的员工,我对其内部项目一无所知。当时我住在澳大利亚悉尼,正在为 Sun 公司进行培训和咨询工作,帮助他们的客户提升系统管理和性能方面的工作。Sun 公司有时会邀请我以本地专家的身份参加他们的客户会议和其他我可能感兴趣的活动。有一次,我被告知,有一位非常重要的人物从美国来。我不认识那个名字,但听说他是 Sun 公司的 DTrace 专家和开发人员,并且正在世界巡回演讲,展示 Sun 基于 DTrace 的新产品。我见过一些来自 Sun 公司的顶尖技术,但我从未见过巡回展示的开发者。这位大人物在去下一个澳大利亚城市之前,要在悉尼停留几天,所以我同意在 Sun 公司的悉尼办公室见面。两名澳大利亚的 Sun 公司员工向这位大人物介绍了我:「Brendan 为我们讲授一些课程,并且一直在做 DTrace 的相关工作。」低调介绍在澳大利亚是常态(尤其是对澳大利亚人)。我试图表达我写了 DTraceToolkit,以此来打开话题,但他并没有留下什么深刻印象。他不认识我的名字,也没有听说过 DTraceToolkit。对他来说,我只是随便一个陌生人。无论如何,他还是友好地做了一个快速演示。他的 DTrace 产品是我非常熟悉的一个更大的 Sun GUI 的附加组件。加载后,他展示了如何通过双击图标来运行多个 DTrace 工具。原始输出在单独的窗口中,或者将结果显示为折线图,这些似乎相当平庸。我希望有一个新的 GUI 功能。唯一的新东西是工具本身。他进行了一番销售式宣传,就是那些说过很多次、期望能给客户留下深刻印象的话术。我有一种感觉,他不希望我正确地欣赏它们的价值。但我十分了解他讲的这些工具,我为自己的 DTraceToolkit 编写了类似的功能。所以我说:「我以前做过这些,我自己写过做这些事情的工具!」「当然可以。」他没说别的,但是有一种不太相信我的感觉。毕竟这是估值数十亿美元的跨国公司 Sun Microsystems 的重要创新,而我只是随便一个澳大利亚人。随后,我浏览了一些新的 GUI 图标,其中有用于跟踪套接字 I/O 的工具。我在 2004 年尝试过这个(socketsnoop.d)并将其作为开源项目发布,但我当时写的工具不完整:它没有访问内核源代码的权限,所以不得不使用黑盒分析来解决所有问题;它适用于大多数 TCP 流量类型,但不适用于某些类型,我在脚本注释中对此进行了提示;它没有包含在 DTraceToolkit 中,因为我认为它还没有完成。这也是为什么,在所有工具中我最感兴趣的是看到这个。Sun 公司应该可以做得更好,并实际应用这个工具。「我可以看下套接字 I/O 脚本吗?」然后我启动了一个终端。他看起来很惊慌,好像我不应该看后台,然后他仿佛意识到了另一个卖点:「嗯当然,你甚至可以在 GUI 中添加更多工具!」停顿片刻后,他加上了一句「如果你有的话」。经过一番搜索,我找到了包含他此前演示的所有工具的目录。这些工具的名字都很熟悉,其中一个甚至叫做「socketsnoop.d」。这让我想到了一种新的可能,难道……于是我输出了 socketsnoop.d,屏幕上都是我写的脚本,是我一年前的不完整尝试,并作为开源项目发布的内容。它包含一些奇怪的代码,并且是用我早期的编码风格编写的。我输出其他工具并看到了同样的结果——脚本都是我写的。Sun 公司的这位人物在世界各地炫耀的新产品,其实就是我自己的开源工具。我在我所有工具中都写了一条带有我名字的注释,因此我使用 grep 在他们的工具中搜索我的名字,以证明这本来是我的项目。但我什么也没找到,我的名字被删掉了。我编写的一些工具甚至包括:现在,在澳大利亚悉尼,他们试图将 Brendan Gregg 的工具卖给 Brendan Gregg。一位 Sun 公司的澳大利亚员工打断道:「那些人说版权是 Sun Microsystems 的。」我的大部分工具都有我自己的版权和 GPLv2 或 CDDL 许可证。但这些工具现在只有 Sun 的标准版权信息,开源许可证也已经被剥夺。「你删掉了我的名字!还有版权和许可证!」另一个澳大利亚人对大人物补充道:「你『不能』这样做。」基于发生事情的严重性,整个房间陷入了沉默。虽然 Sun 的一些人鼓励开源贡献并建立了一个社区,但其他人却在同一个社区行盗窃之事:拿走他们的作品,更改许可和版权,然后将其出售。这位大人物对此毫无准备,一脸疑惑。他没有说太多,也许并不知道发生了什么,只是从其他人那里得到了已更改版权的工具,意思是「这不怪他」,并且他似乎对我们说的话半信半疑。会议很快结束了。我建议他,直接从 DTraceToolkit 获取我的工具的更新副本,因为我主页上的这些旧版本已经过时,而且有些错误我已经修复了。我还提醒他保留我的姓名、版权和许可证。我仍然无法相信,在我所有的开源项目中,居然是 socketsnoop.d 被引用了。因为我认为这个项目并不是最佳的,我后来又写了更好的套接字(socket)工具。几年后,苹果也将我的数十种工具添加到 OS X,但他们保留了我的姓名、版权和完整的 CDDL 开源许可证,甚至改进了其中一些代码。后来,甲骨文为 Oracle Solaris 11 做了同样的事情,BSD 社区也为 FreeBSD 做了同样的事情。对于这些尊重版权的行为,我由衷地表示感谢。可能有人会说,这不是 Sun 公司的本意,而是个别粗心大意的工作人员的所作所为,但我认为这可能是受到了 Sun 企业文化的影响。我和身边一些同事都认为:Sun 认为只有 Sun 才能充分利用自己的技术,而在 Sun 之外创建的任何东西都是垃圾。当 Sun 的员工发现一些优秀的项目时,他们倾向于假定这些项目是来自 Sun 的,因此可以安全地重复使用和重新命名(甚至是重新许可),因为他们认为他们已经拥有版权。Sun 公司确实也有一些人努力通过我和我的工作来做正确的事情。我的 DTraceToolkit 至少四次被内置到可观察性产品中,并且保留了许可证。有一次,他们想重新获得 GPL 许可,便与我就此事进行了讨论,但这是另一回事。这也不是唯一一次有人无意中试图向我出售我自己开发的项目。后来我学会了不告诉销售人员我发明了他们展示给我的东西,因为他们觉得我像一个疯子,只是简单地说:「我对这项技术有很多经验」,就这样吧。我的 BPF 工具现在出现在可观察性产品中,并且规模将增长到比我的 DTrace 工具大得多。但我对开发人员的直接建议是:不要重写我的 BPF 工具和 bcc 库;按原样构建它们(bcc Python 或 bcc libbpf-tool 版本)。重写会划分工程资源并使您的客户使用过时的版本。我想开源开发者发现他们自己的代码被重新命名的情况并不少见。但这种情况应该不多:一位美国开发人员带着并非他编写的软件进行了世界巡回展示,其中包括在澳大利亚无意中向作者进行了销售宣传。他甚至没有说过一声「谢谢」。这就是作者 Brendan Gregg 讲述的故事。Sun 公司如今已经成为历史,无论如何,不可否认的是开源社区内每一位开发者都对今天的计算机事业做出了自己的贡献,就像该文章的热评所说:当苹果准备为 OS X 提供「更小尺寸的更新」时,我很好奇实现细节,因为我博士阶段的研究涉及到这个话题,所以我询问了苹果相关研究团队的成员,几个月后我得到回复:「我们正在使用一个名为 bsdiff 的工具,你熟悉它吗?」我确实很熟悉,因为我是这个工具的作者。
在这个计算机掀起技术革命的时代,每一位开源贡献者都应该被尊重。

最后,关注公众号互联网架构师,在后台回复:2T,可以获取我整理和创作的 Java 系列教程非常齐全。

推荐阅读

1、2019 年 9 月全国程序员工资统计,你是什么水平?

2、如何才能成为优秀的架构师?

3、从零开始搭建创业公司后台技术栈

4、程序员一般可以从什么平台接私活?

5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6、滴滴业务中台构建实践,首次曝光

7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

8、15张图看懂瞎忙和高效的区别!

“我的开源项目被科技巨头拿去做产品了,注释中连名字都被删掉了”相关推荐

  1. 澳洲开发者:我的开源项目被科技巨头窃取,只是注释删掉了我名字

    本文转载自 IT之家 据外媒报道,一位来自澳大利亚的开发者 Brendan Gregg 在最近的一篇博客中表示,他的开源项目「DTraceToolkit」代码 被 IT 巨头 Sun Microsys ...

  2. 盘点大厂的那些开源项目 - 小米科技

    小米是一家以手机.智能硬件和IoT平台为核心的互联网公司,以智能手机.智能电视.笔记本等丰富的产品与服务.致力于让全球每个人都能享受科技带来的美好生活. "为发烧而生"是小米的产品 ...

  3. 【一起学Rust | 开源项目】效率提升工具espanso——在日常输入中使用代码提示

    文章目录 前言 一.安装 二.使用 1.体验HelloWorld 2.自定义匹配规则 三.包管理 四.获取源码 总结 前言 在使用Mac时,或者说搭建学习某些教程时,总会看到大佬们在输入代码的时候输入 ...

  4. 开源!北大研究生把《统计学习方法》书中全部算法都实现了!

    来源:开源最前线(ID:OpenSourceTop) 一个好的开源项目分享给大家. <统计学习方法>可以说是机器学习的入门宝典,许多机器学习培训班.互联网企业的面试.笔试题目,很多都参考这 ...

  5. 中易通科技禾禾实验室产品培育田——中易通科技禾禾实验室

    中易通科技的研发团队始创于2006年,十五年如一日深耕安全领域,2021年5月21日就在这特殊的一天,中易通科技微铂(VEB)系列产品发布,中易通科技也成立了自己的实验室,命名为"禾禾实验室 ...

  6. 微软Google思科宣布将资助OpenSSL等开源项目

    OpenSSL高危漏洞Heartbleed的曝光,终于促使受益于开源项目的科技巨头展开行动,提供资金资助这些已成为互联网基础设施一部分的开源项目的开发和维护.亚马逊.思科.戴尔.Facebook.富士 ...

  7. 2015年科技巨头的十个开源产品,不只是.NET、Swift

    2015年科技巨头的十个开源产品,不只是.NET.Swift 发表于2015-12-07 10:37| 8245次阅读| 来源InfoWorld| 34 条评论| 作者Jon Gold, Networ ...

  8. 【宝藏】GitHub黑科技的开源项目(有趣高质量)

    博主收集整理 GitHub 上高质量.有趣的开源项目,并将他们进行归类.值得注意的是,不是简单的按照编程语言来分类,而是按照更有趣的分类方式,比如:有趣项目.沙雕项目.实战项目.学习项目.实用工具等等 ...

  9. 美国软件供应链安全行动中的科技巨头们

    本文 2987字   阅读约需 8分钟 软件供应链安全行动,科技巨头成为重要角色.现在美国已形成科技巨头与政府.开源社区等机构密切合作的态势. 我国软件供应链安全同样有众多科技和网络安全企业加入,未来 ...

  10. 中国互联网公司开源项目调研报告

    近年来,开源技术得到越来越多的重视,微软收购GitHub.IBM收购红帽,都表明了开源的价值.国内公司也越来越多的参与开源,加入开源基金会/贡献开源项目.但是,它们到底做得如何呢?为此InfoQ统计了 ...

最新文章

  1. 树莓派:一个关于教育的故事
  2. Ubuntu下如何用Empathy上QQ
  3. 高级篇:独立开发者 5 分钟入门 ASO
  4. 修改Kali Linux终端主题
  5. android adapter排序,Android BindingAdapter执行顺序?
  6. 渲染好的页面怎么转为图片_图片导成PDF后页面大小不同怎么办
  7. Nuxt(一) Nuxt初步认识
  8. 怎么修改RO服务器版本,谁知道build.prop的系统版本号怎么改
  9. 使用ggplot2绘制心形
  10. cad转shp 奥维_如何将地图数据及奥维对象导出到CAD
  11. 使用mapboxgl 实现特定的地图效果
  12. ubuntu下载android11源码
  13. java选取最大数字_用Java程序找最大的数字(4.1)
  14. 在htmlfor循环制作菱形基础上制作空心菱形
  15. 股权和更高的薪资应该选那个呢?
  16. 中国获得2022年冬奥会举办权【经济学人】
  17. 号外号外!博主公众号改名了。
  18. 大容量邮箱如何注册?TOM VIP邮箱帮你轻松搞定
  19. ROHM——反向恢复时间trr的影响
  20. 简体中文和繁体中文转换方法

热门文章

  1. 【转】python编写规范——中标软件有限公司测试中心
  2. 5.1、python remove和del的区别,python 循环删除元素
  3. Node mongoose 结尾总结
  4. 《交互式程序设计 第2版》一第2章 编程基础
  5. spark访问不存在文件,或者空文件
  6. POJ NOI MATH-7827 质数的和与积
  7. 1075. PAT Judge (25)
  8. 苹果macfcpx视频剪辑软件:Final Cut Pro X
  9. Red Giant Trapcode Suite 17 for Mac视频编辑粒子插件
  10. [Jobdu] 题目1037:Powerful Calculator