夜天之书 #44 项目分支与生产力

本文选自试运行的周刊《无何有境》[1]第二期。

《大教堂与集市》一书中反复强调了分化一个项目可能遇到的阻力,“开源商业化”甚嚣尘上之下,商业公司往往会暗示其发起的开源软件是同领域内唯一可靠的选择,然而,项目分支和竞争真的如此罕见吗?

我想不是的。

Linux 第一次发布就是在 MINIX 邮件列表当中,虽然反对 MINIX 的微内核设计,但是对操作系统具体功能如何实现的问题,显然 MINIX 作为脚手架提供了许多帮助。

Perl CPAN 上同类库比比皆是,类似 List::Util、List::MoreUtils、List::SomeUtils 和 List::UtilsBy 这样同时存在相互借鉴的情况并不少见。

我在推文[2]里提到的 Apache Arrow 的 Rust 实现,被 Apache Arrow 自己的 PMC @jorgecarleitao 以非官方形式挑战,也是这类事件之一。

官方推出的 arrow-rs 沿着其他语言实现的接口设计哲学复刻到 Rust 语言上,并被 Apache Arrow DataFusion 和 InfluxDB IOx 等项目采用。

@jorgecarleitao 的 arrow2 和 parquet2 项目,则以性能和安全性(避免不必要的 panic 和必须报错时尽量采用 Result 而非 panic 的原则)著称,如果接口设计影响了这两个点,那么接口是可以随时变更的。这个项目在这两点上的长处导致它被 Databend 和 Polars 等项目采用。

讨论发生在 DataFusion 项目打算维护一个底层依赖 arrow2 而非 arrow-rs 的分支的时候,恰如《大教堂与集市》所言,黑客天生反对分化,因为同样的工作做两次是不必要的浪费,同时为了解释相似却不相同的两个软件非常费劲。因此,InfluxDB 的工程师想寻求一个一致的上游,避免他们在依赖相似功能的时候被两个相似的上游所困扰。

不过,事情往往只在没有明显解决方案的时候才需要讨论。arrow-rs 发布早,使用量大,并且有官方品牌背书;arrow2 确实在性能和安全性上有长足的改进,但是 API 不兼容是个大问题。实际上,如果没有官方的 arrow-rs,直接采用 arrow2 作为官方版本是没有阻碍的。另一方面,如果 arrow2 做得并不好,那么也不会有人采用,也就没有这个纠结的想要扶它上位的问题。

API 兼容性是版本管理和依赖管理的重要内容,虽然 @jorgecarleitao 本身就是 Apache Arrow 的 PMC 成员,并且在 2021 年曾经一度想要把 arrow2 纳入 Apache Arrow 社群维护,但是缺少其他成员对维护两套不兼容的软件的支持,这件事也就不了了之。在上面的 issue 当中,可以看到另一位 PMC 成员将之称为“官僚主义”。

我并不是这个社群的重度参与者,因此不会尝试评判或者预测未来的发展。我在阅读历史的过程中,体会到的是开源协同的软件开发这个模式,历经几十年的发展,很多事情都有先例,但是却没有一个标准的解决方案,并且或许永远也不会有。正如我在推特上写的:

其实,没有什么标准的解决方案。这个例子里我看到的是生产力决定了社群发展的方向和形状。此外,同类项目竞争或者称为并行实验并不罕见。开源不是占山为王,你说要做什么软件,别人就非得参与不可。而是真的有人或组织做出了高水平的软件并持续维护迭代,经年形成了事实标准。

如果不是 @jorgecarleitao 的生产力惊人,那么 arrow2 的分支问题根本就不会出现。如果 Apache Arrow 的 PMC 在处理 API 兼容性的时候有更多的人愿意表态和投入精力,或许一个融合方案也能在去年就落地,arrow2 也就捐献完成了。当然,这并不是说 Apache Arrow 社群不好。因为一个提案没有得到足够的支持,并不意味着社群是坏人,刻意阻止提案的落地,往往说明提案的重要性尚未触达社群决策人的核心关注点。简单点说,相关人员并不在乎提案是否通过。

关于这个主题的线下讨论当中,还涉及了两个更加明确的是“分支”的项目案例。其之一是 Presto 和 Trino,其之二是 ElasticSearch 和 OpenSearch。其中 Trino 分化之后,其核心团队建立了 Starburst Data, Inc. 公司,并成为数据处理领域的新星;而 AWS 分化出 OpenSearch 以后,虽然取消 CLA 和 DCO 的模型在治理上颇有参考意义,但是缺少开发人员的投入,在技术方向上完全无法对 ElasticSearch 形成挑战。

这两者的境遇,也正印证了上面提到的“生产力决定了社群发展的方向和形状”。希望能给新兴的开源社区一些启示,做好核心技术,解决实际问题,以活跃的社群凝聚起开源开发者,才是创造价值的正途。

References

[1] 周刊《无何有境》: https://www.getrevue.co/profile/tison1096/issues/2-1091418
[2] 推文: https://twitter.com/tison1096/status/1506269139937026054

你可能感兴趣的:(java,python,人工智能,大数据,编程语言)