LF APAC 开源布道者分享系列之十一:上游思维与上游优先

upstream first 和 be upstream 是开源世界中一个共识,但是这是一个非常有挑战的观念和实践,需要建立在对信息技术、网络空间、现实社会有着非常深入的理解方能实现这点,而且还要克服人性的弱点和短期的诱惑,和人类很多协作的成功一样,这是一个无比艰巨的挑战!那么我们就试图就这两个观念在开源中的应用论证一番。

Wed Apr 20, 2022 | 8400 Words | 大约需要阅读 17 分钟 | 作者: 「开源之道」·适兕 |

你和一个朋友正在河边野餐。突然,你听到河里传来一声喊叫——一个孩子快要淹死了。你们俩不假思索地跳进水里,抱起孩子,游向岸边。你还没缓过来,就听到河中又传来一个孩子的呼救声,你和朋友只好又跳回河里救她上来。接着,映入眼帘的是又一个在水里扑腾的孩子……再来一个……紧接着又是一个。你们俩都来不及救了。突然,你看到你的朋友钻出水面,上了岸,似乎要离你而去。“你上哪儿去?”你问。朋友答道:“我要到上游去,看看到底是谁把这些小孩子扔进水里的,我要去把他打一顿。” ——一则公共卫生寓言(原文一般认为是欧文·左拉所著,此处有改编)[1]

引子

在历史上,有一篇非常著名的公开信[2] [3],感人至深而又让人无比佩服地说明了,人不会就眼前的困境而疲于应付,总是在探索更多的可能性,那就是1970年,时任NASA的科学副总监 Ernst Stuhlinger 答复赞比亚修女 Mary Jucunda 所提的问题:

目前地球上还有这么多小孩子吃不上饭,怎么能舍得为远在火星的项目花费数十亿美元?

Jucunda 先是肯定了对方的疑问,然后从一个历史上研究显微镜而战胜瘟疫的故事,进而诠释探索太空,卫星对于解决人们饥饿的前瞻性,在最后收尾更是令人心服口服:

img

随信一块寄出的这张照片,是1968年圣诞节那天阿波罗8号在环月球轨道上拍摄的地球的景象。太空项目所能带来的各种结果中,这张照片也许是其中最可贵的一项。它开阔了人类的视野,让我们如此直观地感受到地球是广阔无垠的宇宙中如此美丽而又珍贵的孤岛,同时让我们认识到地球是我们唯一的家园。我相信,人类从宇宙中学到的,充分印证了Albert Schweitzer那句名言:“我忧心忡忡地看待未来,但仍满怀美好的希望。”

希望这可以给你的困惑一点解答 。

人类是为了更好地活着而探索宇宙。

Stuhlinger 以充满说服力的证据,阐述了应该去极力寻找问题的根源,而不是完全被眼前的困境所捆绑而停滞。而这个观念,就是我们这篇文章试图想阐明的——往上游靠近。

什么是上游?

上游最初的解释来自于河流,就是:

子在川上曰:逝者如斯夫!不舍昼夜。

在连续的不断的河流,逆流而上,直到尽头。逆者皆为上游!溯流而上,也是我们非常熟悉的形容往上游去寻找解决办法的常见成语。

如果说上游在我们的观念中,则是没有那么多直白,因为上游不过是个比喻罢了。在观念中的上游,就是说我们不是应对当下发生的事,而是要找到当下这件事为什么会发生?是什么引发的?我能不能不让它发生?

从历史的角度而言,问的问题就是我们为什么是现在这样?但是历史是无法改变的,我们只能把握现在,因为在时间这个而言,上游意味着不可改变,因为它已经发生。

在现实世界中,在几乎可以无限延伸的时间线上,我们可以在很多个时间节点进行干预。换句话说,“上游”并不是一个特定的目的地,而是你逆流而上的一个大方向。[1]

