网友:Go 你是 Google 的,Go:我不是。

云原生实验室

共 4099字,需浏览 9分钟

 ·

2022-02-27 10:14

大家好,我是煎鱼。

我有一个朋友,近几年听说各种博弈、各种国内云产品等发力,各企业的 “国产化” 被提到了台面上,明确要去做这类事情。

作为当代编程语言风口的 Go 语言,在宣传时,常常会说是 Google 背书:

那么问题来了!

假设出了一些冲突Go 语言是否会被 Google 完全控制,形成垄断呢?

今天煎鱼就和大家一起来了解 Go 语言的开发团队对此的个人态度和运行情况。

早有讨论

在 2019 年时,就有人因为 Go 泛型的事情在 twitter 上吐槽 Go 语言的社区灵活度和自主控制。希望能够像 Java 的 OpenJDK 一样,实现一个 OpenGo。

如下:

想要社区自己实现泛型,而不是等待官方团队来做。从真实情况来讲,其实社区上早就有类似 OpenGo 的项目了,如下:

  • albrow/fo[1]:实现了函数式编程的特性,最近一次提交是 2019 年。
  • goodlang/good[2]:支持从 GitHub 上拉取 PR,最近一次提交是 2016 年。
  • tinygo-org/tinygo[3]:嵌入式编程,结合 LLVM 开发的 Go 编译器,用于微控制器、WebAssembly (Wasm) 和命令行工具等。
  • cosmos72/gomacro[4]:具有泛型和宏的交互式 Go 解释器和调试器,最近一次提交是 2021 年 06 月。

在开源社区,OpenGo 的项目数和项目的提交历史来看,并没有非常强强的诉求,活跃度不高,可能不是 100% 必要的。

在对企业内,“定制” 版是存在的,个别企业维护了自己的一份 Go,会一些功能变动,例如:对 Go 运行时进行修改。但这些功能不一定通用,且需内部审查合规才能公开。

硝烟四起

在前文所提到的 twitter 后,一名博主 Chris Siebenmann 对 Go 语言表达更猛烈的意见,发表了一篇《Go is Google's language, not ours[5]》的批判文章。

文内提到 ”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...[6]》有多名核心成员参与了讨论。

主要为 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[7]》中 Russ Cox 明确的回答了这个问题。Google 的角色在 Go 语言的不断发展中,也在不断地转变。

如下:

  1. 开源发布之前:Google 为所有 Go 开发支付了资金费用。
  2. 开源发布后:许多 Go 开发者开始贡献他们的开发时间,参与到 Go 语言的开发中。

主要是支持 Go 社区,分别是这几个方面:进行人员协调、确保能够更好地工作,并使 Go 忠实于最初的愿景、资助 Go 开发工作。

在资助上,Google 更多的就像开源产品的赞助一样。例如:跟前两年亚马逊宣布赞助 Rust 语言的开发一样。

有趣的是,以最近的新消息来看,Go 归属在 Google Cloud 大部门下。

提交者的情况

在早年统计时,以 CONTRIBUTORS[8] 为基准数据,电子邮箱作为统计维度,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[9] 中,每月电话、邮件列表和 Slack 频道都对所有人开放,且有会议记录和录音。

有兴趣的可以定时上去参加和学习,为 Go 语言发展出一份力。

在 Go Commiter 层面,每年都会定期举办交流会,能得到很多信息。之前也听欧神讲过,还是有些意思的。

现实思考

实际上,任何开源产品都会有自己核心团队。在所有的产品设计中,千人总是千面的。若是谁都可以合进来,这个产品很快就会变成一个 “大泥球”,以失败而告终。

展望当今开源界,很多产品一开始都是个人研发,后续接受到大量的赞助,又或是开办起了公司,再继而去运营。

也有许多人担忧 GitHub 不给使用某些软件代码。实际上,创造方的开源协议是允许使用的。一些企业更多的会在国内备份,又或是早早在内部 fork 了一份进行开发,重新套一层壳。

以此避免极端情况的发生。

总结

经过我们的阅读和分析,其实不难看出。Go 语言的核心团队,对于社区共建、交流是非常欢迎的,且做出了实际的行动。

在他们的理解中,Go 项目不由 Google 绝对控制(表示反对这种说法),管理层也没有给出他们任何要求。相反,Google 提供了许多的资助,还促使 Go 项目更好的协同。

我认为个别消息更多是对 Go 语言的设计哲学或多或少的不理解、不认同,才形成一些不同的声音。这其实对 Go 语言发展是好事。

你对 Go 语言的发展和 Google 的定位怎么看呢,欢迎大家交流和讨论:)

参考资料

[1]

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

浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报