我的開源項目被科技巨頭拿去做產品了,只不過註釋中刪掉了我的名字

機器之心編輯部

這是一個擁抱開源的程式設計師大牛的「神奇」經歷,成文幾個小時就在社交網站上獲得了數千點贊。

「擁抱開源」不是說說那麼簡單的,如今很多科技公司都會把這句話掛在嘴邊,把開源當作一個重要戰略,它們希望自家的工程師投身開源社區,為領域內創造出良好的氛圍,以此推動技術的進步,並從中獲得更多開發者的支持關注。

但有的時候,你很難放心把自己賴以生存的新技術拿來分享,它們可能會被用在各種預料之外的地方,有時別人甚至會借鑑你開源過的程式碼,反過來針對你。

如果你是一個人,對方是一家大公司,這事情就會讓你變得懷疑人生了。來自澳大利亞的開發者 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 的工具,你熟悉它嗎?」我確實很熟悉,因為我是這個工具的作者。

在這個計算機掀起技術革命的時代,每一位開源貢獻者都應該被尊重。