在计算机技术方面,程序的执行也是类似“流”的,尤其是在调试程序debug的时候,因为计算机是顺序执行指令的,所以,当工程师在尝试寻找发生问题的根源的时候,往往表现并不如表面显示的那样,事实上是整个系统的任何部分都是引发问题的潜在环节。尤其是当下复杂的分布式架构,更是要求往上游出发去找出解决之道。

如此而言,这意味着上游,不仅是时间上的,也包括空间上的,甚至是抽象的,接下来,笔者就这些观念、思维、思考方式等做一些举例说明。

什么是上游思维?

技术与工程的改进

在技术的传授与改进中,人是其中的关键,然而人却有最大的问题:人的生命和精力是有限的,那么要完成伟大的工程,就需要更多人,以及代际的传承来完成[4]。在开源的世界里,脍炙人口的故事莫过于 Richard Stallman 索取施乐打印机的源码遭到拒绝转而发起自由软件运动[5],更为让人激动人心的了。但是仔细思考,如果没有源代码,只有一小部分人可以学习、修改和分发,历史上的故事告诉我们,只有一小部分人能接触到事物,终究会失去活力,甚至失传。无独有偶,技术的姐妹科学的发展,也恰恰是由于庞大的基础人群[6]。

开源即上游,无开源,则不存在上游一说,而是无法突破的巨大屏障。

从已知探索未知

回答这个问题,没有比科学史更能说明这个更合适的了[7],哥白尼式的革命,牛顿万有引力定律的解释,达尔文进化论的发现,香农的信息论、……无一不是,让人们从已知探索未知而获得知识、观念。而他们所有的过程,都是从上游开始询问。

大自然给了人类一个”谜“,这个包括人类本身是怎么来的,著名的生物学家,进化论者理查德·道金斯就以”盲眼的钟表匠“来比喻人类的进化,也就是说人类手上掌握的知识是有限的,还没有找到很多的,而是”逆流而上“,根据我们现在自身的条件,在往上游的方向努力。从DNA的发现,到基因的分析,再到宇宙的探索。

第一性原理

或许很多人和我一样,听到这个名词是从传奇人物Elon Musk 的一次TED采访中[8]获知的,对话:

克里斯·安德森:我的理论就是你 有一种能力,可以让你在设计的层面系统地思考, 汇聚了设计、科技和商业, 所以如果TED是TBD,Design(设计)、Technology(科技)和 Business (商业), 把他们打包起来, 以一种人们很少能够做到的方式融合起来然后 —— 然后关键的是——你对这个 拼接的组合非常的有信心,甚至会去冒疯狂的风险。 你赌上了你的财富,而且你好像还赌了好几次。 我想说,基本没别人会这么做了。 是不是——我们能不能分享一下秘诀? 我们能否将它放进我们的教育系统中?人们可以向你学习到什么吗? 你所做的真的太令人惊叹了。

Elon Musk:嗯,谢谢。 呃,我真的觉得我们有一个非常好的思考框架。 就是物理。你知道,它就是推理的第一性原理。 我大体上认为有——我想说的是, 把一切都归结于事物的基本本质 然后从此处开始推理, 这不同于类比推理。 我们生活当中, 我们都是用类比推理, 实际上就是说我们要照搬别人的做法然后稍加改动。 你必须这样做。 否则,从心理层面看,你这一天就过不去了。 不过当你想要做一件新的事情, 你必须按物理原则办事。 物理正是一种 用反直觉的方式来发现新事物的方法,就像量子力学。 它就非常反直觉。 所以我觉得这是非常重要的事情, 然后也要非常注重负面的反馈, 寻求反馈,特别是从朋友那里。 这可能听起来像个很简单的建议, 但是很少人这么做, 这是非常有帮助的。

第一性原理即是这个我们所能认知到的现象的最上游,将知识树倒过来的最顶端[9]。受限于经验,我们采用归纳,总是会偏离于事物的本质,历史上的地平说、地球中心说等,以及摸摸鼻子就会下雨的祷告等都是归纳的结果,大多数时候,我们需要跳出归纳,向上游出发,寻找第一性原理,并应用第一性原理。

从低维认知高维

