網(wǎng)友:Go 你是 Google 的,Go:我不是。
大家好,我是煎魚。
我有一個朋友,近幾年聽說各種博弈、各種國內(nèi)云產(chǎn)品等發(fā)力,各企業(yè)的 “國產(chǎn)化” 被提到了臺面上,明確要去做這類事情。
作為當代編程語言風口的 Go 語言,在宣傳時,常常會說是 Google 背書:

那么問題來了!
假設出了一些沖突,Go 語言是否會被 Google 完全控制,形成壟斷呢?
今天煎魚就和大家一起來了解 Go 語言的開發(fā)團隊對此的個人態(tài)度和運行情況。

早有討論
在 2019 年時,就有人因為 Go 泛型的事情在 twitter 上吐槽 Go 語言的社區(qū)靈活度和自主控制。希望能夠像 Java 的 OpenJDK 一樣,實現(xiàn)一個 OpenGo。
如下:

想要社區(qū)自己實現(xiàn)泛型,而不是等待官方團隊來做。從真實情況來講,其實社區(qū)上早就有類似 OpenGo 的項目了,如下:
albrow/fo[1]:實現(xiàn)了函數(shù)式編程的特性,最近一次提交是 2019 年。 goodlang/good[2]:支持從 GitHub 上拉取 PR,最近一次提交是 2016 年。 tinygo-org/tinygo[3]:嵌入式編程,結(jié)合 LLVM 開發(fā)的 Go 編譯器,用于微控制器、WebAssembly (Wasm) 和命令行工具等。 cosmos72/gomacro[4]:具有泛型和宏的交互式 Go 解釋器和調(diào)試器,最近一次提交是 2021 年 06 月。
在開源社區(qū),OpenGo 的項目數(shù)和項目的提交歷史來看,并沒有非常強強的訴求,活躍度不高,可能不是 100% 必要的。
在對企業(yè)內(nèi),“定制” 版是存在的,個別企業(yè)維護了自己的一份 Go,會一些功能變動,例如:對 Go 運行時進行修改。但這些功能不一定通用,且需內(nèi)部審查合規(guī)才能公開。
硝煙四起
在前文所提到的 twitter 后,一名博主 Chris Siebenmann 對 Go 語言表達更猛烈的意見,發(fā)表了一篇《Go is Google's language, not ours[5]》的批判文章。

文內(nèi)提到 ”Go 是 Google 的語言,而不是社區(qū)的“。舉出了一個重要的案例,那就是 Go 模塊依賴,當時早年 Go 社區(qū)正傾向于 Dep,官方團隊也是給予了不少溝通。
由于當時 Russ Cox 強推 Go modules(前身 vgo),引起了社區(qū)大量爭議討論,被作為該態(tài)度的依據(jù)。
也就是: ”如果希望某些重要的特性被 Go 接受,那么在社區(qū)中建立共識遠沒有說服 Go 核心團隊重要“。
整理后,核心依據(jù)共有三點,分別如下:
社區(qū)的聲音對于 Go 的開發(fā)來說并不重要。例如:Go modules 的歷史事件(其實是 Dep 有爭議...)。 Go 核心團隊都被 Google 雇傭,Go 的特性由 Go 核心團隊最終確立,只有當他們不再為 Google 工作時,Go 才有可能是他們的(無法確定歸屬于誰)。 Go 商標等均歸屬于 Google。例如:https://golang.org 域名歸屬于 Google。
以上是作者認為 Go 語言是由 Google 控制的原因。
官方回復
顯然 Go 官方團隊聽到了社區(qū)的聲音,在 golang-nuts 中的《Interesting public commentary on Go...[6]》有多名核心成員參與了討論。
主要為 Russ Cox 和 Ian Lance Taylor,做了大量長篇幅的回答,是平時所有溝通里都極為少見的,肯定了 Go 語言與社區(qū)共建、開放的想法。
主要涉及如下方面:
Go 代碼是開源的。 Go 不由 Google 控制。 Go 提交者的情況。 Go 社區(qū)溝通。
代碼是開源的
實際上 Ian Lance Taylor 認為 Go 語言確實就是開源的,有以下幾點論點:
所有的源代碼開放:包括所有的源代碼、所有基礎設施支持的源代碼,都是免費提供的,任何人都可以重復使用和修改。 擁有推向新方向的自由:對于軟件來說,最基本的自由是 fork 的自由??梢詫⒁粋€現(xiàn)有的項目推向新的方向的自由,也就是 OpenGo。
不是 Google 控制
對 ”Go 語言是 Google 的語言“ 的說法進行了明確的反對,這種說法的意思是 ”Google 做出各種語言決策的最終決定“。
由于 Go 是由在 Google 工作的人開發(fā)的,所以最初開發(fā)的人不可避免地包含在 Google 的人,核心團隊目前也沒有人離開 Google 去其他公司,所以造成了核心團隊又不少 Google 的員工的現(xiàn)象。
在 Go 項目中可以 Approve(批準)的人,非 Google 的人多于 Google 內(nèi)部的人。
Go 語言是 Google 的,可以展開來看:
能說是 “對”,他確實是由在 Google 任職的人在 Google 時開發(fā)出來的。 能說是 “不對”,因為社區(qū)也有許多有 Approve 權力的人,Go 項目非常的多元化。
就看你怎么理解和定義這個概念了。
Google 的角色是什么
在《Go, Open Source, Community[7]》中 Russ Cox 明確的回答了這個問題。Google 的角色在 Go 語言的不斷發(fā)展中,也在不斷地轉(zhuǎn)變。

