当前位置: 首页 > news >正文

开源引路人:我的Apache Mentor之路

从 Apache 基金会 maintainer 到 mentor,13 年开源经历的心路历程。

姜宁,华为开源能力中心技术专家,目前在华为负责 ServiceComb 开源项目。前红帽软件首席软件工程师,在企业级开源中间件开发方面有十余年经验,有丰富的 Java 开发和使用经验,函数式编程爱好者。从 2006 年开始一直从事 Apache 开源中间件项目的开发工作,先后参与 Apache CXF,Apache Camel,以及 Apache ServiceMix 的开发。对微服务架构,WebServices,Enterprise Integration Pattern,SOA, OSGi 均有比较深入的研究。

2000 年,本科毕业的姜宁来到当时还很荒芜的西二旗,去华为大厦面试,后来因为念研究生就没有选择去华为。2005 年,在西二旗的海纳软件(IONA)工作的姜宁开始接触开源项目。那时西二旗刚刚开始发展,政府也支持软件园的建设,这里聚集了很多科技公司,其中不少是冲着前三年租办公区免租金来的。IONA 没有熬过头三年,但是开源背景把姜宁带到了红帽,在顶级开源公司工作了几年。2017 年,姜宁又回到西二旗,进入了华为。

感觉是绕了一个圈。西二旗现在聚集了很多核心软件公司,也有了硅谷的氛围,这可能就是软件互联网行业发展的一个趋势吧,相信你们以后应该也会有很多跟西二旗接触的机会。

\"1\"

姜宁参与开源的经历跟大家不太一样,是直接走的公司流程。2006 年时,IONA 有个项目要开源,姜宁就轻松成为了一个初始 committer,开始接触 Apache 软件基金会(ASF)。08 年时在 Apache Camel 项目中,姜宁被选举成为 committer, 开源之路开始走顺了。后来又参与了很多 Apache 项目,开始 mentor 别人,直到有一天收到 ASF 的信,邀请姜宁成为 Apache member。

我填完(申请表)之后很高兴,这相当于是 Apache 对我的一个认同。

采访过程中当姜宁说到这里的时候,我们仍然能从他眼里的神采感受到他的喜悦。

\"2\"

姜宁说,其实开源是一个圈子。社区、基金会有自己做事的方法和流程。参与开源社区,不断地认识不同项目的负责人,了解开源社区的运作,才算融入了开源的圈子。而没有进入开源圈子的人,很难靠自己把一个项目培养起来。

早些年的时候 ASF 里面国内的 member 比较少,参与孵化的项目也不多。作为中国人,姜宁很愿意帮助来自中国的项目在 ASF 里成长孵化。

所以后来华为就找到我,因为华为有一个微服务的项目想进入 Apache。刚开始的时候这个项目还没有起名字,后来我们给它起了一个名字叫 ServiceComb。service 就是服务嘛,comb 有蜂巢的意思,意味着微服务就是由很多很小的东西拼在一起的。

\"\"

从一个初始 committer 到项目 maintainer 再到 mentor,在开源社区多年的经历和多种角色的变换,让姜宁感觉到开源社区很像武侠小说里的江湖氛围:mentor 协助项目孵化,把项目归类,跟项目和基金会的董事层沟通,这个过程就像武林中立一个山头带一群人成长;GitHub 上大家通过 pull request 交流则像大侠之间相互切磋武艺。而在社区里大家都是主动、自愿地展示自己的能力,正如漫威电影里的台词一样,“with great power comes great responsibility\u0026quot;,这一点也很像武林大侠的侠义精神。所以在开源社区中,“人际关系很重要,人与人之间的交互很有江湖氛围。”

从 committer 到 member,再到 mentor,其实也是一个不断成长的过程。

一个开源项目的 maintainer 需要审核项目贡献者在 GitHub 上提的 pull request,和贡献者进行沟通并培养社区里的开发人员。而作为 mentor,就像是“师傅”一样的引领者角色,要教会不会玩开源的人怎么进入开源圈子。

\"\"

AFS 提倡 community over code (社区大于代码)。从这个层面来说,能把圈子维护好,比写一手好的代码更重要。开源社区中除了需要会写代码的开发者,还需要社区布道人员,对外宣讲人员,写文档的人员,以及前端美工设计人员。

所有对推动项目进步有价值的人都可以成为 committer。

从 21 年前“开源软件”这个词第一次出现,关于开源与商业公司之间竞争的讨论一直没有停过。

在姜宁看来,开源这个事情,其实就是一个非零和(共赢)游戏,这也是 Apache 一直在强调的一点。