从我们个体的经验出发,我们对于空间的感知,其实是有限的。比如我们会以时间来形容距离:一袋烟的功夫就到了。在飞机发明之前,人类对天空,仅限于想象成大鸟,在进入太空之前,也无法验证失重是什么。

在《平面国》[10]一书中,作者采用虚构拟人的手法,描述了一个二维图形:正方形的经历,尤其是遇到三维物体圆球的对话,圆球终于有理有据的说服了正方形,如何从更高维度来看低维的。

依靠感官:触摸、视觉,再加上我们的思考、猜测,科学的实证,然后不断的测量,进而总结和得出结论,但这仍然是有限的,我们仍然需要往上游:更高维度的,然后才有可能探索宇宙奥秘,理解地球之外的空间。

商业决策

我们在商界的上游故事,要听到的多得多,尤其是被一些故弄玄虚的文字高手们渲染一番,更是引人入胜,在事后看来简直是神来之笔,其实,如果我们用上游思维解释的话,也是做对了一些事情。

笔者这里讲一个Apple 的故事,那就是1996年乔布斯回归到自己创建的又被自己聘请回来的副总赶出的Apple,彼时的apple摇摇欲坠,我们听到的版本都是乔布斯,砍掉多余的产品线,而聚焦精力,其实我们更要去理解乔布斯的审时度势:个人电脑的时代已经过去,互联网冉冉上升,计算机正在按照摩尔定律发展,如何抢夺下一代年轻人的市场才是王道,于是将视线转到了彼时一片混乱的音乐市场:个人分享一片欢腾、歌手跟着狂欢、唱片公司试图重新夺回控制权、互联网先锋都在试图圈地…….乔布斯团队却逆向上游思考:通过控制音乐的分发而重塑音乐市场,一如当年留声机发明后的技术占一杯羹一样。于是iPod + iTunes 横空出世。

在商业看来,上游就是用户的需求,这是一切的根源。所有商业成功的故事,都是解决这个最根本的问题~ 从洛克菲勒的桶装油到京东的上门付款,从支付宝的诞生到稻盛和夫拯救日航,从海尔的禁止在车间大小便到任正非的程控电话交换机…….

在法律经济秩序中,利用上游的思考模式,可以获得意想不到的可能性,尤其是在知识经济如此发达的今天,从软件的分发到计算算力的商用,乃至数据的收集、处理和分析,都需要向上游出发,才能发现机会。

日常与学习

101camp [11] 的ZoomQuiet ,圈内人称社区大妈,有一个断言:“有些教育成功将人们热爱学习的天赋给教育没了!”

作为社会性动物[12]和文化性动物[13]的人类,均承认构成人类的固件是所有学习的基础,从语言到文字,从社会到文化,以这个为基础而进行的后天学习。这是一个典型的反直觉的往上游走的过程,因为按照自然的“规律”,人本应像动物一样按照直觉行事,但是,理性让人往上游行走,征服自然,进入了人类世[14]。

我们为什么要读书?我们为什么要分工?我们为什么会形成几千万人口的大城市?我们为什么不能飞翔?……

上游思维,是我们学习的原点,没有这个,学习就不会存在,也就没有了任何的意义。

总结:凡事追问为什么!

从上游抓起,这是一个人人都明白的浅显道理,可是为什么做到的却颇为罕见?当人们疲于应付下游所遇到的各类问题的时候,即使有那么一瞬间能想到去尽可能的往上游去走,但是现实情况往往纠缠纷繁复杂,或者不忍,或者难以抽身,又或者是差了那么一丁点的运气。

尽管我们通常会认为“观念决定行动”,但是上游思维这样的观念没有被人所认知的话,那么行动就不会发生。往上游去探索和追溯本身就需要改变观念,不被眼前的现象所迷惑,总是愿意往前一步。而这是不容易做到的,也是心理突破重要的一步。换句话说,能做到改变观念,往上游窥探一眼,本身就是非常了不起的成就。

询问为何至此?而不是只能如此,正是向上游出发的起点。

