“Go 仅是 Google 的编程语言,而不是程序员的!”

包含了类 C 语法,拥有高性能、高效率且易于上手的 Go 语言,在被 Google 推出之后就受到了国内外开发者的热烈欢迎, 但是在此之际,不少程序员也纷纷开始吐槽,无论是 Go 语言的管理权还是其功能模块的更新,最终都需要取决于 Google 这位管控者,这极大地限制了 Go 的发展自由,最终他们还得出“Go 语言是 Google 的,而不是社区以及程序员”的结论。

最近,我在Twitter上看到了下面这样一个问题:

很多人在讨论Go,难道我们不能通过社区实现泛型(generics),建立类似于OpenGo的东西吗?就像OpenJDK一样。为什么非要等待Go官方的泛型?

对于为什么我们做不到这一点,这个问题有很多答案,但是没有人愿意大声说出那个最根本的原因:即Go是Google的语言,而不是社区的语言。

的确,我们有一个Go的社区在为Go语言做贡献,其中有些还是很重要且很有价值的功能,你只需看看贡献者列表(https://github.com/golang/go/blob/master/CONTRIBUTORS)中的多样性,或者看看各种各样的人提交的PR(https://github.com/golang/go/commits/master)就能明白这一点。然而,Google才是这个社区的管理者,只有Google才能决定Go将接受哪些功能,而哪些则不会被接受。所谓的Go语言的社区决策流程,说到底实际上负责决策的只有Google。只要是Google反对的东西绝对不会出现在Go语言中;同时,凡是Google想要的功能,最终都会出现在Go中。

最明显的一个例子是,Go的模块,虽然外部的一个Go社区一直在努力支持相对完全不同的模型,但最终该系统被Google Go核心团队的一名成员放弃了。你可以点击这里阅读这段历史(https://peter.bourgon.org/blog/2018/07/27/a-response-about-dep-and-vgo.html)。

简而言之,虽然有社区贡献,但它不是一个社区项目,它是Google的项目。这是一个不争的事实,无论你认为这是好还是坏,我们都必须接受这个结果。例如,你希望Go接受一些重要的功能,那么与其努力在社区中建立共识,还不如尝试说服Go的核心团队。

结果必然是很多人投入了大量时间和精力到社区中,结果却没有得到Go团队的认可,而被白白浪费。大多数时候,我们的努力也许可以帮助Go核心团队更好地明白问题所在。

总的来说,很明显社区的力量对于Go的发展并没有那么重要,而我们这些在Google墙外从事Go语言的人只能接受现实。如果我们的工作重点与Google一致,那么只能说明我们非常幸运;如果Go的核心团队和Google能够优先考虑我们的工作重点,那么我们也算是幸运了。好消息是,迄今为止Google和Go核心团队非常关心外外部世界对Go的看法,而不仅仅是Google内部,所以他们愿意努力解决难点。

无论是好还是坏,人们都有一种感觉:Go有一支非常优秀的核心小团队,他们有良好的判断,而且对语言本身也有着始终如一的发展愿景。这个团队不会受到外界力量的左右,在缓慢地发展,而且他们更加不希望发生变化。

很长一段时间以来,我都很喜欢Go,基本上我对于该语言的发展以及Go核心团队的管理还比较满意。我当然同意,在引入像泛型之类的功能时的确应该谨慎。但与此同时,开发Go模块的经历给我留下了阴影,我无法再说服自己成为一名Go的贡献者,即使是非常小的微不足道的贡献。(换句话说,我不想成为二等公民。)我会提交Bug报告,但仅此而已。我对Go的整体状况感到不解,所以一般我都会完全忽略。

Go团队声称,他们非常关心社区,而且他们希望社区能够多多参与Go的开发,现在这听起来可能很可笑。但我相信他们确实关心社区,但只是在一定程度上。我认为Go的核心团队应该直言不讳这种情况,而不是假装并暗中引导人们。

你可能想问,Go是Google的语言,还是Go核心团队的语言,因为Go的发展方向是由它的核心团队设定和控制的。但是,目前我认为大部分活跃的Go核心团队都是Google的员工,因此实际上这两者没有区别(至少Google外面的人没法区分)。如果Go核心团队的成员离开Google,但仍然继续积极为Go的发展做贡献,那么我们才能讨论Go真正属于谁。如果真的有那么一天,尤其是大多数人都离开Google,那么Go可能会成为他们的语言,而不是Google,就像Python一直是Guido van Rossum的语言一样,无论他在何处高就。

然而,在现实中,不可否认的是,Go所需的大量基础架构和资源都是由Google提供的,例如golang.org,因此域名等也属于Google。而且从他们的商标列表(https://www.google.com/permissions/trademark/trademark-list/)来看,Go编程语言的商标也归Google所有。

对此,网友的看法不一:

  • 评论1:实际上,真正由社区驱动的开源项目相对很少,至少大多数的重大项目都不是。许多开源项目都是由一家公司主导的商业项目。例如Redis、MongoDB、MySQL和Elasticsearch等等。它们完全符合上文中描述的情况。像这样的技术也可以由社区开发,但很难形成这样的社区并使保持活力。

    对于数据库这种大型的社区驱动的项目来说,非常需要一些资金雄厚的赞助商。Rust、Linux和PostgreSQL就是很好的例子。 我想知道为什么这么多公司很乐意向Oracle(以及其他公司)提供大量的资金支持,却不愿资助PostgreSQL这样的开源项目。

  • 评论2:很多人喜欢Go,因为它是一种固执己见的语言。我不认为仅靠社区的力量无法创建这样的东西,因为众口难调。许多人声称代表社区,但是社区却无法不同意他们的意见。我担心如果没有明确的领导,技术的方向和判断会像政治一样,变得不确定以及高风险。

    我喜欢Go有一个紧凑又团结的小团队,他们是最初设计的主力军。我希望也能有一些其他力量的介入,因为如果这些原创人员离职,那么Google会拥有太多控制权。

  • 评论3:看看目前的十大编程语言,我认为只有Ruby是社区驱动的,几乎没有其他赞助商的支持。而其他语言统统都由一个(比如苹果的Swift)或多个(Javascript、Java)合作赞助商驱动。

    我感觉这种平衡很难,因为你需要大量的资源,比如文档、VM专业知识、库等等。

原文:https://utcc.utoronto.ca/~cks/space/blog/programming/

作者:Chris Siebenmann,Unix系统管理员。