Apache SkyWalking创始人吴晟:开源如何国际化
The following article is from TGO鲲鹏会 Author GTLC
会上,Apache SkyWalking 创始人吴晟发表主题演讲《开源如何国际化》,以亲身经历和实际案例,深入浅出地分析了做开源项目需要思考怎样的问题,以及需要调整好怎样的心态。他表示,开源不仅仅是技术问题,更是社会学问题、人性的问题。
以下内容为演讲实录,TGO 鲲鹏会编辑整理,有删减:
很高兴在这里跟大家分享自己在做开源的一些经验和经历。对于全球化的开源社区而言,会如何去做,选择什么样的策略以及什么样的心态。
我来自一家北美的公司 Tetrate。我自己是 Apache 软件基金会的董事,Apache 软件基金会的会员,孵化器的导师,做过一些大家可能用过或听过的项目,比如 SkyWalking 、APISIX 等。
讲到开源项目,这些指标应该是大家最常见,或者经常听到的。但是我并不在乎表中的数据,我更想说的是这个题目,就是所有的东西仅仅是一个数字游戏,不要相信上面任何一个数字,它对于开源项目、开源社区来说,比所有的代码、功能,所有你能见到、听到的东西都要假。所以这只是一个 Game 。如果你觉得它好玩,看看数字、曲线挺有意思,没问题,但是不要过度相信这些。
可以告诉大家在 2020-2021 年整个疫情期间,我们在全球大概有 30-40% 的指标增长。但同时要告诉大家,SkyWalking 没有任何一个运营的同学,没有专职的运营活动,甚至因为疫情没有在中国组织任何一场关于 SkyWalking 的活动。
SkyWalking 作为一个 APM 项目,实际上是非常矛盾的存在。因为它既有所有的中外 APM 厂商的帮忙,同时作为一个开源项目,也会挑战所有的商业 APM 产品。在中国大家能听到的 APM 厂商、APM 服务,都有 SkyWalking 以前的共建者参与,甚至有最早参与的核心共建者,现在在各大云厂商、专业厂商的 APM 团队里面。同时如果你想要让你的商业 APM 卖得好,那就至少要过 SkyWalking 这一关,现在你可以见到的所有的大厂里都或多或少有 SkyWalking 的部署。你会发现我们在国内几乎没有任何的市场行为,因为实际上已经在绝大部分的用户那里完成了部署,他们自己在迭代。
这是我们在上个月抓取的 SkyWalking 在 Apache 官网全球访问情况,中国肯定是最大的,放眼整个 Apache 基金会也是中国最多。所以中国是开源软件最大的使用方,但是截止到目前为止,还不是最大的贡献者,甚至远远达不到排名前列,这是我们看到的现实情况。所以 SkyWalking 在全球会有非常多不同的用户,也会有不同的商业化公司。国内就有好几家在做 SkyWalking 商业化的公司,我知道在英国也有,南美也有,包括我们自己在北美,会有不同的公司在不同角度上做着 SkyWalking 的商业化,这也是我们作为社区希望见到的情况。
刚才的很多图表、数字看起来很漂亮,整个这件事情我们是怎么去做的?SkyWalking 的创立大概在 2015 年,很多人可能认为它本身只是一个娱乐性项目,没有任何的商业目标,只是为了解决我们平常遇到的一些小问题。从 2015 年以来,我们会有怎样的深层次逻辑?如果要做一个开源项目,可能更要想好这些问题。
第一,做所有的项目要有一个好 idea ,需要解决一个共性的问题。 为什么很多的开源项目并没有很火,或者很难发展起来?可能你解决的是一个非常小众的问题,就会导致不会有很广泛的用户群体去使用这个项目,自然不会得到很大发展。你的项目是否有共性,决定了你以后能否走向一定的高度,但有共性不代表就一定能够成功,因为这个赛道上会有很多人。 比如说在 SkyWalking 发展的过程中,会遇到各个 APM、云服务的厂商,都可能是竞争对手,或是合作伙伴,亦或两者兼是。
第二,当你有了 idea 之后,首先要给自己设立一个很明确的目标,时间周期会很长。 技术不是一个 C 端的产品,不管你烧钱也罢,做运营也好,永远会呈现这样一个曲线,不会是非常漂亮的爆发式增长。因为这是技术的本质,所有的基础设施软件,都需要不停的试错,不停的更新版本。SkyWalking 正在发的版本是 8.9,开始的时候都是以 1.5-2 个月的周期去进行更新,从最早的 1.0 到现在的 8.9 ,我们计算过,内核大概被重写了 4 次。你今天在用一个基础软件时,感觉到的成熟、稳定,以及非常良好的设计,是一次次被试出来的。要对时间有心理准备,不可能在一两年之内变得非常流行。大家所熟知的,都是经历了好多年熬出来的。
在开源工作的时候,会有我们很常见的工作流程的区别。这是大家在绝大部分软件研发过程中,甚至是中国绝大部分开源项目里所执行的一个环形逻辑,开发、测试、发版、宣传,最终用户需求,根据这些需求再做迭代,这是常规的。你去上软件工程的课,老师会告诉你始终是这样循环,无非是发版周期从一年变成一周。短周期迭代也好,微服务也好,开发运维一体化也好,不论用什么手段。
开源社区去看待一个软件的方式,首先会有超大规模的用户群,所以这些用户会面临各种各样你可以预期以及不能预期的问题,他们有千奇百怪的使用场景。其中大概 5%,甚至更少的用户,会选择来跟你共建开源软件。所以当他发现一个 BUG 或一个需求,会来提交一点代码,从而把软件变得更好,渴望把这个变更推到上游,来保证以后不要因为这部分的修改而造成冲突,这个比例很小。所以在这个过程中会面临非常多的功能提交。
而这个过程中,有 10% 的人会认为这个软件对于他的日常商业运营至关重要,所以决定把开发人员、核心架构师,投入部分时间专职进行开源软件的开发、维护、管理工作。这些人会变成 committer,一般会专注于技术和功能的导向。这其中会有大约一半的人,会站在一个“会技术的管理者”的角度来看待这个项目,为项目设计的以后规划,设计长线任务。比如在明年大概一二月份的时候,大家会见到 SkyWalking 自己原生的数据库。它的规划可以追溯到 2017 年,来源于我们 PMC 的讨论,经过深思熟虑和很长时间的设计,才决定动手。
所以这些 PMC 们会更关注项目和谁集成。包括 SkyWalking 现在也正在和青云的 Open function 框架去做集成,这也是我们 PMC 在负责的事情。他不一定来自于特定的机构,可能来自于任何一家公司,但是他是这个项目的 owner ,要控制项目的发展,要为这个项目以后的迭代去做出指引性的方向。所以 PMC 的全称是“项目管理委员会”,承担更多的是管理性的职责,而非技术职责。除了刚才功能性的,要管 license 的匹配情况,IP 是否正确,能不能接受第三方的捐赠等等,比如说大家现在见到的 SkyWalking 的 UI ,实际上是在 2019 年前后,DaoCloud 捐赠给 SkyWalking 的。所以整个过程中会有非常多的变化,而更多人的加入,会给项目的方向带来更多可能。
所以,我作为项目的 founder,可以去休假,可以从项目里消失,也许只是短暂的,但是至少项目日常的 review 跟我没有关系。大家会发现我可能很积极会去回消息,因为我有时间,但并不代表一定要我去回。会有很多的人在看这些,甚至 SkyWalking 会有 30 多个子项目,都有不同的 PMC 在控制着这些子项目的日常管理以及对外集成。
第三,这是你在做一个开源项目里面非常重要的一点,是否能做到 ownership 的转移,以及 share。这项目不归你,也许你可以永久享受这个项目的 founder 这样一个 title,我会为这个称号感到很荣幸,也很高兴我曾经创造了一个项目,能够让大家来使用,但是也仅仅如此。这个项目今天能做的一切,以及十年后它是不是能活下来,这一切仰仗于其他的人,而不是作为我个人的项目。
所以,这也是所有的核心思想,你需要把代码的所属权放出去。 在做开源项目从最开始的第一天到整个发展的过程中,这是一个非常重要且最容易被忘记的原则。开源是全球化的,有非常多的项目是在全球化的过程中慢慢迭代出来的。所以,不要开口闭口我要挑战谁,我要取代谁。 一个成功的开源项目,能够屹立到今天,它一定解决了某个特殊的问题,并且适合于解决这样的问题,才会得到用户的拥戴。作为一个新项目,如果还没有了解这个领域中的人是否希望通过你创造的这种方式来解决问题,以及是不是全世界的每一个地方、每一种场景,都适合用这种方式,而先考虑到要取代某某,成为下一代某某。请问,这到底是对别人的挑战,还是在侮辱别人的智商?
全球的开源用户都是职业开发人员,不会随便因为某一篇文章有多高的阅读量,或者一个简简单单的指标,就选择这个项目。如果出现了这样的情况,仅仅是因为选择这个项目的团队不专业,但是我们在全球市场来看,这种现象是不会存在的。
所以你要先想好是不是开创性、创新性的解决了某些问题。我们在中国非常多的领域都创造了一个词,叫做“弯道超车”。我们一直在说这个词,但是有没有想过这个词的背后逻辑,为什么它可以被“弯道超车”?因为它不是顶尖技术领域,它是成熟行业,你已经知道结论是什么样子了,所以我不需要再经过中间的苦难,因为我是后发的,所以能够做得比你更好。但是开源软件是一个基础软件,意味着一定是长久以来就存在的,新的创造只是为了解决新的问题。所以当我们去做创新的时候,你一定要明确你的创新,是不是足够具有原创性,是不是能够解决更多的痛点?如果是,你才有机会去做更多更好的事情。如果不是,你的开源项目更多只是一个玩具,也许是市场部门宣传的工具,是一个面向 VC 融资的工具,但是不要感到惊讶,这样的项目不会是全球性的。
在讲到中国的时候,我们经常会提这个词“performance”,从双十一到后面各种电商活动,大家讲得最多的是“流量”,我能够承载多少的流量,我这个技术能够解决多少流量的问题。是不是技术创新?绝对是。但是在开源上不一定行得通,为什么?因为绝大部分的公司不需要解决那么大的流量。
我跟大家分享一个数据,SkyWalking 最早设计的访问流量,我们收到无数的用户反馈,“请问你的界面为什么是 0 ?我明明挂着应用、挂着监控的。”我们后台查用户数据发现,它不够每秒访问,不能够显示小于 1,所以只能显示 0。所以现在可以看到的是每分钟调用数,因为绝大部分的系统,大概能做到每分钟至少调一次。这是我们面临的真实软件环境,大家可以想一想自己的 IT 办公系统,自己的运营商银行系统,真的能做到一秒钟调几万次吗?也许当年流行抢红包的时候,在那个瞬间是可以的,但也仅仅是瞬间而已。
所以性能绝对是误导了绝大部分开源项目的一个点,所有的东西都在讲我有多么强大的性能,你可以去看 SkyWalking 的官网,我们根本不关心这件事。但是不关注性能,不代表不关注设计,我们不能设计一个软件,说这个软件以后优化的可能性都没有了,这是不对的。但是请不要把这个东西当一个卖点,因为它真的不是。
每次讲到开源在中国,就不得不聊这个话题。开源不是慈善,慈善是红十字会的事情,不是开源社区的事情。我们经常在开源社区会听到一个很有意思的说法,你写的为什么不帮我?但是你要知道最常见的一句话是,请问我为什么要帮你?我的时间也是时间,我的时间可以挣钱,可以玩游戏,为什么要帮你?这是一个很强的依赖吗?不是的。 很多人觉得你的开源软件只有两个用户时,这两个用户确实挺珍贵的,你想从这两个用户获得最直接的反应。但是当用户量达到几万、几十万的时候,每个用户就只是一个统计数据而已。
所以当你看到一个非常开放、庞大的、成熟的社区时,不会关心在你的私有环境里有没有遇到问题,只关心项目有没有遇到问题,是不是一个共性的问题,以及你是否愿意来修复这个问题。SkyWalking 上如果你提 BUG ,我们会告诉你,这是一个 BUG,欢迎你提交,如果三天内你不反馈,我们直接把这个 BUG 关掉。逻辑是什么?如果只有一两个人提交这个 BUG ,那么它就是一个不重要的 BUG 。如果有 20-30 人提交这个 BUG,大概率这 2、30 人中有一个人会决定采取行动修复它。所以我们见到一个 BUG 不需要被修复的时候,它大概率也不是一个什么严重的 BUG。
可以举一个典型的例子,SkyWalking 里面有一个 gateway ,大家一直在提 BUG ,我们就是不修。逻辑就是,“既然没问题,我们就不要修”。所以在整个过程中,如果没有人去参与,没有人去共建,那么我们就认为,这都不重要。因为如果我们靠这个活下去,项目从创建那天起就死了。意味着核心共建者有多长时间,项目就可以发展多少,这不是我们想看到的事情。 在整个过程中,我们需要联合大量的人,这些人包括用户、顶级公司、开发型社区、开源社区、开源的人,因为你肯定不会是那个最博学的人。爱因斯坦的年代也并不是所有的东西都是他发明的,所以你肯定不是那个人。那么你需要的是更多的人,而不是你自己更多的时间,你需要吸引他们。
总有人说中国的共建者环境不好。事实上中国 SkyWalking 的 560 个共建者里面绝大部分都是中国人。大家确实很忙,经常加班。但中国也仍然是一个很热爱技术的环境,他们需要的是一个公平、公开以及开放的环境,而不是被追着干活。在 SkyWalking 里,我从没有找任何一个 PMC 追过时间点。我只会问,你觉得这个版本要不要带上你的功能?如果他说我来不及做,OK 没问题,我们这个版本就把你的这个功能跳掉。除非你在为 Tetrate 工作,我作为 Tetrate 的员工,我认为你要提交这个功能。除此之外的任何情况,我不认为你要向我负责,也不用向时间负责。你认为感兴趣就做,如果没有兴趣就可以不做。
我想说,中国并没有什么特别的,这是一个 GitHub 的工程师,他在抱怨几乎一样的事情。有一个人非常着急的说,你干嘛还不修复这个问题。全世界都有这样的人,这不是中国的特例,而在于你以何种心态去看待这件事情。
最后两个点,第一是英语。英语是我们在中国面临最大的,也是 SkyWalking 经常上新闻的原因。因为 SkyWalking 不接受任何中文的 PPT,以及在官方渠道不接受任何中文的讨论,即使在我以前还不是一家北美公司的员工。原因是什么?很简单的逻辑,国际化。中文现在不是国际语言,这是现实。我们不可能靠开源项目把中文变成国际语言。所以如果你要国际化,全部公开英语的讨论,英语是一个必备的能力,即使你非常的不喜欢。就好像我们现在离硅谷还有很大差距,不好意思,你只好去相信。所以不要把这件事情变成爱国与不爱国,这是我们走出去的手段,而且是所有手段里最简单的一个,只需要学一下就可以,跟你的文化、意识没有任何关系。
第二是测试。大家要知道 SkyWalking 之所以能把 ownership 放出去,是因为有大量的测试。SkyWalking 的测试不是简单的单元测试,是有集成的。你每提交一个功能,大概会经历几千个自动化测试的检查,确保这个功能不会影响到其他内容,然后人工才会干预。我们可以很相信其他 review 的结果,SkyWalking 的主干上几乎每一个版本都可以正常使用,因为它已经被端到端测试验证过。所以我们是为每一个 commits 去测试的,测试代码之前统计过是 2 万多行,现在可能更多,包括我们自己有端到端测试工具,以及整个端到端测试体系和开源集成的技术手段。
保持开放,是中国人最难做到的一点。因为中国人讲的是“权威”,中文经常讲“求同存异”,但是中国文化里面最难的就是“求同存异”。怎样保持开放,怎样接受不同意见,大家会在以后开源的过程中经历非常多的事情。
关注共建者,让你的项目变成一个远程工作模式,因为你需要和全球的人一起工作,所以远程也是必不可少的。
有几点千万不要做的:
不要尝试去理解所有的东西,不然就会遇到瓶颈。
不要控制你所有的项目,不要你自己或者是私有的做决定。在中国最常见是,微信开个会讨论一下,这个事就下决定了,在开源里面是非常危险的,因为别人不知道上下文,就觉得这个结论是你拍脑袋的。
不要把反对意见当作敌对的,攻击性的意见。学会用文字礼貌地表达自己的观点。感叹号不要随便用,大小写要非常认真的写对。当我看到一个带感叹号,而且全部是小写英语的内容,我的第一反应是这个人非常不礼貌,如果你的大小写都不写对,还指望我要花时间给你回答问题?如果你写一个问题的复现过程,详细分析的情况都不愿意写,为什么觉得你的时间很珍贵,而我的不珍贵呢?不论你是参加一个开源项目还是做一个开源项目,你会有非常多的态度在里面。
所以最后送给大家的是,你如果去做一个开源项目,这绝对不仅仅是技术问题,更是社会学问题、人性的问题。做好这些,你才能做好开源项目。
谢谢大家!
查看《技术雷达》全文或下载 PDF 版本,请在公众号回复:技术雷达
加入技术琐话读者群,请公众号回复:读者群
往期推荐:
长按二维码关注
以分布式设计、架构、体系思想为基础,兼论研发相关 的点点滴滴,不限于代码、质量体系和研发管理。