大家好,我是煎鱼。
最近我有一个朋友在内部陆续推动一些内部更新时,发现一个比较震惊的事,就是一个著名的 Go 开源项目居然已经陨落有两年多了。
突然发现自己当年没能及时发现...似乎完全被当时 golang/protobuf v2 的热度压没了。尴尬得很。
gogo/protobuf 发展和成熟
相信大家对于 gogo/protobuf 这一个优秀的 Go 开源项目并不陌生,使用 grpc 就会用到 protobuf,就不可避免的都会有接触到。
同时业内也有许多开源项目也在使用,包含但不限于:etcd、kubernetes、tidb 等著名项目。以下是一个快速介绍。
以下是项目作者给出有在使用者的图:
gogo/protobuf 是基于 golang/protobuf fork 的第三方 protobuffer 库。其在性能、特性等多方面都在当时显著优于官方库。
性能方面可以查看 Benchmarks 的压测报告。说白了,就是明显好不少。
特性方面,gogo/protobuf 感觉被使用较多的是其结构体的标签功能。
例如如下 gogo proto 代码:
package test;
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
message A {
optional string Description = 1 [(gogoproto.nullable) = false];
optional int64 Number = 2 [(gogoproto.nullable) = false];
optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false];
}
将会生成类似如下代码:
type A struct {
Description string
Number int64
Id github_com_gogo_protobuf_test_custom.Uuid
}
简单来讲,就是可以基于标签做很多事情。官方的 golang/protobuf 没有这一块的功能特性,因此很多人会为此选择 gogo/protobuf。
你会发现 gogo/protobuf 这一个第三方库,比官方库性能更好,特性更丰富。在当时维护的也很积极。因此成为了最为出名最多人使用的 protobuffer 库。
为什么 gogo 陨落了
官方理由:干不动了
主要的维护者 @Walter Schulze 在当时发布了以下的通知:
大概的关键意思如下:
维护人员变动:GoGo Protobuf 项目的维护人员因个人情况变化,无法继续处理项目问题和功能请求。
兼容性挑战:最新的 golang/protobuf 1.4.x 版本(protobuf-apiv2)需要大量工作来确保兼容性,目前无人承担这项任务,用户对项目未来感到不确定。
寻求业内帮助:项目可能会被迫停止,因此我们向行业用户寻求帮助,希望有组织能够接手维护该项目。
简而言之,第一点是是自己变了,维护不来了,第二点官方 API V2 也变了,工作量巨大。彻底压垮了这个项目的维护。
失去了自由时间
更直观来看,@Walter Schulze 在 GopherCon UK 视频中给出了一个服务开源社区时的案例。如下图所示:
要求作者在周末加班加点服务,要求视频会议。
视频会议说好的 15 分钟,最后变成了 1 个小时。
他最终失去了自己的自由时间,也没有所谓的更多钱。
其他开源项目被锤的例子
Log4j 维护者之一 @Volkan Yazıcı 在某社交平台大力吐槽:
大概意思:“Log4j 的维护人员一直在夜以继日地工作,致力于缓解措施、修复、文档、CVE以及回复查询等工作。然而,人们依然不断批评我们,尽管我们为这些工作并未获得报酬,并且这一我们不喜欢却因向后兼容性问题必须保留的功能。”
总结
这是一个非常现实的问题。一个著名的开源项目,必定被许多项目直接或间接依赖,这些项目中又有许多的开发人员。每个人提几个,凑着凑着就会非常多。
慢慢的,随着年龄增长和变化。维护的核心骨干都会有更多自己的事,例如:家庭,或者更多兴趣别的事情。这时这些业务开源项目都会慢慢走向凋零。因此在更早有热情时做好开枝散叶就非常重要了。
对于我们业内人士来讲,使用官方库,或者功能特性稳定的第三方库。甚至参与 fork 贡献,都能带来不少的价值。
最后还是非常感谢 gogo/protobuf 给 Go 生态圈所提供的功能和价值!
关注和加煎鱼微信,
一手消息和知识,拉你进技术交流群👇
你好,我是煎鱼,出版过 Go 畅销书《Go 语言编程之旅》,再到获得 GOP(Go 领域最有观点专家)荣誉,点击蓝字查看我的出书之路。
日常分享高质量文章,输出 Go 面试、工作经验、架构设计,加微信拉读者交流群,和大家交流!
原创不易 点赞支持