开源为何需要上游

终于该说到,开源项目开发中的上游观念了,在开源的十大原则定义下[15],源代码是永远支持和鼓励fork 的,但是众所周知,项目是进化的,fork 则意味着开发者共同体的分裂,也意味着应对挑战重大问题的资源的削弱,历史也告诉我们,成功的开源项目,都是不会fork 的,而是那些fork的都会保持和上游畅通。

所谓的开源上游项目,也即是原创作者或团队公开以开源的方式发布了自己的源码和工作流程的项目[16],这个很好理解,也是我们最为关注的创始人或创始团队,他们具有项目的原始著作权,甚至会申请商标等知识财产的所有人。(相信很多读者会产生疑问,这个上游该如何判断可信度?或者在中国的文化背景下,谁又有资格成为上游?请稍安勿躁,看官可继续阅读,后面会解释)

劝说人们在上游行动,颇有点那么劝人向善的说教,感觉上有点让人犯困。但是,笔者不打算这么做,没有人愿意去做一个让人讨厌的人,笔者则是从划算与否的角度来谈,即算经济账的情况下,来尝试给人们把这个事情讲清楚明白了。

开源中的上游思维

我们都会对那些勇于迈出他人不愿意迈出第一步的人表示佩服与追随,尤其是那些能够明确讲出自己的目标、行动纲领以及回报的领袖,在计算机技术领域,哪怕是没有直接的金钱回报,我们仍然相信Richard Stallman、Linus Torvalds等开源世界的领袖,那些发起项目的各类开发者[17] 。也就是说,当我们进入开源世界的时候,在站在巨人的肩膀上之前,要先从脚下开始往上攀升。

开源项目,即使是某个时刻的成果——编译为可在计算机运行上的二进制软件,不是一个东西,它还需要未来的改进、漏洞/缺陷修复、适配等,它是一个不断变化和生长的数字化的存在。这就是我们看到Linux Kernel 发布的时候是0.01版本,30多年之后是5.8[18]的深层原因。这个观念对于一名软件开发者在引用任何第三方的程序都至关重要。

基于这个原理,当 fork 一款开源项目的时候,就要保持与其上游的同步,(除非上游不再更新)而且是不间断的,否则就会面临不断的补丁backporting[19],这是一项艰巨的任务,会牵扯项目中宝贵的资源来完成这件事,当积累到一定程度的时候,也就是版本相差悬殊的话,这么做的代价,不亚于一次重构。这就是巨大的技术债务的来由。

另外一个显而易见的道理是,在开发新的功能的时候,要在上游亲力亲为的做,(除非上游不再更新)这样的话,不仅可以获得上游的开发和工程力量,还能最大的保持不会发生技术债务,因为维护一个模块的代价要远远大于其初始的代价。

对于很多下游的项目,有蛮多的最佳实践可以参考,例如非常受欢迎的Linux发行版Fedora就明确的说明了时间上游优先的益处[20],诸如安全性、获得用户反馈等都是益处多多。

采用开源的技术债务解决

2020年,来自Linux基金会的Ibrahim Haddad 博士撰写了一篇白皮书——《用开源解决技术债务》[21]。这份白皮书非常清晰的表达了,如何在采用linux kernel、Go、Python、Apache等这类优秀的开源项目之后,企业需要慎重考虑的事项,这可是份宝贵的经验积累。在此笔者强烈推荐各位看官去深度阅读原文,本文仅对其中的两张图示做粗略的解释。

绝大多数,在下游选型了开源项目之后,非常容易,一条命令git clone $URL 就可以获得,然后就会盯着自己眼前的这份副本,常常会忘记远端的项目在不断的进化,大多数时候,由于技能和经验,会对远端的更新速度低估,以至于在无意间,开始更改自己的眼前副本,以满足自身的业务需求:

时间过的飞快,当一个开发周期完成之后,就会发现远端的版本已经和刚开发完成的,产生了差异,这个差异就是形成技术债务,引起严重的后果,诸如高昂的维护成本、创新乏力。

