網友:Go 你是 Google 的,Go:我不是

煎魚發表於2022-02-28

大家好,我是煎魚。

我有一個朋友,近幾年聽說各種博弈、各種國內雲產品等發力,各企業的 “國產化” 被提到了檯面上,明確要去做這類事情。

作為當代程式語言風口的 Go 語言,在宣傳時,常常會說是 Google 背書:

image.png

那麼問題來了!

假設出了一些衝突,Go 語言是否會被 Google 完全控制,形成壟斷呢?

今天煎魚就和大家一起來了解 Go 語言的開發團隊對此的個人態度和執行情況。

早有討論

在 2019 年時,就有人因為 Go 泛型的事情在 twitter 上吐槽 Go 語言的社群靈活度和自主控制。希望能夠像 Java 的 OpenJDK 一樣,實現一個 OpenGo。

如下:

想要社群自己實現泛型,而不是等待官方團隊來做。從真實情況來講,其實社群上早就有類似 OpenGo 的專案了,如下:

  • albrow/fo:實現了函數語言程式設計的特性,最近一次提交是 2019 年。
  • goodlang/good:支援從 GitHub 上拉取 PR,最近一次提交是 2016 年。
  • tinygo-org/tinygo:嵌入式程式設計,結合 LLVM 開發的 Go 編譯器,用於微控制器、WebAssembly (Wasm) 和命令列工具等。
  • cosmos72/gomacro:具有泛型和巨集的互動式 Go 直譯器和偵錯程式,最近一次提交是 2021 年 06 月。

在開源社群,OpenGo 的專案數和專案的提交歷史來看,並沒有非常強強的訴求,活躍度不高,可能不是 100% 必要的。

在對企業內,“定製” 版是存在的,個別企業維護了自己的一份 Go,會一些功能變動,例如:對 Go 執行時進行修改。但這些功能不一定通用,且需內部審查合規才能公開。

硝煙四起

在前文所提到的 twitter 後,一名博主 Chris Siebenmann 對 Go 語言表達更猛烈的意見,發表了一篇《Go is Google's language, not ours》的批判文章。

文內提到 ”Go 是 Google 的語言,而不是社群的“。舉出了一個重要的案例,那就是 Go 模組依賴,當時早年 Go 社群正傾向於 Dep,官方團隊也是給予了不少溝通。

由於當時 Russ Cox 強推 Go modules(前身 vgo),引起了社群大量爭議討論,被作為該態度的依據。

也就是: ”如果希望某些重要的特性被 Go 接受,那麼在社群中建立共識遠沒有說服 Go 核心團隊重要“。

整理後,核心依據共有三點,分別如下:

  1. 社群的聲音對於 Go 的開發來說並不重要。例如:Go modules 的歷史事件(其實是 Dep 有爭議...)。
  2. Go 核心團隊都被 Google 僱傭,Go 的特性由 Go 核心團隊最終確立,只有當他們不再為 Google 工作時,Go 才有可能是他們的(無法確定歸屬於誰)。
  3. Go 商標等均歸屬於 Google。例如:https://golang.org 域名歸屬於 Google。

以上是作者認為 Go 語言是由 Google 控制的原因。

官方回覆

顯然 Go 官方團隊聽到了社群的聲音,在 golang-nuts 中的《Interesting public commentary on Go...》有多名核心成員參與了討論。

主要為 Russ Cox 和 Ian Lance Taylor,做了大量長篇幅的回答,是平時所有溝通裡都極為少見的,肯定了 Go 語言與社群共建、開放的想法。

主要涉及如下方面:

  • Go 程式碼是開源的。
  • Go 不由 Google 控制。
  • Go 提交者的情況。
  • Go 社群溝通。

程式碼是開源的

實際上 Ian Lance Taylor 認為 Go 語言確實就是開源的,有以下幾點論點:

  • 所有的原始碼開放:包括所有的原始碼、所有基礎設施支援的原始碼,都是免費提供的,任何人都可以重複使用和修改。
  • 擁有推向新方向的自由:對於軟體來說,最基本的自由是 fork 的自由。可以將一個現有的專案推向新的方向的自由,也就是 OpenGo。

不是 Google 控制

