3.147. 投资开源社区的基本逻辑

这个问题如果对我之前建立的基于《道德经》的名称空间比较熟悉的话,其实不值得讨论,但很多人不耐烦看这么复杂的逻辑,这个版本只是一个简化版的逻辑介绍。主要解决一个问题:让一些投资者看懂开源社区最基础的逻辑,让投资决策回到正轨上。

所有开源社区的投资者和被投资者,谈投资的时候,很自然会谈“投资收益”。比如你投资钱,让人开发一个新的编译器,开源运作,希望有很多参与者参与,很多爱好者在社区中贡献力量。这个初心很正常。

好了,你把钱给了一个团队,让他们运作开源社区,这个团队定期来给你汇报工作,他们会告诉你:“我们最近又支持了3款芯片了,我们最近又实现了一个向量并行优化了,我们的后端指令排队比gcc快30%……至于你们投资人提到的构架不好的问题,我们正在大力整改,下半年就好了。而你们说的稳定性还不够的问题,我们的钱不够,求求你们大发慈悲,给点钱,让我们建立测试团队,这样稳定性也会上去……”

这种话被投资团队爱说,投资人爱听——一切都向好的方向发展,问题逐步得到解决,我们马上就要成功了——在你失去耐心前,这一切都美好。

道德经说,轻诺必寡信,多易必多难。说的就是这么个情况。

如果不断增加投资,把一个软件开发得越来越好——你开源干什么?慈善吗?慈善的事情留给你夫人干去(我没有性别歧视啊,不要K我,只是比喻现实而已),吃饱没事,你参和啥?

我们开源不是我们要做得越来越好,我们开源是为了把所有合作者聚合在一起,抱团,变成你离不开我,我离不开你。如果你做得完美,越来越好,我拿你的代码就好了,我为什么要和你合作啊?

你开源了一套代码,什么问题都解决了,我为什么要给你做贡献啊?——你就不缺我一个啊。我们一起做一辆汽车,你做发动机,我做车轮,他做方向盘,还有人做整车安装,有人做测试,有人做喷漆。你得到了我的好处,我得到了你的好处,这我才会进来努力,努力完以后,我就在生态中占据一席之地了,我就值得来“帮帮你”了。你都开发出整辆汽车了,然后现在说免费送?我用就是了,我来帮你啥?

然后你现在开源运作,目标是不断加人,做出一个完美的软件,你是圣人了,别人不过活在你的光辉之下,何必来帮你?这个钱不就是打水漂么?——你邀圣人这个名,就是不断被别人放血——你有那么多血放吗?

看不懂这个基本的道理,运作什么开源,运作多少个死多少个,浪费钱而已。

你要看懂开源社区的运作状态,要看懂有多少实体实实在在在用这个软件,放到他们的产品中——包括你自己的产品中。开源是一种诚意,表示“我不坑大家”的诚意。最后的目的是大家都不用吭声,得了好处偷着乐。不是出来到处宣传“我做得多么好”——越好越被放血,放到你失去耐心为止。

在组织中发挥关键作用的人是不会被人表扬的,因为别人依赖他。依赖他不批评他,保证他继续发展和发挥力量,怎么保证他在那个位置上啊?

在组织中发挥关键作用的人也是不需要被别人表扬的,因为你本来就依赖我,我给你废什么话呀?——有本事你别用——这句话也不能说,没事也没有必要制造对抗么。

运作开源需要有大格局,需要有那种面对大自然的谦卑之心。你不能听了我上面这样说,就想着怎么制造任务,让其他参与者按你的要求开发部件。也不能预先定义留下什么特性给参与者来开发。这些都是“你定义”的格局,但开源是“我也不知道这个软件应该怎么改,也不知道这个软件可以怎么用,但我已经发挥了我的作用了,并为大家提供好处了,后面如何发挥,都看大家了”。这才是真得想借力。外面的利益关系错综复杂,但我不管,我只守稳我自己的目标和路向,我就是想做一个编译器而已,你们要用的,拿去用,用完不满意的,告诉我,帮我修改一部分,给我的测试,告诉我哪里做错了……你的领域的经验就帮助我把编译器做得更好了,我看重的是你的真实业务上的那些经验和Bug修改,可不是你派进来参与我编译器开发的那几个小人物。

