在 Apache 社区中上百个开源项目都是由非盈利性组织管理的,他们面对代码分歧怎么管理,什么叫默认共识和时光机理论?
编者注: Apache 软件基金会总裁 Ross Gardler 在开源社举办的活动「社区重于代码」上,阐述了 Apache 的开源社区法则。
Apache 软件基金会管理着上百个开源项目,其中最出名的莫过于 1995 年开发出的 Web 服务器软件 Apache。在 Apache 社区中规模位居前九的项目都是由非营利性组织进行管理的。
在 Ross Gardler 看来,Apache 社区一直维持着「社区重于代码」的理念。
默认共识和时光机理论
(Apache 软件基金会总裁 Ross Gardler)
在 Apache 整个社区中决策是通过达成共识来制定的,而非投票机制,因为投票机制很可能诱发分裂。这种做法被称为「默认共识」:默认大家都是为了社区共同利益进行代码修改。
当然,要多方达成共识非常耗时,不得不经历听取意见、讨论意见最后争论的过程。
在 Apache 开源社区中还遵循着名为「时光机」的理论:对某行代码有自己的修改意见,你可先去修改,如果大家仍不满意修改后的结果,则集体回归到前一个版本的代码中。
所有争论最终都要回到代码,由于使用的是同样的编程语言,开发人员不会受到自然语言的限制。
借鉴于物种进化的代码管理法则
Apache 开源社区借用了新物种进化过程来管理开源社区的代码分歧。
随着软件不断的趋异,共享的代码便会越来越少。因为一个软件不可能满足所有用户的需求,所以开发者会根据自己的个性化需求,在同一个代码的基础上,开发出不同软件。
但从 Apache 基金会的角度看,只有在同一方向上继续共享代码才是最优过程。假设在社区中有两个方案,A 方案有更高的执行效率,但 B 方案灵活性更高。选择 A 还是 B ?无休止的争论只是浪费时间。
Apache 基金会认为两者进行合并或者代码自身会说话。
如果社区在此过程中不加以干预,两种软件会越行越远,直到它们所拥有的代码基础或者代码库已经不再可能融合。
有时候 A 和 B 永远无法再被融合。这种现象也可以接受,比如用户界面,不同的用户希望有不一样的表现形态。但在这种情况下,A 和 B之前共享的代码可以持续进行合作和创新。
当然自然融合的时间会比较长,例如阿里去年 10 月基于 Apache storm 开发出了 Jstorm。但 Jstorm 是用 Java 编写的,Apache Storm 用的是 Clojure 。目前两者继续存在分歧。
Apache 强调的是赋予人们使动的关系,而非上下级的命令指挥。从而建设一个范围尽可能广并且多元化的社区,孕育创新。