一个公司,它把自己核心的东西拿出来了之后,真的会失去这些东西吗?所有的公司在给予的同时,其实会收获更多。

姜宁的这个理解来源于《降临》这部电影。电影讲述了 12 个神秘飞船降临在地球上所发生的故事。电影中,12 国分别破译了外星人的语言片段,但是这些片段被列强据为己有,彼此不沟通。而要获得外星人的真实意图,必须将 12 个片段拼接到一起才能最终破译。这里面的隐喻用在开源与商业公司之间的竞争非常恰当:开源社区中不是“你之得即我之失”这样一种简单的关系,而是通过成果共享和努力解决共同的困难来实现多赢的结果。比如谷歌最开始做 Kubernetes 时,把自己的核心技术开放出来,吸引了很多公司,甚至是竞争关系的公司参加进来,后来 Kubernetes 慢慢变成一个撬动世界的杠杆,促进了整个云计算行业的发展。

对于开源项目来说,大家针对共同的问题会想尽一切办法,动用一切资源来解决问题,最后可能真的能成就一项改变世界的技术。

如果要用一个词来表达自己对开源的印象和感悟的话,姜宁会选择“分享”这个词。

开源其实很大程度上其实是建立在分享以及协作的基础之上的。

\"\"

姜宁有一次无意间翻到十几年前参与开源项目时的一件 T 恤,还是忍不住感概自己这么多年从开源社区中的收获。姜宁说,在开源社区中大家最容易收获的就是无偿的帮助。因为在这里信息都是开源开放的,每一个人都可以学习和成长,获得他人的帮助,也能尽自己的能力帮助别人。

ASF 有个很重要的理念:For the public good,也就是从整个人类的角度,或者是为了公众的利益来做开源这件事情。从这个角度来说,个人或者公司的利益就已经很渺小了,所以大家可以跨越公司利益一起去做协同合作。所以 Apache 是一个相对来说比较草根一点的组织,它不会屈服于商业,也就很难被上市公司控制。这也是它能够不断发展壮大的最主要的原因:大家都能相信他的公信力。

另外,for the public good 其实更多程度上是 for the users’ good,就是给更多的用户带来福祉的一个事业。这样的话其实也会带来一个好处:它可以让不同的商业公司能够站在一起,为了一个更大的一个目标去去交流、沟通和协作。所以姜宁觉得很多时候一些种族、战争方面的事情,如果放大到全人类的角度上来说,其实都是能迎刃而解的。

相关文章:

  • 一次性能优化:吞吐量从1提升到2500
  • Eureka自我保护机制与Eureka服务发现(Discovery)
  • __proto__ 和 prototype的关系
  • 这道js题你会吗?
  • java B2B2C源码电子商城系统-Spring Cloud Eureka自我保护机制
  • 基于 React TypeScript Webpack 的微前端应用模板
  • xgboost回归损失函数自定义【一】
  • Java null最佳实践
  • 36氪首发|「优仕美地医疗」获亿元级B轮融资,要打造日间手术机构的连锁服务网络...
  • 阿里云联合8家芯片商推“全平台通信模组”,加速物联网生态建设
  • MySQL设置主从复制
  • 赶紧收藏!新鲜出炉的重庆轨道交通图 首末班时间和线路都在里面
  • 厉害!重庆参加马拉松赛人数7年翻10倍,今年区县马拉松赛事将大增
  • python教程(一)·命令行基本操作
  • TCP三次握手四次挥手
  • [Vue CLI 3] 配置解析之 css.extract
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Codepen 每日精选(2018-3-25)
  • codis proxy处理流程
  • java小心机(3)| 浅析finalize()
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Js基础知识(四) - js运行原理与机制
  • python大佬养成计划----difflib模块
  • Vue UI框架库开发介绍
  • Vue组件定义
  • 时间复杂度与空间复杂度分析
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 说说动画卡顿的解决方案
  • 小程序开发之路(一)
  • 小而合理的前端理论:rscss和rsjs
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 从如何停掉 Promise 链说起
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (pytorch进阶之路)扩散概率模型
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (力扣题库)跳跃游戏II(c++)
  • (十八)三元表达式和列表解析
  • (一)kafka实战——kafka源码编译启动
  • (转)socket Aio demo
  • (转)Sql Server 保留几位小数的两种做法
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET Micro Framework初体验(二)
  • .net Signalr 使用笔记
  • .NET 使用 XPath 来读写 XML 文件
  • .net的socket示例
  • .NET下的多线程编程—1-线程机制概述
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @Pointcut 使用
  • @RestControllerAdvice异常统一处理类失效原因
  • [Android] 修改设备访问权限
  • [Assignment] C++1