而采用上游优先哲学,也就是最为经济的方式,保持创新的轻松上阵:

拥抱开源,力争上游

在开源的世界里,做这个世界的一份子,做出自己的积极亲力亲为,除了要去拥抱上游之外,接下来要做的就尽可能的去成为上游,也就是说如果你有能力和意愿去实现一个项目,那么就发起它,为解决问题而生,然后构建宽松的环境,发扬开源所倡导的原则,来吸引更多的开发者、工程师、布道师们来一起实现它。

历史是一个连续的状态[22],力争上游的同时要承认这一点,不然一不小心就成了孤岛项目——意指那些只有一个人或少部分人参与的项目,和任何其余组织都没有关系的项目—— Linux 基金会旗下TODO Group 给出的建议是先成为现有项目的参与者、领导者,然后再发起自己的项目[23],这样成功的几率就会很大。

让我们回归到开源历史上重要的“结盟”会议[17]上,开源定义采用了宽松的原则,让重要的项目保持了大概的一致,然后形成了互联网的解决技术栈,进而像滚雪球一样的不断发展壮大。这也是我们现在看到的新型的互联网公司——早期创业时选用开源栈——成为开源的一份子的重要缘由,从Facebook(meta)[24]到Twitter[25] ,从Netflix [26]到Linkedin[27],均验证了这个。

当然,开创一个全新的领域也是被鼓励的,但是这不仅是和开源有关了,而是要加上其它的因素,如创新,全新的解决问题的方式,颠覆式的问世,比如Bitcoin和blockchain 就是开源世界的全新力量,采用加密技术解决某些信任问题。当然,创新不止技术,社会创新也是被鼓励的,Android、Eclipse、kubernetes 这样联盟式的开发组织创新就是被值得鼓励的,当然,这需要更多的资源进行谈判。

人类的集体行动,始终是决胜的重要形式,从走出非洲到建立帝国,从发动战争到信息革命,开源项目的集体行动需要很多的先决条件:所有权、互联网/万维网、共识、网络空间的共同体、社会契约、匠人精神等等,所有的这一切都需要成为上游才有可能实现,任何的分裂,不仅不会带给更多的力量,反之,则一定会削弱。拥抱开源,只能基于此而出发,这本身也是上游思维。

附录:关于新冠病毒的一点感悟

2022年,从 COVID-19 全球大爆发已经过去了3个年头了,病毒进化的速度飞快,已经是奥密克戎了,而各国采取的防疫措施也各有不同,无论是上海封城,还是伦敦彻底放开,这场灾难带给了人类巨大的损失。

作为一名软件从业人员,有很多不懂的地方,打算从微软的创始人Bill Gates 的两次演讲谈谈上游的重要性。在2014年,世界避免了埃博拉病毒的全球爆发,这要感谢成千上万的无私卫生工作者——坦率地说,还有一些非常好的运气。Bill Gates 在TED的演讲中如此建议:

将我们所有的好想法付诸实践,从情景规划到疫苗研究再到卫生工作者培训。没有必要恐慌……但我们需要开始行动。[28]

8年之后过去了,Gates 再一次站在了TED的讲台上,经历了 COVID-19 肆虐全球之后,还调侃了一下大众:90%的人是在发生疫情之后,才去观看的2014年的呼吁。 [29]Gates 又说了COVID-19 给人类带来的恐慌、倒退、损失,本来是可以避免的,如果我们做好准备的话,在病毒爆发之前就将之遏制住:

这个原理似乎理解起来没有什么难度,但是想要做到,则需要全球人的共同努力,需要有相应的人去做:数据分析、警报响应、快速的处理、医学研究等等都要跟上,也就是说,这需要花费资源去处理,不让这件事发生。这也就意味着:假如新冠肺炎在早期就遏制住,没有爆发的话,我们这三年的损失就不会发生,而做这件事所要花费的开销,和这三年的损失相比,实在是九牛一毛微不足道。

