来开明的面分享你开的故事各位小伙伴今天是那个 2025 年的 3 月 25 日今天我们想聊的话题呢是 upstream first 这个话题啊他非常老生常谈啊江宁提森还有江生他们之前也都也都聊过老生的话题要聊出一些新意就不是很容易啊安观力啊我们应该依次打个招呼啊我是那个开明的麦克大家好我是 LC 北京博客的江宁哈喽大家好我是建盛我们这本主题啊
或者叫上游优先这个话题大家第一反应就是这很正确你说上游优先好我赞成我觉得上游优先是对的那么我们先定义一下什么是上游各自谈一下我们对上游的理解我想先从生活我们和日常的这种
来去谈一下什么叫 Aftim 就其实这个我们如果有一个时间周的话就是其实很容易理解就是说原来是怎么怎么地就是比如说我们有历史对吧去找一些什么事情的发生的源头一个世界它有一个
其实过程发展到结局我们往往会在正在事情发生当中对然后我们要去找到源头上去解决一些问题这个就是我们也有一些古代的成语像这种未雨绸缪或者是中医里边叫自卫病对吧在没病之前去讲一些生活好的习惯什么东西去扫这些东西
还有一些比如说如果一个社会多一所学校就少好几座监狱就是它是我们要从源头上去找一些解决一些事情问题的方式 KM 项目里边其实是谁是项目的最初的发现 original 项目的原作者或者是谁是哪个团队的发起这个我们通常称之为
上游就是始作俑者对对对 OK 来江宁代码就是特别是这种开源代码其实他写的时候就是他的原作者可能会经历过很多很多人就是如果是这种相当于他社区发展的会比较完美一点的话这个代码他可能被很多人修改过其实你要说这个原始的这个作者我们可能比较难直接就找到他但是他会有一点就是这个代码被
大多数的人所引用或者是他在大多数的这种情况下他会把它看成是一个提示因为后面的话我们可能会基于这个单板来做一些修改修改完了就后面看谁
被消费有些时候的话如果大家拿开源代码拿过来的时候实际上很多时候它可能是在本地维护一个分支它并没有回归回去就是它这部分修改其实看不见的那对于我们来说的话就是我们基于某一个开源项目来进行开发我们基于那个开源项目可能就把它看成是一个上游
这样的话你就跟流水一样过来一般来说我们这种开箱不是都是也是分层的吗如果是你是偏底层的那承载的都是共性的这种诉求然后这个共性诉求大家一起来去维护其实成本是最低的刚刚建设那边提到商用思维的话其实是我们可能要防范于未然我们还是想把它
再下一个定义其实你可以把它看成是一个源头不管是我们的开源项目的这个源头还是最开始的这个基点对对就可能是他在这个层面上面他会进步进步发展那我们可能越是在源头里面越早的去对他做一些处理的话那我们可能后面承受的这个
代价或者我们承受这种技术债就会变少一开始的时候我以为我对这个概念非常清楚上游先然后这不就是很自然的上游是谁很清楚吗后来我仔细琢磨了一下我发现这个好像又不是那么的清楚又不是那么明确觉得上游可能就是一个比较相对的从供应链的角度来讲就是谁是你的上家
谁是你的下家它是一个相对概念比如说就供应链的某一个环节假设我出在第五步对吧那第四步呢可能就是我的上游那至于第三步和第二步他们是不是我的上游从严格意义上来讲他其实也是但是呢他不是我需要去复刻的那个
我需要关注的那个上游我需要 focus 的那个上游就是我的上一家我现在觉得这个上游是这样一个相对的概念我们先谈完这个定义之后呢我们先接下来说第二个事情啊就是大家在提倡或者对他喊说上游优先但凡我们口号上喊什么那一定是我们缺什么那我们既然喊上游优先那就一定是有很多实际的操作过程中他没有遵循这个上游优先的这个逻辑或者说这个形式的原则或者说产生这个我们要喊这个口号的原因是啥
因为我正在创作一本关于开源的历史的东西就是说其实我们回顾整个开源的项目或者开源的历史以及开源许可的历史你会看到上游先其实是一个妥协后的结果我们知道自由软件或者 GPLCopLeft 这种许可它为了保证用户的自由你所有的修改 License 规定你必须的
回馈到最上面 original 上游的这个地方我觉得它是让你必须得公开但并不是说你代码必须要回流 contribution back 对就是你合不合没有能力或者是整个东西是另外一码事按照至少要公开让大家能够看得到为了保证用户的自由所以说 GPL 它保证了这个项目可以一直的大家都在往合理的往这个上面去管
但是这样就会有点霸道我只是看了一下你的代码或者是我只是引用了你一段代码或者是我调用了你的库你就非要让我把所有的东西有些商业公司就是开始抨击它像你比如说还有这种学术性训课就是像 Apache BSD 这种训课他拿过来你说你保留权利剩下的你爱怎么低怎么低他很容易就产生一个分支你无所谓他不强制邀请你
Apache 他们怎么办就倡导大家就说你上优优先吗他是通过一种理念一种精神一种文化倡导的方式然后去弥补强制性的许可因为他没这许可所规定我认为就上优 upstream first 都是 Apache 许可的或者别人许可的他才去倡导就说你交销技术债务你要大家往合力一块搞 GPL 没有这种
我们知道因为学术线许可它不能保证这样所以说它在历史上很多的好项目都被分裂过撕裂过我们举个例子比如说 X11 或者是 Keybras 这些项目都是被商业公司它的技术行力实力很强直接拿过来我发展另一方面我把你原来的项目所有的人挖走然后我自己发展一个商业产品写零零单字太多了包括 GPL 的提出者 Rachel Stahlman 他的第一部作品就是 EMAX 那个项目
也是被那个被人就这么就是直接就拿过来变成我的了所以说这个是学术性许可他没有这么去制定的所以说只能通过软性的这种文化的方式倡导的方式劝说的方式但是我们也看到就是 GPL 那样被破装水也好或者什么的你会发现这么多年下来发展最好的项目没有分支的这种还是 GPL 你比如说 Kernel 它一开始就是
GPL 为土你要从他那儿去说把客栏拿过来这是我的这个太困难了你说到这个妥协是和谁和谁之间的妥协这就是这个平谱我在我的书里边其实提过一个平就是光谱的一个概念最强的就是要求你互惠的 GPL 然后还有这个商业的那种必然的重彻的就是你们什么也不要干你复制二进制我都告你
就是微软他们那种就是那种很霸道那种许可其实这个中间有好多种光有好多种许可那你怎么选阿帕奇 BSDMAT 或者是一系列的但是只有这边能保证你这样所有的其他东西你必须加其他威力你比如说举个现在的比如说大家好阿帕奇友好但是阿帕奇你会发现不管是 Kubernetes 也好它会为加了很多这个
什么签订条款什么这些东西其实上游优先也好单把骑驱可也好各种手段去保证社区不要分裂我们本身力量就很弱你说咱三个人一共就那么点每个人都一人搞一摊那肯定不好对
我是这么理解的江娘你怎么理解这个上优先这个事情我觉得可能更多还是从这个工程的角度上来去看就是如果你要持续的去做这种开源的维护性的工作的话维护那个阿巴奇开梦那个项目有 8 年的这个时间
但是对我来说感触最大的就是就很多人其实基于这个项目去赚钱这些都没有关系但是会有一点就是说如果你对这个项目就是有些改动我们还是期望大家能把它就是沉淀到社区里面这样才能有更好的就对项目来说它可以持续不断的来发展
然后的话呢 upd.com 那个项目实际上它是有一个核心扣扣的话就是相对来说可能大家能采取修改的话会比较少然后另外的话它有一堆的这种 component
那个项目其实它那个背景是这样就是基本上是做企业的应用集成然后你想要企业里面有各种各样的这种应用然后这应用之间想要互相的这种交互的话其实是需要有个中间层来去做这些适配的那这个适配的这个过程就是这些 component 的其实这块是希望大家能够参与其中然后不断的来去贡献的其实当时也是选了这个 APA 企业许可协议实际上就是说告诉大家你可以不用
去贡献刚刚也提到这个东西但是呢很多很多就是我在维护的过程中其实看到很多人都跑过来给我们提 patch 最朴素的办法就是说我把这个修改放进来了之后后续我的一个就用 call 还会持续不断升级嘛他
它这块它就可以借助社区的力量我们来进行维护了之后再升级的话我只需要把软件下下来 download 下来然后我就可以可以很好的跑起来而不需要上游版本升级了之后我还得花很大力气去做适配
其实我觉得上游线最大的好处其实也就是让大家的力量都集中在这个上游然后通过通过这种融合的这种方式然后降低我们的这个工程的这个负担因为当时我其实在火冒的时候实际上我们也有那个商业版
当时其实就出现一个很直接的一个问题一旦我的商业版里面有客户提 bug 然后我修复我是用什么样的方式来修复对于我们来说的话那可能很多人可能就想那客户的 bug 我肯定是要在我这个本地的这个版本就是我们这个企业版里面修复完了之后客户才会认可我的这个成果因为我如果只是放上有
就不行最佳的时间你想想应该是怎么样我们先做本地的修复了之后然后再 bagger pod 到上游吗其实这不是一个最佳的时间其实我们实际上是什么这个问题我在上游先修好修完了之后我再把这个 patch
拿过来 backport 到我现在结版的那个 branch 里面因为这样做最大好处就是我不会漏掉那个 patch 这样的话我那个上游就社区版它永远都是最新的但我这么做如果你稍微有点私心的话你就会想
我这个好不容易积累一个 case 我要去打差异的话我这么来做的话是不是我的竞争对手就直接把我这个优秀拿走了但是对于我们来说的话实际上我们就没有考虑这么多当时可能也存在这个问题就是我们是主力的开发人员那在这个过程中其实我们是希望所有人都是往上游来做贡献其实那时候比较恨的是分资
我辛辛苦苦做了这个开发了之后你拿去 fork 了然后而且对别人说我基于你这个做了很多很多这个修改那你到最开始这个给大家做做贡献这些人怎么来想就是其实是觉得是很不舒服的一件事情你站在更多人的这个角度上来说的话其实你也缺乏一个就是
人为我为人能这么一个行合力来去来去做贡献的这块的这个事情只不过呢现在为什么就是我们在企业或者在现阶段就是能看到很多情况就是大家都维护本地的分支而不去往上游去做贡献这里面可能分分两种情况一种情况的话他可能觉得哎上游那边离我比较远
人家都说英语的可能这个我我我说中文的但但但大家说不到一起去然后他也不愿意去收我的 patch 还有一块的话呢那可能就是哎我这是有竞争优势的我不想我不想直接把它放出来但但我觉得做一个比较 practical 的一个办法是说我需要把我的接口我的就是我要做扩展的那那部分东西就是
就是我要把它放到商用里面这样我后续维护的时候我只需要做插件商用优先其实是体现在这个层面上面就是我们去修 bug 的时候我们现在我们商用先把它 fix 掉然后再 backport 回来这样能够比较高效率的来做这个事情但这里面其实也会存在的就企业内部如果就是一个线上的一个问题
你要这么来做的话那可能会花很长的时间所以也会做一些折中的一些办法就是我先做一个紧急的补贴我先把问题修了但是这个时候我一定要把 patch 要丢到上游然后去保证我后面的版本里面补
不存在这部分的问题其实我觉得这可能跟我们刚提到上游世卫的防范与危然一旦我们出现了一个问题我们复了盘之后实际上我们很多时候还是要尽量在事情或者问题发生之前我们就把危险的这些东西先把它掐掉其实是一样的一个道理但这块需要你有个全局的思维而且你要
还有做好优先级有时候说这个投盲怎么怎么紧急怎么忙的话其实很难很难做到一些有条理的一些事情所以又回过头来就是为什么也是想就跟大家多聊聊这个上优先这块的这个事情其实也是就是其实我们可以一个比较更聪明然后更高效的这个办法来去来去解决这些这些我们常见的这些问题
我想补充一问一下因为刚才建设是从社区的角度说我怎么样保证我社区有一个健康良性的发展然后你是从工程的角度说我们如何把项目做得更高效或者是怎么样不要做一些重复的重复工如果我是一个搭便车的我作为一个白漂党我上游优先的动机在哪里
我觉得白嫖其实也会存在一个问题就是这个软件你拿过来之后你肯定还需要定制嗯就你定制的话你是是一次性的一个工作呢还是一个长期的一个一个
一个工作就是我后续我版本我除非我就不想升级了其实很多情况下大家都是走到这一步才会反思我是不是可以换一种思路来去做这个事因为以前的话大家都可能都想了我修改我本地代码其实是最直接最快速的其实我今天中午一切也跟同事在那聊他们在做 redis 的这个修改这样就说我在公司内部在修我就怎么快怎么弄然后活也比较超
现在我跟他建议是说你们为了能有一些上游的这个经历影响力啊或者是那有些 visibility 的这些事情你可以把之前的这些 patch 就是贡献给上游但对他们来说的话哇那这块我得还得琢磨琢磨我得把我这个东西改得更好一点这样才能才能被上游所以你说服他们的这个这个理由是什么呢其实是这个是双向的因为因为他们是主动来找到我就是说他们想构建
影响力因为你要做云服务的时候就是你对这个软件的这个掌控力其实是很多时候我们是最简单的衡量指标就是说我有多少社区的 committers 这个就是一个非常典型的一个指标那在这种情况下那很多人想去争取社区席位他需要通过在社区里面做贡献那我们把之前的我们的一些修改然后贡献上有其实这是最直接的一条路
只不过说这条路其实要走起来它也是有门槛的就是本地的这种修改它可能是一次性的这种修改而不是说可维护性的这种代码这种修改就导致于他要再往上游去做的时候呃
贡献的时候它其实是需要付出更多的一些努力然后让它更好一些对对对但这块从你整个的这个软件质量来说的话其实是有很大帮助因为如果它不走这步的话大家其实隐姓欠下了这个债的话其实很多时候是看不到的只有这个版本再进一步升级但升不升级这个版本有些时候那可能就研发自己也说得算或者呢如果它没有受到那个压力受到那个客户的这个压力因为客户肯定是想用最新的版本
其实我觉得我们这块就跟很多人聊聊发现其实很多时候就是都是客户要求我要用现在社区里面最新的好像是 4.5 你现在还在用 3.2 是不是又可以升级客户让你去升级然后你突然发现我靠我要花两个月花三个月再来做后面社区里面出 5.2 了那我还要花四个月五个月才能做这个事情这个时候才才意识到自己
还欠了很大一笔债那在这个程度上这个时候跟他讲上游线可能他才会意识到这个的价值平时的时候他可能就看不到他带来隐性的一个负担你这个问题其实是我想反驳一下你想为什么我们叫上游游线都让河流上游往上走是逆流而上它本来是件难的事难是正确的就是你送流而下很 easy 很简单
你说的那种搭便车也好或者是人家用开源 Fork 一个大部分人的选择不用思考不用理性的去做按照你本能走就好了我们现在坐下来三番五次的讨论又是许可了又是工程了又是苦口婆心的说是个经济利益了或者是各种的我们就是让大家往正确的方向走 upstream 是你好我好大家好都是有的但是这个事情难
不仅是要通过各种各样的手段甚至我们会如果你是企业的话我们还规章制度去说平时工作就在上游 Based Upstream 通过这些制度或者这些激励的方式去做这个事情因为 Upstream 这个事情本来就是难的事就很挑战性的事所以说你那个问题是我觉得是问反了就是我们坐下来
苦口婆心的摆道理讲各种各样的故事就是为了让大家去往上走其实有一本书叫《上游思维》《上游思维》的第一部分就讲的人们为什么老是在下游挣扎就是他那个举了个例子就是说两个人在这个冲游嘛玩了上游飘下来这个小孩他们俩一直捞小孩
然后有个人说你先捞着这么咱俩这捞不完我得去往上游走看看谁把这些小孩扔下来的我都把他干翻对我们应该先聊聊这个张宁其实提到很好的话题就是我们会遇到什么样的大部分人是就老是盯着上游天天修 bug 对吧我觉得这个其实是比较难直接说就是说就我们排病步骤就是我们
我们我们基于开源项目来去做一些改造然后去做线上的服务或者是做这种企业版那一般来说大家会觉得我把代码直接拿过来其实是最直接的一个手段但他他拿的是某一个时间段的一个 snapshot 这个代码其实他是在不断的演进的你从拿 snapshot 的角度上来说好像你直接这么一个操作
是最高效的那我可能我是省掉了那个从零到一亿的这么一个过程但实际上你后续你还持续不断要去做一些改进而且你自己也改进其实会存在一些问题刚才我不也举例子吗就是很多时候大家都是图快哎呦我怎么快怎么来做但在快的过程中你肯定就思考的就不这么全面那就导致于我可能还会再给自己埋更多的坑那在这个时候其实我们能眼睁睁的看到你这样做是有问题
但很多人还是这么来做因为这个是最直接最快的我们现在是倡导的是说
对这些软件做改造的时候实际上你还要盯着盯着它也在不断眼睛的那个上游那个版本我们最好能跟它在一辆车上就是我能把我这边修改能变成它的一部分那我这样持续眼睛的时候我们就是可以共同的眼睛我就其实我是更想去搭这个顺风车而不是说我自己费力的去把所有东西都照一遍我觉得是一个比较聪明的搭顺风车的一个办法
但刚才先生这边也提到提到的就是说大家要有这个转变其实是很难的因为它很难做对很难做这两个关键上对比因为它是动态发展的你不走到内部的话你可能看不到你自己的这个缺失而且很多时候是被你短期的这个视角所限制住
而且还有一点就是大家对开源这个投入的也是一块的这个事情因为我们也接触到一些看法就是有些 leader 会觉得我们又不是做慈善我们做的这个东西还被很多人打遍车拿去用我没有必要去做这个事情但我觉得他反过来如果真的算好这笔账的话实际上就是对我们这张的 leader 不配做 leader 对
它工程上的债务或者是他们其实工程上的债务其实它很难显现化出来我们提了代码然后其实如果因为大家平常都比较忙然后都会觉得这块不是我来维护我不用去承担这里面后果很多时候我们可能就顺道点一下 review 就要 pull 掉
但如果你真的是到开源圈里面的时候大家为什么对代码都会看特别看重其实就是说你如果是挖了坑因为做 Maintenance 来说你把别人代码合进来之后你就要对代码负责所以一般情况下我们会特别小心就是会反复的去考量会去想他这边就是提代码提上来之后会很仔细的来做 review 如果是真的埋坑的话
一个是给自己找麻烦,维护者自己找麻烦另外一块的话就是提这个 patch 的人他自身的 credit 也会受到一些质疑他后面可能再想再合并代码的时候也会比较难一些所以站在这个角度上来说我觉得就形成了一种合力就是说大家都会特别特别在意这个代码而且这也就是说造就了我要往上游核代码的难度
就是这块主要我觉得还是因为大家希望要去做一个相对来说比较长远的一个代码的维护这里面但凡有些不好的东西的话其实都是会被记录下来不管从文化角度上面还是
从工程层面上面大家都会在这块都会形成一些共识而且相对来说不会现在就是在企业里面就是阻力那么大因为如果大家都在做开发项目的维护其实这个道理是很自然的根本都不需要教
就是你在里面摸爬滚打两次之后其实你就会意识到但是如果你一直在做下游的这种开发的话其实你很难意识到上游线的这个好处或者就是说这样做的这种破解性刚才我们就讨论了第一个就是在我们正常这种行动中上游线它会遇到的一些阻力这是其中一些阻力
还有别的主力这个原因很多就是因为送溜而下是容易的刚才江林老师其实也提了几点比如说首先是一个他的这个 community 的归属感就是首先他是不是认为自己是一个 community 定位很重要身份很重要第二个就是说认知不足工程能力不足就是没有欠这种概念就是种园的自己占便宜
其实是你 fog 下来第一天第二天没跟上其实就负债了另外一个就是有的时候创业公司或者是这种项目压力减长产品上限周期短对这种非常常见对其实是给自己多挖坑最重要就是说都有这种许可的认知
大部分像就像你其实你刚才说的我们国内很重要的一个问题就是出口才做合规了盗版就是闭源的这种我还框框的买卖别说你开源了
因为开源它本来就是说没有预场发现或者这种约束性它本来就是说的就没有合规这种意思我不喜欢他们翻译成合规那是法务的 compliance 就是忠守大部分人不忠守许可看都不看我见过十个程序员有九个半不知道啥是
许可解释不了我拿来好像不用复折这是他们第一的感觉对囊扣了 90%多原因对基本上是这个东西对比如说没听过我们博客的这也算一部分就是从认知层面是一个另外一个从工程角度来讲我现在有一个着急的任务我大干快上
至于说后面的事情以后的事情就以后再说对吧以后这越积越多现在更多了我就更没有动力再去处理它了那就老累了对反正我也怀不上了对老累而且还有一点如果你在企业里面这个屎山维护不了了大不了配个斗杆反正我也不用管了没错反正这也不是我留下的对吧
债务多了就会变成老赖嘛这是很正常的这个是哪都一样那我们反过来说大家假设很多人啊这个无论什么角色就是我们对所有人都在讲我们一定要上约先
从你们的角度来看我如果要去做商业线这个事情假如我这个白嫖党就是我有什么动力我可以去做这个事情这不可以给大家谈其实你要破坏破摔的话那那那那就没什么好说了但我觉得稍微动力一点的话其实主要大家很可能还是要有意识就是就是我们跟开源项目之间的关系其实是一个有机的反正我觉得今天我们不吃饭的时候其实聊的就是这个这个参与嘛就是这个嗯
participate 这个我觉得卡勒斯·鲍德温教授就是设计规则一二的作者他给开源做这个事情就刚才江领老师你提到他叫共生他用的是生物学上的共生他是从那个互补原则过来
我们见到自然界有很多共生现象比如大鲨鱼让小鱼去给它张开嘴去剃牙或者珊瑚有什么这种企业跟开源是一种共生关系对我打断一下我跟你提一下其实在这个过程中就是说我们并不是说是单方面的一个索取其实是一个互相的成就的一个过程在 maintainer 的角度上来说其实比较痛恨 folk 比较痛恨那种
私有 Bridge 的一个其实我们已经花了很大力气在去营造这样的生态然后我们以一个最好的一个
协议可能就是阿巴奇许可协议就比较宽松的一个许可协议你可以做商业化但是你需要把你的 case 你需要把你的那些 bug fix 反馈到商用来这样可以让更多人受益其实在这个角度上来说的话其实我是一直都在推向商用优先刚才您说的站在对立面来看的话可能大家会觉得麻烦
或者我就是跟你整个生态是隔离的就是我只是说单向的来获取我不跟你有任何的交互所以在这个层面上要打破这块的话我觉得是让大家能够发现我参与其中的好处到底是什么样的就这块我可以讲举几点其实也是今天我们同事中午吃饭的时候聊的其实他们有在商业社区
建立影响力的这种诉求其实这个就是一个很直接的让我们能够紧密协作紧密联系在一起的就你需要这些 patch 或者就是说你能成为这个 computer 其实都是你通过做贡献积累起来信任然后能得到的那在这个过程中其实就建立一个非常下上非常非常正能量的一个机制其实也没有什么其他的办法
因为我也不可能直接给 C 钱我就能拿到这个 Committal 这个权限那这些东西而且大家都能看得到而且对整个社区都是有真相帮助的这块我其实因为在企业里面我接触到很多就是做开源的这个工程师他会把他们的项目当成是自己的作品
这样就我觉得他不会去写 13 代码因为这块是别人都能看得到的后面找工作的时候我还指望着这个能给我加分的重点江年老师那个思路程序员或者是工程师这个职业生涯去谈谈的条件不多尤其自己还不懂法都不知道自己跟公司签了一个什么东西合同比如说
我见过的 90%的同学不知道自己业余时间写的代码算不算公司的财产这个 anyway 这个法律意思就不说了就是
然后我说为什么要 upstream first 你为了你的职业生涯因为雇主是可以换的我们现代社会虽然说从事一件事情很多不是主动选择的但是慢慢有培养这种意识我这要就花了几十年我做了一个项目或者是你看李纳斯人家一辈子就一个项目叫 Colon 三十几年了这点对的其实我们工程师你能够玩一个十多年以上的项目太难见了要想让
自己想工作的项目长远点,up-seeing first 是最好的选择你把这个,如果你的是满足市场需求的你这个项目你应该放到 Community 上,公开的地方它的生命周期是最长的对,这是一个非常重要的,就是说你从个人职业生涯当然是 credit 或者是被别人夸张或者是这种展示技术这些其实就是这是送对的然后这是一个角度,但是我们当然有换一个角度换前面角度我经常听大家
你能不能来给我们搞一个 Kubernetes 你能不能把安卓这种项目给搞出来大家都看到这是一个结果 AWS Google Cloud 阿里巴巴华为在共同去维护项目这是一个前所未有的有利害关系的商业竞争在维护同一个项目我们放回到这个项目本身假如你的公司要
做出一个这种划时代的标准的项目出来你单打独斗估计比较炫对我们经常讲说是开源怎么说很容易其实是开源对所有的公司就是商业公司都是一个挑战性的东西因为这个东西你不是你拿钱能做得到的大家会看到商业公司开源出来的项目极少成功的
但是它成功的你环归它它分析它的原因都是有 upstream first 基因举个反例举个反例不成功的不成功的太多了就是分裂的那种算吗分裂的 BSD 嘛
多优秀的公司多优秀的大学多顶尖级的教授然后才最后把 BSD 放列成多少个 BSDFreshBSDOpenBSDNetBSD 对我觉得你但凡你想想两个 BSD 能融合在一起那我就可以更有力量去跟 Linux 去抗衡我们看得到 Red HatGoogle 对吧这个 Red Hat 它做的 Linux 发行版无处其有
18 年被 IBM 花 365 亿美金收购那也是史上最大的软件交易了到现在成了 IBM 整个营收的顶梁柱你会看到这 Red Hat 的 upstream 提供的这些像 Linux 里边或者是 Kubernetes 里边或者是它的自己的那些 AnswerBot 什么发展的新兴项目
就是这个有点积攒的原因我们做 OSPO 要做盘这个阶梯嘛就是你是不是一个软件的开源软件的使用者然后你能不能去参与一些有没有能力去
贊助一些活動或者什麼我可不可以自己發起一些什麼然後你或者是你做一些領導這樣就是這個台階往往大家往直頂的就是老子看到人家那個領導者你首先你一開始你沒有什麼信任然後你就向讓了比如說我賣個我建設開發開源那個項目你過來給我那啥憑什麼
你原来你不帮过我我过来帮你他始终这个社会或者是 community 他是一个你帮我我帮你最后叠加形成了一个新的这个他是一个 network 一个 social 的网络新人的建立是需要一个很漫长的过程从企业的角度来讲你没有 Observance First 这部开源战略你想都不用想了那那个国内的公司死了多少开源项目我见过太多了我就不这个国内的不好说那就举个国位了比如说 VMware
CloudForge 对吧当年多火呀是吧但我觉得它是正常的那个技术迭代但是它在竞争中 CloudForge 也风头无量从我们 Upshift 的角度来讲就是说一个公司在原来没有任何的这个就是在 community 积攒的 credit 也好或者是品牌也好
你贸然开源自己的项目风险是很大的当然那个解释失败的项目呢有好多角度了那是另一回事我只是从我们这个但我觉得可莱坞方圆也可能会存在一个就是当时他也没用到容器技术怎么就你可能用虚极啊或者什么的就是并不是很标准
就跟那个 OpenShift 其实最早的时候也是自己在打只不过是 Kubernetes 出来之后在撕的时候他才去递来过来我觉得这个也是逐步逐步去去加深这个认识逐步逐步去深入了只不过我觉得 CloudFoundry 好的是说他可能站在那个应用自服务的这个角度上来说我觉得他
这块可能走的会比较好其他也走基金会啊怎么是后面就看看走下坡路对正好我这里插一个问题啊其实那大家怎么看这个这个分叉的问题国内到不了分叉这个阶段对对对国内分叉是一个项目活起来这种分叉
我给你举个例子嘛大家知道安教育的是 07 年开源的对吧 007 吧谷歌收了他之后不太久嘛然后你知道他的风差协议是什么时候发的吗一几年吧我记得对 14 年一几年反正是一几年之后他经了七年之后才开始有人试图去放练他一个项目火起来才可能有方
不要想着一开始没火就开始讽刺这个是个阶段性的问题不好意思你接着你那个话题这个有点扯远了我们还是以 License 这个例子如果去面对这个问题有没有更好的一些这种建议和方法或者有没有一些这种类似于方法论的东西我觉得是很原因为什么会分有些时候可能是理念什么但那个 License 许可的话其实就存在一个明信
就是来自那个是商业利益上的东西对对对但但很多时候因为他沉他也是靠社区嗯起来的是我只不过是当时他要去做这个来生是变更的时候他肯定要去做一些衡量我因为我变了之后我可能对社区会有些影响只不过他觉得哎我是主力开发就是这部分的损失我是能够承受的而且
社区里面有很重要一点就是一旦分达产生了之后就谁是又变成上游对这里面其实有很重要一个考量就看谁跑得快
如果社区它一直都是跑得很快的话其实不太容易存在这块问题因为以前的话就大家都会觉得社区里面给它的 patch 都是那种小的并不是说这种很大 feature 的这种 patch 所以我觉得评估起来这个是比较容易的但你像 open 社区后来成立 foundation 之后实际上就会存在着我是不是能吸引到社区里面更多的人参与其中
那在这个过程中实际上就是可能也会有达成之间也会产生一些协同协作的这种情况那这个时候可能就会有些逆转
而且 ES 后面又要改 license 其实是因为 OpenSearch 去承认基金会之后我觉得他自己也着急了而且这里面也有一些研究我要看的也有一些研究就是会看我觉得 license 可能就有点像宪法一样的那种感觉就是十分肯定大家一个 K1 项目的成功全靠许可会基于这块就是你能
召集一波就是认同对它是个组织问题而且在这个过程中就是你怎么能让有商业竞争的公司能形成合力这个是一个很有意思的一个问题如果我让他们斗得很厉害的话其实那可能只会有一个如果相对来说就是大家都能获利那我以什么样的方式能更好的去服务客户就是让他有一些差异性的这些东西的话
我觉得这里面就是还有太多可能在 License 之外的这些东西我觉得是这可能也会偏人性一些的我觉得我们还是按具体的例子来说会比较好说一些比如说 OpenOffice 当时被 SAN 收购的时候
不是导致了一次分裂吗然后 LibreOffice 就开始出去了然后那波人就怎么样现在基本上 LibreOffice 已经非常成功的项目了其实它只要能持续的能迭代就会好很多其实你说 OpenOffice 后面就 IBM 很多人然后又捐到阿发奇他还活着但是肯定没有 LibreOffice
那么活跃有生命力对其实我们现在反过来其实我觉得可能要去看依赖社区是不是慢慢的很多人就是开始拥抱 Open 社区依赖社区它可能它这边的迭代可能就没有那么快我再换一下我这个问题比如说你看 OpenOffice 当时它做决定的时候其实跟很多企业过程非常像
有些功能非常好你看看我的商业客户都在用这个时候我到底是把它把它闭完掉呢还是把它开完掉如果我把它开完掉我可能会损失就是一些经济利益如果把它变掉我可能会在社区里边或者是在这个开源这条路上会走的越走越窄
国内也做数据库的啊做这个什么的哎我现在免费给大家用啊就是开源的方式大家用大家都用好了都觉得很不错我的下一项功能比如说我这个集群管理的功能我认为这个功能只要你是大厂你肯定会用对吧因为你小厂你也用不了到集群那个规模现在你上了集群了好我把这个功能变了收费了然后这个时候会产生两个结果就是要么我这一波操作成功了我我开始做我的商业上的事情要么我这一波走走差了然后就像
那个也是或者 openoffice 他们那个路似的然后有一波人出来说我们他其实不是那个差异性他是靠 license 他要去做新的了我还是不敢 license 我就说我把这个功能我拿到我这个开源部分去或者说我就不放在开源部分去他这个会不会导致我觉得这个要分成两块来看就是一个你去改 license 你可能会动就去动根基对就方列它是个常态
对就是分裂从你们角度来看它是好还是不好吧肯定是不好的任何分裂都是削弱这个项目本身的力量的东西所以它就有备于那个 upstream first 这个理念了对吗没有啊 upstream first 跟这是两回事那你把分裂之后那谁是 upstream 不是反分裂我们要反分裂你分裂了之后就是众多 upstream 了就是它的 original 多了就是我给你举个武侠小说
不管是精油还是骨肉或者都会去讲比如说尤其是消耗江湖对吧化山因为气中和健中对吧因为这个你练气的还是练练练健产生不同那最后就是我发财我的你发财我的过两年我们就 PK 对吧本来合起来
合着都受益嘛一封那绿绿肯定削弱本来这项目就可能就是你满足什么需求市场迭代这么快我们做开源项目也好或者是做什么要一定要从一开始就尽量反分裂实在没办法了才为了什么退而求其次比如说就像你说的 Oracle 靠城市开源杀手嘛那不管是 off office 也好
还是 MySQL 或者是各种它都最后搞出一堆分子来反方链处理的最好的是从源头上去做的就是立宪法的时候立 GPL 的这种除非是原作者不维护了大部分的 GPL 项目不会
产生分子我们要做的是你要把分裂是一个 downstream 去做一些事情它是个正常的我们一定要反分裂不管是通过许可还是构建 communitybuild community 对吧你通过文化或者什么东西去把这种然后还有这种商业的这种平衡
大部分你看出现像尼加斯特社区这种是因为上市公司有了严肃压力或者是这个就很可能会伤害到 community 对这是很正常的还有一些其他的比如说像如果太大的话比如说安教育的它是通过建立联盟建立反讽的协议通过制度通过法律通过各种各样的各种条款来去约束这些东西
总而言之就是我们要做到文语筹谋的,弹出一个 Observable Spur 的情况下,我们要去反分裂。分裂是一个正常的东西,任何项目都会分裂,如果你不去做的话,今天一个我 fork 一个我,我每天看不惯你,后天我天了或者是我,都会产生。GitHub 上我们那一介三连吧,watch fork star 对吧?
当你看到 fork 的很少当然这个比例不一样了你点开 fork 去看有多少是回来的那意味着每一个 fork 都是一个分裂的碎片化的
重要的是这些 fork 走的之后能不能把它的 patchmold 到最原始的这个这就保持力量的能够统一我们要通过各种各样的东西去防止这些东西而不是说任由它变我们经常有一个对开源 community 有一个误解就是这个东西是个自然而然发展的不需要去人为介入的或管理治理的其实不是你所有的成功的开源项目
都要反分裂都要通过制度或者是其他的各种各样的东西去动作去不要分裂一分裂大家都完蛋这也是一个认知层面的大家意识的比较少比如说分裂是一个很正常的现象其实我也这样认为我私自用了我就不想上这不很正常吗
对呀这是正常的但你站在维护者角度上来说的话我就失去了一个战友我就失去了一个就让软件能更进一步迭代的这么一个机会其实我是比较痛恨这个情况但是也没有什么太多的一个办法有办法很多首先第一个是许可不不不这个是存在的很多人他不愿意去做这个事情我不可能我们不管那些人我们要关心就是能够拯救过来的你比如说安卓就做到了反正
反方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方
你别管他是强了还是怎么的他做到了他把那么大的项目各种运转厂商过来参与的项目他没做他做到了你分裂不走或者是你只要分裂我就有办法去弄你随便话是另外一个话题但是他留了很多控制点可以通过协议来去强迫比如说任何人都可以 Fork 那个 LSP 的东西那个 Kernel 对吧
当年谷歌也干过这事当年出安卓的时候谷歌封了一个 kernel 的分支过去他们自己维护过了几年又合回来了是因为当然这是个工程代价就各种事情他维护不过来了成本太高了这是一个这样的事情你有能力分裂
因为我们要反分裂就是你一开始就要想得到这个事情不是说难我说作为个人个体的话就是说那你就选 GPL 对你要没那么大能量比如说你不是国家基金养理的领着高薪的国务院津贴的教授你就不要去选择学术性协议学术性许可比如说 MIT BSD
选这个人家就是过来炫技了
我不出吃穿我不在乎你们 fuck 不 fuck 你用我的代码就我是对你的恩斥我一向认为 MIT 是这种科学精神他们是人类的先锋是比你们所有人都聪明高端一点的那些才选择 MIT 普通人你还想要求回报你只要想要求回报你就最好选择 GPL 是最好保护你的那我衍生出来另外一个话题就是上游思维这本书里边它的核心就说我们要把事情防患于未然对吧
现在没有发生的事情那么他里边也提了一个问题说到底谁为这些没有发生的事情来买单的问题我为什么要为未发生的事情而买单呢那我可以举个例子啊大流行的时候新冠大流行的时候这就是一个所有人为这一件事情买单的一个非常非常鲜明的例子你每个人都受影响了我相信无论你是不是做 IT 行业的是不是搞开源的人你都能体会到了
核酸检测是免费那请问这个钱哪出的呢对吧现在是不是到每个人头上了就你刚才你说那个分裂不好我知道分裂不好反正我就是一个搭便车的你搞了好久了你有没有一些这种话术对话术话术麦克是这样我是作为一个开源收益者来去讲你想想他本身出现像我这样的人的角色他就本身是一个不正常的一个现象
假如说如果说你的理想状态下所有人都能理解 upstream 所有人就像我们的无同胞我们都说不需要这些解释者了这些东西恰恰是因为我们比如说有 100 个人其中有 95 个人是按照自己的颂语只有 5 个人去做这个事情
我们包括我们的播客是把另外的五个人也拉到拉夫逊这个赞扬里剩下的 90 个人人家就是搭便车的我们的目标是把这五个人拉到就是以理以推理以理复仁通过什么帮助通过制度各种轨度去大家受益我们人是很难理性的就是理性的思考或者是去对抗这些送其而然的事情
我们只能再劝几个人去做这个事情你不可能全部达成的开源项目里边 upstream 或者是生活里边的 upstream 那个思维或者任何一样的事情逆流而上总是难的就这个欠债来说比如说现在这个
经济会产生很多欠债的问题你会发现很多人的债务比你想象中的要多得多为什么就同样的道理大部分人也不会去想理财我见过很多包括一些诺贝尔经济学家德祖也会去大部分人不考虑养老的问题我们通过社会制度或者是社会法律社会文化倡导才能让一部分人做出正确的事情
所以说我们今天的博客也是早内能够被理解 upstream 能够受益的人你不可能全部的你放心吧或者说你想再多一点人都是有点那我们的能力我们的声音比如说我们在博客 500 个人听我觉得限天限地了 200 个人听可能都三年才能听得到因为我社会太复杂我是这么道理
讲的有点悲观了这个不悲观反正就是怎么说呢这个我们也说过很多次的确就是想让大家有一个很
很根本能转变还是挺难的我觉得不管从文化冲突层面上面还是大家做事的这种方式方法会有一些惯性思维在里面其实你要去克服那部分的惯性我觉得还是挺有挑战的很多时候如果大家不吃内亏的话他可能也不会意识到这块的重要性我们现在是度子度有缘人
对然后还有个就是市场也会淘汰市场是比较好的也就是说我刚才想到可能有几个方面如果想谈跟别人谈 upstream first 这个问题
你要么就是单纯给人不到我给你讲这个道理我讲这个好处要么呢就是这个如果是一个组织或者是有一个机构他会有一些培训或者学习也可以改变一部分人对吧或者让大家有这个认识再有呢就是那种大的组织里边他如果有一些变革这是有可能会把这个达到往前推进一步的效果的就是从我的观察来看啊组织的改革是最难的你比如说
我懂这个东西但是我们公司就是那样子的我们公司就是要把那个东西避免了或者说我们公司的商业逻辑就决定了怎样组织变革反而是在我看来是比较难的你们俩有什么体会吗有发现公司的寿命其实没那么长大部分还不如我们的职业生涯
你带过大大小小公司对吧我也带过大大小小公司就像开源这件事情或者某个项目你可以做很久你看很多公司它在下一个浪潮波浪里边它就废掉了所以说我觉得组织的事情不用我们操心你只需要给它北出像江林老师提到的工程上的这些
债务优势然后另外就是人才还有你在整个社会口碑 credit 就是你发展下一个什么产品战略的时候你有什么优势等等这些东西组织的认知我们作为倡导者只能把这些知识给人家摆出来怎么去解释自己人家听不听因为抢夺注意力事情太多了
它能变真伪这是两半你不用着急组织它市场会给它教训的国内的这些企业想要报开源我见过太多在跟头的了这还用说吗我觉得还是要就是它可能要吃个足够多的亏之后可能才能慢慢意识到这一点历史已经把它淘汰掉了只能是后来者去见解这些分析他们的失败的原因后来者原来那些基金们历史历史很残酷的市场也很残酷的
下一个浪潮去帮你拍了那么再聊最后一个话题怎么做才符合商业优先或者我们日常里边怎样才逐渐从言到行都能满足商业优先的标准或者要求往这靠我觉得一个核心就是说商业优先说大概好处能够让它显现化
因为我们开始给大家提到一个最主要就是你可能可以通过那种技术在的这种方式来去做一些很良机我觉得如果能把它能够显示化的说就说你现在钱在你要多少时间能还然后让大家能知道你朝错误的方向走下去可能是没有什么什么前途的我觉得是可能是一个路径
然后另外一个这的确也是一个偏系统性的一个工程前面讲了我们怎么去算账然后另外一块的话实际上就是在做的这些过程中得坚定这个方向是对的否则说很多时候是容易产生一些摇摆的我怎么快怎么方便我怎么来做
当然这个问题非常复杂了就是他到不同的角色不同的时机不同的方式当然我想尽量的给他抽象一下首先第一个是其实还是提高自己的认知无论你是作为工程师还是这个公司的机场要提升自己的认知就是我们当聚焦于一个事情的时候其他就看不到了如果一个人在知识层次比较单一的话
他不会想到很多其他的问题比如说他是一个假如说他没有法律理念的话他就不知道这是财产这个概念你如果是一个没有商务没有财务观念的话没有工程
他也不符合一个架构师的这种角色如果是一个合格的公司肯定是在有限的资源上去做有限的事情对吧那他一定会考虑到各种债务什么的这些事情你只有眼睛看开阔了你才知道 upstream 的益处第二个就是让自己能够闲一下比如说每天留个半小时读书和思考
人太忙了的话容易产生就是着急我们经常打个比喻这个一个人前面掉一根什么一直在奔跑他会所有的视线就盯着这个事情比如说我我就盯着 6 月 20 号要发布这个新版本
那所有事情我不管了最后一个就是说正式的制度固然重要但是那些非正式的东西可能是弥补你生活的更好的良机 CommunityOpen Source Community 在那个地方大家可以任意的发挥自己又放松又平等又能够表达自我又有才华你可以把这个展露出来它不是一个
正式制度就是你做什么东西都得写申请然后提供各种各样的东西要融入这种 community 这种文化和精神你要参与到这里边要去做一些事情否则的话那你就是我见过太多的人就是 just do my job 把领导干派的 KPI 搞完就可以了其实是非常危险的一种
你要在 comment 给自己留一点点余地那我最后说一点谁为这些未发生的事买单这个事情有的时候你会发现你如果是认真去做事情
你会是那个非常吃亏的人就比如说哎你跳到一个公司啊好他也十山代马如果到这个一个地方来大多数人我今天只管杀不管白管他明天洪水滔天呢反正老板要求今天要把这个事先上线了我们先把这事赶紧弄完啊至于后面怎么样你来后面再说就我的我的原则就是赶紧跑路
然后呢如果有一些东西是你自己做的我都按自己的那个高高质量高要求的方式去做那至少我不会给别人挖坑比如说我今天从这公司跳了走了完了后面来一个人跳过来接这摊事一看说这这前面这人谁呀王八蛋这搞的啥呀对吧不要理他这种这种事情我觉得这个是我现在比较坚持的一个原则就是
我可能不太愿意去承担一些那种给别人填坑的事情但是呢我觉得我不给别人留坑这算是一种稍微优先吗我觉得是有一些职业道德吧对的就是有的时候我看到这些事情就比如说这个你是在有下一个下一期博客了对对对我有一些话题我觉得每次咱们聊一个小话题咱也不要聊太大我觉得可以你说的这个谁在为开源美单或者是
我觉得这个是个不管是经济学比方科斯这种其实都有探讨过为什么比如说公园最后政府维护了公路政府维护了很多基础设施都给政府维护了就是因为你民众不足开源 community 也面临的问题就是说可持续性发展问题劳纳的科斯其实讨论过一个最经典的例子就是英国的灯塔你会发现总有搭便车的是的那最后怎么办嘛
私人到底能不能解决这个问题比如说咱一堆都是平民百姓最后能不能妥协解除这个问题能够解决的问题很少最后全世界大部分的灯塔都是由丈夫来问
这其实从是从工地悲剧衍生出来的一个话也就是我们政府要收税要搞这些公共基础设施其实本质上讲就经济学里边有一个说法是是对这个勤劳的人的一些课税然后就是你做做贡献然后把你做做的贡献拿出来去照亮别人这是经济学突然间我看到一个在我们以后再聊这个话题
对我觉得你弄了一个很另外一个更大的问题你知道吗就是这个方法问题就是你的付出跟回报的问题你的激励问题或者是等等这些问题我觉得你可以下期再找我聊聊非常好的一个可以深挖一下对对对特别好玩尤其在开源里边我们绝大部分人都认为就是说我在开源里边那个付出跟回报是不成比例的对很多人都有这种想法和
但是你会发现做的好的都没有这种抱怨虽然大便车的人占绝大多数按理来说会做开箱的人会越来越少但事实下想法你现在看到那些好的开箱项目依然是很蓬勃的所以这就是他有意思的地方我觉得有一些他能给你带来的情绪价值还有个人生育层面上面的这里面其实很多是没有显现的衡量他不是说看你赚多少钱
就就能这个话题待会我们以后再说我只是今天到最后收回的时候想到挺好的想这个事情 upstream first 是一个很反自觉的问题就像我给举个例子就是你现在想打出最有力的一拳不是拿着拳往前跑而是退后一步蓄力对
对就是说 upstream first 看起来好像你吃亏了不是的你是受益者所有的 upstream 都是受益者对本期节目的一个深化点我们倡导这块的话其实最主要的目的还是让大家能够顺势而为我觉得最初就你要融入到上游会有一定的难度但从长远角度上来说的话其实对大家都有好处那要不我们今天就录到这里好感谢大家时间感谢大家
合同自聊拜拜