但有的时候,你很难放心把自己赖以生存的新技术拿来分享,它们可能会被用在各种预料之外的地方,有时别人甚至会借鉴你开源过的代码,反过来针对你。
如果你是一个人,对方是一家大公司,这事情就会让你变得怀疑人生了。来自澳大利亚的开发者 Brendan Gregg 在最近的一篇博客中,控诉了 IT 公司 Sun Microsystems 窃取他开源项目“DTraceToolkit”的代码。DTrace 全称 Dynamic Tracing,即动态跟踪,是由 Sun Microsystems 开发的一个用来在生产和试验性生产系统上找出系统瓶颈的工具,可以对内核和用户应用程序进行动态跟踪并且对系统运行不构成任何危险的技术。
这是一个很久以前的故事,如今的 Sun Microsystems 鲜有动态,上一次出现在众人视线,还是因为Google和甲骨文的十年版权之争获得最终裁决。
1995 年,Sun Microsystems 推出了 Java。当年Google构建Android操作系统,用了 Sun Microsystems 的一万多行代码。2009 年,甲骨文以 74 亿美元价格收购了 Sun Microsystems 和 Java 软件。2010 年,甲骨文以“Google擅自使用 Java API 作为 Android 操作系统的一部分侵犯专利及版权”为由提起诉讼。历经十年,2021 年 4 月,美国最高法院判处Google胜诉。
曾经的 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 的工具,你熟悉它吗?”我确实很熟悉,因为我是这个工具的作者。
在这个计算机掀起技术革命的时代,每一位开源贡献者都应该被尊重。