上游的做法和实践,需要真正的负责任的专家团队去进行,因为对于常人理解起来这个实在是太困难。无论是疫苗、治疗药物,还是核酸和流行病调查,都是下游的做法,下游的做法很重要,但是永远是疲于应付,因为在未来它会不断的发生,所以需要给上游的做法,留空间和资源,而不是全部投入到下游。记住:上游解决的问题,就是不让它发生。你能想象假如COVID-19没有发生过的样子吗?

LinuxCon、KubeCon、Open Source Summit 一如既往的在北京/上海举行,来自世界各地的开源朋友,非常欣慰的每年至少能见一次面;OSPO 开源万里行,可以随时组织一场meetup;开源布道者也可以相约线下,畅谈开源在本土的传播与发展;本地的开源用户组也在构建连接与信任……

参考资料

  1. 《上游思维:变被动为主动的上游思考法》,[美] 丹·希思,中信出版集团,2021-8
  2. https://lettersofnote.com/2012/08/06/why-explore-space/ ,最后访问时间:2022-04-21
  3. https://www.zhihu.com/question/382274786 ,最后访问时间:2022-04-21
  4. 《转向:用工程师思维解决商业难题》, [印度] 古鲁·马达范中信出版社,2016-6
  5. 《若为自由故:自由软件之父理查德·斯托曼传》,[美] Sam Williams人民邮电出版社,2015-4
  6. 《科学:无尽的前沿》,范内瓦·布什 / 拉什·D.霍尔特,中信出版集团,2021-5-1
  7. 《科学的历程》,吴国盛湖南科学技术出版社,2018-8
  8. https://www.ted.com/talks/elon_musk_the_mind_behind_tesla_spacex_solarcity  ,最后访问时间:2022-04-24
  9. 《硅谷生态圈:创新的雨林法则》,维克多 W.黄(Victor W. Hwang) / 机械工业出版社, 2015-9-15
  10. 《平面国:个多维的传奇故事》,艾勃特大连理工大学出版社,2013-1-1
  11. https://www.101.camp/ ,最后访问时间:2022-04-24
  12. 《社会性动物》,埃利奥特·阿伦森Elliot Aronson华东师范大学出版社,2007-12
  13. 《文化性动物:人类的本性、意义与社会生活》,罗伊· F.鲍迈斯特华东师范大学出版社,2021-5
  14. 《时间地图:大历史,130亿年前至今》, [美] 大卫·克里斯蒂安中信出版社,2017-6
  15. https://opensource.org/docs/osd , 开源定义,最后访问时间:2022-04-24
  16. https://en.wikipedia.org/wiki/Upstream_(software_development) ,最后访问时间:2022-04-24
  17. https://www.linuxfoundation.org/tools/linux-kernel-history-report-2020/ , 开源定义,最后访问时间:2022-04-25
  18. 《开源之迷》,适兕,人民邮电出版社,2022-02
  19. https://en.wikipedia.org/wiki/Backporting ,最后访问时间:2022-04-25
  20. https://docs.fedoraproject.org/en-US/package-maintainers/Staying_Close_to_Upstream_Projects/ ,最后访问时间:2022-04-24
  21. 用开源解决技术债务,https://www.linuxfoundation.org/tools/solving-technical-debt-with-open-source/ ,最后访问时间:2022-04-26
  22. 《自由论》,【英国】以赛亚·柏林,译林出版社,2011-03
  23. https://todogroup.org/guides/ , 最后访问时间:2022-04-25
  24. https://opensource.fb.com/ , 最后访问时间:2022-04-25
  25. https://opensource.twitter.dev/, 最后访问时间:2022-04-25
  26. https://netflix.github.io/, 最后访问时间:2022-04-25
  27. https://linkedin.github.io/ , 最后访问时间:2022-04-25
  28. https://www.ted.com/talks/bill_gates_the_next_outbreak_we_re_not_ready ,最后访问时间:2022-04-24
  29. https://www.ted.com/talks/bill_gates_we_can_make_covid_19_the_last_pandemic ,最后访问时间:2022-04-24