如下:
開源發(fā)布之前:Google 為所有 Go 開發(fā)支付了資金費用。 開源發(fā)布后:許多 Go 開發(fā)者開始貢獻他們的開發(fā)時間,參與到 Go 語言的開發(fā)中。
主要是支持?Go 社區(qū),分別是這幾個方面:進行人員協(xié)調(diào)、確保能夠更好地工作,并使 Go 忠實于最初的愿景、資助 Go 開發(fā)工作。
在資助上,Google 更多的就像開源產(chǎn)品的贊助一樣。例如:跟前兩年亞馬遜宣布贊助 Rust 語言的開發(fā)一樣。
有趣的是,以最近的新消息來看,Go 歸屬在 Google Cloud 大部門下。
提交者的情況
在早年統(tǒng)計時,以 CONTRIBUTORS[8] 為基準數(shù)據(jù),電子郵箱作為統(tǒng)計維度,Go 提交者名單上的也有了明顯的改變。
人數(shù)對比如下:
在 2019 年:有 59 名 Google 人和 51 名非 Google 人。Google 人數(shù)居多。 在 2021 年:309 名 Google 人,2426 名非 Google 人。非 Google 人數(shù)居多。
2019 年,兩者基本持平。
2021 年,已經(jīng)是非 Google 的開發(fā)者貢獻人數(shù)更多了,也足矣說明社區(qū)的一定程度開放。
2022 年,理論上會更多。
社區(qū)溝通
以我的觀察,在 Go issues、proposal、golang-nuts、golang-dev、gophers slack 中等渠道。Go 核心團隊的人都是高頻的查看社區(qū)反饋和交流情況,以此更好地聽取社區(qū)的意見。
在 golang tools[9] 中,每月電話、郵件列表和 Slack 頻道都對所有人開放,且有會議記錄和錄音。

有興趣的可以定時上去參加和學習,為 Go 語言發(fā)展出一份力。
在 Go Commiter 層面,每年都會定期舉辦交流會,能得到很多信息。之前也聽歐神講過,還是有些意思的。
現(xiàn)實思考
實際上,任何開源產(chǎn)品都會有自己核心團隊。在所有的產(chǎn)品設計中,千人總是千面的。若是誰都可以合進來,這個產(chǎn)品很快就會變成一個 “大泥球”,以失敗而告終。
展望當今開源界,很多產(chǎn)品一開始都是個人研發(fā),后續(xù)接受到大量的贊助,又或是開辦起了公司,再繼而去運營。
也有許多人擔憂 GitHub 不給使用某些軟件代碼。實際上,創(chuàng)造方的開源協(xié)議是允許使用的。一些企業(yè)更多的會在國內(nèi)備份,又或是早早在內(nèi)部 fork 了一份進行開發(fā),重新套一層殼。
以此避免極端情況的發(fā)生。
總結(jié)
經(jīng)過我們的閱讀和分析,其實不難看出。Go 語言的核心團隊,對于社區(qū)共建、交流是非常歡迎的,且做出了實際的行動。
在他們的理解中,Go 項目不由 Google 絕對控制(表示反對這種說法),管理層也沒有給出他們?nèi)魏我蟆O喾?,Google 提供了許多的資助,還促使 Go 項目更好的協(xié)同。
我認為個別消息更多是對 Go 語言的設計哲學或多或少的不理解、不認同,才形成一些不同的聲音。這其實對 Go 語言發(fā)展是好事。
你對 Go 語言的發(fā)展和 Google 的定位怎么看呢,歡迎大家交流和討論:)
參考資料
albrow/fo: https://github.com/albrow/fo
[2]goodlang/good: https://github.com/goodlang/good
[3]tinygo-org/tinygo: https://github.com/tinygo-org/tinygo
[4]cosmos72/gomacro: https://github.com/cosmos72/gomacro
[5]Go is Google's language, not ours: https://utcc.utoronto.ca/~cks/space/blog/programming/GoIsGooglesLanguage?showcomments#comments
[6]Interesting public commentary on Go...: https://groups.google.com/g/golang-nuts/c/6dKNSN0M_kg/m/rfb9qxB2BAAJ
[7]Go, Open Source, Community: https://go.dev/blog/open-source
[8]CONTRIBUTORS: https://github.com/golang/go/blob/master/CONTRIBUTORS
[9]golang tools: https://github.com/golang/go/wiki/golang-tools
