大家好,我是煎鱼。

最近我有一个朋友在内部陆续推动一些内部更新时,发现一个比较震惊的事,就是一个著名的 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 在当时发布了以下的通知:

大概的关键意思如下:

  1. 维护人员变动:GoGo Protobuf 项目的维护人员因个人情况变化,无法继续处理项目问题和功能请求。
  2. 兼容性挑战:最新的 golang/protobuf 1.4.x 版本(protobuf-apiv2)需要大量工作来确保兼容性,目前无人承担这项任务,用户对项目未来感到不确定。
  3. 寻求业内帮助:项目可能会被迫停止,因此我们向行业用户寻求帮助,希望有组织能够接手维护该项目。

简而言之,第一点是是自己变了,维护不来了,第二点官方 API V2 也变了,工作量巨大。彻底压垮了这个项目的维护。

失去了自由时间

更直观来看,@Walter Schulze 在 GopherCon UK 视频中给出了一个服务开源社区时的案例。如下图所示:

  1. 要求作者在周末加班加点服务,要求视频会议。
  2. 视频会议说好的 15 分钟,最后变成了 1 个小时。
  3. 他最终失去了自己的自由时间,也没有所谓的更多钱。

其他开源项目被锤的例子

Log4j 维护者之一 @Volkan Yazıcı 在某社交平台大力吐槽:

大概意思:“Log4j 的维护人员一直在夜以继日地工作,致力于缓解措施、修复、文档、CVE以及回复查询等工作。然而,人们依然不断批评我们,尽管我们为这些工作并未获得报酬,并且这一我们不喜欢却因向后兼容性问题必须保留的功能。”

总结

这是一个非常现实的问题。一个著名的开源项目,必定被许多项目直接或间接依赖,这些项目中又有许多的开发人员。每个人提几个,凑着凑着就会非常多。

慢慢的,随着年龄增长和变化。维护的核心骨干都会有更多自己的事,例如:家庭,或者更多兴趣别的事情。这时这些业务开源项目都会慢慢走向凋零。因此在更早有热情时做好开枝散叶就非常重要了。

对于我们业内人士来讲,使用官方库,或者功能特性稳定的第三方库。甚至参与 fork 贡献,都能带来不少的价值。

最后还是非常感谢 gogo/protobuf 给 Go 生态圈所提供的功能和价值。

文章持续更新,可以微信搜【脑子进煎鱼了】阅读,本文 GitHub github.com/eddycjy/blog 已收录,学习 Go 语言可以看 Go 学习地图和路线,欢迎 Star 催更。

推荐阅读


煎鱼
8.4k 声望12.8k 粉丝