.. Kenneth Lee 版权所有 2019-2020
:Authors: Kenneth Lee :Version: 1.0
谁是主线?
今天和人讨论开源社区玩法的一个逻辑,其中讨论到这样一个问题:开源代码的主线,到 底是谁控制的?
我发现很多做惯商用软件的人对这个问题真的是毫无概念的。他们一直在追问:我们控制 哪个管理层,哪个董事会,就可以控制那个软件?你怎么解释,他们都想往这个角度去靠 。
但开源代码的模型根本不是这样的。既然当面说不清楚,我就把逻辑写下来,希望他们冷 静一点的时候有机会看一看吧。
很多人把开源看做是一种情怀,好像是开发之外的加成,而没有注意到:开源是一种类似 区块链那样的生物圈优胜劣汰的发展模型,是通过淘汰实现选择的(其实是区块链学习开 源社区的维护方法)。
拿Linux来说吧,http://kernel.org维护了一套代码(包括它的修改历史),这就是一个“ 分支”(主线分支),相当于生态区中的一个族群,个体可能死亡,族群持续发展。我要做 手机了,我把这个分支拷贝过来,加入我的修改,我也会有一个我的分支(Kenneth手机分 支),这相当于在我的手机这个地盘上生存的另一个族群。别人做机顶盒解决方案,也拷 贝一个版本拿出来,加入他的修改,也是一个“分支”(某人机顶盒解决方案分支),他这 个解决方案卖给一个终端客户,那个客户做了一个他们家的机顶盒,然后基于某人机顶盒 解决方案做了一个他的分支,这就叫某机顶盒分支……
这些分支,很多代码一样,但也有自己不一样的代码。
这些分支里面谁是控制者?答案是:在谁的地盘,谁就是控制者。某机顶盒分支,根本就 不需要甩Linux主线分支,在他的机顶盒世界里,他爱怎么着就怎么着,根本不受任何人的 控制。
很多商业公司拷贝开源软件回家,不再对外贡献,这同样是一个分支,并没有因为你不对 外贡献了就改变我们后面要讨论的逻辑。
这是基础,不理解这一点,就无法理解开源是什么。开源的整个分支生态链确实是可以控 制的,但不是你理解的那种控制,如果对方不想被你控制,你是肯定控制不了的。这是前 提。
好了,大家都有分支,大家都要加特性,每个分支都会往前发展,你当然可以就自己的分 支上随便加你自己想加的东西,但假设Linux主线修正了100个安全补丁,你想不想把这个 补丁合进来?不合当然是你的自由,但这100个补丁你就要用自己的手段来修复,你能付出 这个工作量吗?你还可以留着这100个漏洞不管它,但你和你的用户能否忍受?如果不能, 你就受Linux主线的控制了,因为你要把Linux主线的代码合进来。
为了把这个代码合进来,这些代码又和Linux主线本身加入的特性有关系,那么,你要不要 把这些特性也合进来?这样,它对你的控制又加深了。
好了,它合入的特性如果和你加入的特性冲突了,你留它的特性,还是留你的特性?如果 你为了他的特性而放弃你自己的特性,他对你的控制就更深了。
你看,开源社区是没有权威的,它是看谁的分支做得好,从而淘汰掉别人的分支。这一点 ,连Linus都无法改变,如果他作死,把Linux主线维护得差一点,Linux主线就会被其他主 线超过,这个就不再是主线了。
所以,你做惯商业软件,想成立一个董事会,搞一堆管理层,想通过决策左右Linux的发展 方向,想卖自己的私盐,无论你多权威,多有钱,你这些权威和钱,也只能用来买最好的 工程师和项目,把你的分支做得人人想用,否则你再定义你的分支是“主线”,它不是还是 不是,这个是你无法挣扎的。你做商业软件的时候用惯的那套讨好领导,讨好资本的技巧 ,在开源社区是玩不转的。
开源社区是一个蛮荒的森林,所有族群为了生存无所不用其极,不相信权威,只有如何活 下去是动力。但这种野蛮是有规律的,这个规律就是生存压力,耍横是没有用的。在生物 界,小到蟑螂也能活得很好,大到恐龙该死还是死。活下来的都是身经百战,不在乎“名义 上对不对”只在乎和环境最好贴合的精英。你把自己封闭起来不见得保护得了自己,你完全 开放合作也同样可能被人一口咬死。
基本上,把一个分支维护好,最大的难点不是你加人加功能(当然,这个是前提),而是 你怎么保证你的架构,每个特性加入到分支中,都是一次对别人的冲击,因为你的特性和 别人的特性是会冲突的,能接受更多的特性而不互相冲突,你要控制这个合入过程,要选 择让哪个特性进,哪个特性不能进,怎么进,这是需要良好的架构控制能力去做到的,不 是你给某个领导说通了就可以搞定的,你放了一个扰乱性特性就去,几个版本后就得回退 甚至整个分支放弃。所以社区的文化才是“show me the code”——你少来耍嘴皮子,我们用 竞争力说了算。
这个不以任何个人意志而转移,国家意志都不行。我们要面对这个竞争,就要想好自己稳 定的设计逻辑和策略逻辑,不要再想依附谁,把心思都放在生存上。对开源这个问题,外 其身而身存,开和不开,都不是我们讨论的关键问题。