我一个小小的智能台灯生产商,也许对你的编译器就是个外行,可能对你的命令行都理解得不明不白,但我真的用你的编译器编译我的台灯程序啊,我告诉你的问题可以影响数百万用户的实际问题的问题啊。这比你几个“代码爱好者”,懂一堆编译器什么前端后端,语法树状态机什么的,不重要万倍?

开源看重的是这种经验和代码,你搞开源社区,不找这种合作,搞几个高校,培养两个爱好者,整什么编程大赛的,这有啥用啊?全是自己使的力,被人放血而已。高校合作也必要,找些真要解决的问题,去解决这种真正的问题,这才是面对“大自然”。你设计几个题,然后像考试一样去让人做,这是哪门子的社区啊?

天下神器,为者败之,执者失之。开源是要利用天下,用你自己的力量去控制它,你就失去它了。

不少投资者有个误区,似乎程序员都特别喜欢写代码,社区代码都是因为兴趣写出来的——老天呐,写程序不是吃饱没事去钓鱼,脑子里装着十几个逻辑,要扭合在一起,我写程序的时候谁敢靠近我我都想捏死他,你以为是去品茶呐?写程序都是为了解决问题,用来“陶冶情操”的程序不是拿来用的。

投资运作开源社区,和投资商业公司,整个决策逻辑是完全不同的。按投资商业公司的方式投资开源社区,只会缘木求鱼。

3.147.1. 补充1:20201224 关于纯粹的爱好者问题

今天在一个会议上和一些同行讨论到这个问题,讨论到一个衍生问题:如果有一些真正的爱好者,就是想通过贡献社区获得个人的成功感。比如学生可能会希望通过这种参与,从而练习自己的编程和工作能力。那么,应该如何利用他们这种动力呢?

这个小节我们独立对这个问题进行一个逻辑建模。

首先,以我不算太短的工程实践经验(20多年),我认为纯以学习为目的社区贡献是非常有限的,我看到有力的社区贡献(我的标准是这个特性被开发出来后能被商业解决方案用上),通常来自两个方面:

  1. 商业公司的工程师,有明确的商业目标

  2. 高校的研究项目,有明确的研究目的,背后不少也是有商业或者政府资金引导的

但很少来自“学习”这个目的,因为学习这个目的是很难支撑一个工程产品。工程产品大部分时候都要面对“脏问题”,不优雅,逻辑不清爽,枝叶丛生,它不利于学习。我们要在竞争力和逻辑简单以及其他优势上做取舍,取舍的结果就是让人“没有清晰的结论”。这种东西对学习其实有害的,因为学习是为了获得可重用的有效Pattern。

但完成工程任务这个目的就不同了。这个目的会让人妥协,会让工程落地。所以,纯粹的爱好者能起的作用会非常有限,因为他们并没有让这个产品持续生存下去的强大动力。这和一个存储供应商需要让某个发行版的ceph性能持续有竞争力,或者一个教授要让课题组出某个算法可以提升搜索速度的论文这种动力是不同的。你把爱好者引导得再好,他的努力买不到他的目的(比如“学习”,“成功的快感”)这些东西,你就没有办法持续。而软件的生存,软件构架得以延续,都是建立在可以持续生存这个逻辑上的。

软件,特别是开源软件(开源的目的是为了别人可以和它进行深入的软件接口兼容),被引入的重要考虑因素就是它的可延续性。因为我们要把一个设计逻辑建立在对另一个逻辑成立的条件上,我们就会要求被依赖的逻辑具有稳定性。而“爱好”这个目的很难提供持续的稳定性。所以,对于爱好者,我们只能寄望在枝叶逻辑上,因为这种情况下,就算他放弃了这片枝叶,我们也无损整个“合作”的持续发展。

当然我并非说开源社区就应该排斥“爱好者”,也并非说爱好者就一定不能证明他具有持续性,但作为有持续发展目的是开源社区,主干逻辑是很难建立在爱好者身上的。所以,展现清晰的软件架构图景,让没有参与者参与的逻辑都能为主干逻辑添砖加瓦,让主干逻辑可以发展起来,让生态的各个利益方可以扭合在一起滚大雪球,就会显得更加重要。没有人控制这个目标,其他的努力只会在规模起来的时候互相消解,最终土崩瓦解。