大家好,我是煎魚。
我有一個朋友,近幾年聽說各種博弈、各種國內雲產品等發力,各企業的 “國產化” 被提到了檯面上,明確要去做這類事情。
作為當代程式語言風口的 Go 語言,在宣傳時,常常會說是 Google 背書:
那麼問題來了!
假設出了一些衝突,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 核心團隊重要“。
整理後,核心依據共有三點,分別如下:
- 社群的聲音對於 Go 的開發來說並不重要。例如:Go modules 的歷史事件(其實是 Dep 有爭議...)。
- Go 核心團隊都被 Google 僱傭,Go 的特性由 Go 核心團隊最終確立,只有當他們不再為 Google 工作時,Go 才有可能是他們的(無法確定歸屬於誰)。
- 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 語言的不斷髮展中,也在不斷地轉變。
如下:
- 開源釋出之前:Google 為所有 Go 開發支付了資金費用。
- 開源釋出後:許多 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 催更。