對 ”Go 語言是 Google 的語言“ 的說法進行了明確的反對,這種說法的意思是 ”Google 做出各種語言決策的最終決定“。

由於 Go 是由在 Google 工作的人開發的,所以最初開發的人不可避免地包含在 Google 的人,核心團隊目前也沒有人離開 Google 去其他公司,所以造成了核心團隊又不少 Google 的員工的現象。

Go 專案中可以 Approve(批准)的人,非 Google 的人多於 Google 內部的人

Go 語言是 Google 的,可以展開來看:

  • 能說是 “對”,他確實是由在 Google 任職的人在 Google 時開發出來的。
  • 能說是 “不對”,因為社群也有許多有 Approve 權力的人,Go 專案非常的多元化。

就看你怎麼理解和定義這個概念了。

Google 的角色是什麼

在《Go, Open Source, Community》中 Russ Cox 明確的回答了這個問題。Google 的角色在 Go 語言的不斷髮展中,也在不斷地轉變。

如下:

  1. 開源釋出之前:Google 為所有 Go 開發支付了資金費用。
  2. 開源釋出後:許多 Go 開發者開始貢獻他們的開發時間,參與到 Go 語言的開發中。

主要在支援 Go 社群、進行協調、確保更改能夠更好地協同工作,並使 Go 忠實於最初的願景、資助 Go 開發工作。

資助更多的就像開源產品的贊助一樣。就跟前兩年亞馬遜宣佈贊助 Rust 語言的開發一樣。

提交者的情況

在早年統計時,以 CONTRIBUTORS 為基準資料,電子郵箱作為統計維度,Go 提交者名單上的也有了明顯的改變。

人數對比如下:

  • 在 2019 年:有 59 名 Google 人和 51 名非 Google 人。Google 人數居多。
  • 在 2021 年:309 名 Google 人,2426 名非 Google 人。非 Google 人數居多。

2019 年,兩者基本持平。

2021 年,已經是非 Google 的開發者貢獻人數更多了,也足矣說明社群的一定程度開放。

2022 年,理論上會更多。

社群溝通

以我的觀察,在 Go issues、proposal、golang-nuts、golang-dev、gophers slack 中等渠道。
Go 核心團隊的人都是高頻的檢視社群反饋和交流情況,以此更好地聽取社群的意見。

golang tools 中,每月電話、郵件列表和 Slack 頻道都對所有人開放,且有會議記錄和錄音。

有興趣的可以定時上去參加和學習,為 Go 語言發展出一份力。

在 Go Commiter 層面,每年都會定期舉辦交流會,能得到很多資訊。之前也聽歐神講過,還是有些意思的。

現實思考

實際上,任何開源產品都會有自己核心團隊。在所有的產品設計中,千人總是千面的。若是誰都可以合進來,這個產品很快就會變成一個 “大泥球”,以失敗而告終。

展望當今開源界,很多產品一開始都是個人研發,後續接受到大量的贊助,又或是開辦起了公司,再繼而去運營。

也有許多人擔憂 GitHub 不給使用某些軟體程式碼。
實際上,創造方的開源協議是允許使用的。一些企業更多的會在國內備份,又或是早早在內部 fork 了一份進行開發,重新套一層殼。

以此避免極端情況的發生。

總結

經過我們的閱讀和分析,其實不難看出。Go 語言的核心團隊,對於社群共建、交流是非常歡迎的,且做出了實際的行動。

在他們的理解中,Go 專案不由 Google 絕對控制(表示反對這種說法),管理層也沒有給出他們任何要求。相反,Google 提供了許多的資助,還促使 Go 專案更好的協同。

我認為個別訊息更多是對 Go 語言的設計哲學或多或少的不理解、不認同,才形成一些不同的聲音。這其實對 Go 語言發展是好事。

你對 Go 語言的發展和 Google 的定位怎麼看呢,歡迎大家交流和討論:)

若有任何疑問歡迎評論區反饋和交流,最好的關係是互相成就,各位的點贊就是煎魚創作的最大動力,感謝支援。

文章持續更新,可以微信搜【腦子進煎魚了】閱讀,本文 GitHub github.com/eddycjy/blog 已收錄,學習 Go 語言可以看 Go 學習地圖和路線,歡迎 Star 催更。

推薦閱讀

相關文章