0x01 背景
之前有关注bazel相关的技术动态,自己也做了一些研究。最新看k8s源码时,突然发现没有了bazel相关的配置,猜测是把bazel移除了,去github上搜索了下。确认确实是移除了。
最初的提案链接为:https://github.com/kubernetes/kubernetes/issues/88553,感兴趣的可以直接去看,讨论很热烈。
主要是想看下顶级项目面对这种取舍(trade-off)问题时是如何决策的。
0x02 移除的理由
提案作者的理由:
- go tool chain本身支持缓存了,原来引入bazel提升编译速度的诉求不存在了。
- 维护两套构建系统太繁琐了。如升级Go需要改go.mod和Bazel的配置文件。
主要同意移除的理由:
- 学习Bazel的成本太高,随着k8s社区规模越来越大,这个成本也越来越高。新加入门槛过高。
- 维护Bazel负担太重,少数专家熟悉,占用了这些专家的太多时间。
- Bazel不能在各平台下顺利运行。
- Bazel对ARM平台支持不好,没有包含默认的ARM下的二进制包(vielmetti)。
- Bazel让漏洞修复过程常复杂(liggitt)。
- Bazel本身的Bug会影响到k8s。
- 测试时,使用Bazel资源消耗较多16GB,不使用它时6-8GB就可以满足。
- Bazel引入时Go的存在的问题已经