大家好,我是煎鱼。
我有一个朋友,近几年听说各种博弈、各种国内云产品等发力,各企业的 “国产化” 被提到了台面上,明确要去做这类事情。
作为当代编程语言风口的 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 的定位怎么看呢,欢迎大家交流和讨论:)
若有任何疑问欢迎评论区反馈和交流,最好的关系是互相成就,各位的点赞就是煎鱼创作的最大动力,感谢支持。