http://wuchong.me/blog/2019/02/12/how-to-become-apache-committer/

过去三年,我一直在为 Apache Flink 开源项目贡献,也在两年前成为了 Flink Committer。我在 Flink 社区成长的过程中受到过社区大神的很多指导,如今也有很多人在向我咨询如何能参与到开源社区中,如何能成为 Committer。这也是本文写作的初衷,希望能帮助更多人参与到开源社区中。

本文将以 Apache Flink 为例,介绍如何参与社区贡献,如何成为 Apache Committer。

我们先来了解下一个小白在 Apache 社区中的成长路线是什么样的。

Apache 社区的成长路线

Apache 软件基金会(Apache Software Foundation,ASF)在开源软件界大名鼎鼎。ASF 能保证旗下 200 多个项目的社区活动运转良好,得益于其独特的组织架构和良好的制度。

用户 (User): 通过使用社区的项目构建自己的业务架构的开发者都是Apache的用户。

贡献者 (Contributor): 帮助解答用户的问题,贡献代码或文档,在邮件列表中参与讨论设计和方案的都是 Contributor。

提交者 (Committer): 贡献多了以后,就有可能经过 PMC 的提议和投票,邀请你成为 Committer。成为 Committer 也就意味着正式加入 Apache了,不但拥有相应项目的写入权限还有 apache.org 的专属邮箱。成为 Committer 的一个福利是可以免费使用 JetBrains 家的全套付费产品,包括全宇宙最好用的 IntelliJ IDEA (这是笔者当初成为 Committer 的最大动力之一)。

PMC: Committer 再往上走就是 PMC,这个必须由现有 PMC 成员提名。PMC 主要负责保证开源项目的社区活动都能运转良好,包括 Roadmap 的制定,版本的发布,Committer 的提拔。

ASF Member 相当于是基金会的“股东”,有董事会选举的投票权,也可以参与董事会竞选。ASF Member 也有权利决定是否接受一个新项目,主要关注 Apache 基金会本身的发展。ASF Member 通常要从 Contributor, Committer 等这些角色起步,逐步通过行动证明自己后,才可能被接受成为ASF Member。

Apache 社区的成员分类,权限由低到高,像极了我们在公司的晋升路线,一步步往上走。

如何成为 Committer

成为 Apache Committer 并没有一个确切的标准,但是 Committer 的候选人一般都是长期活跃的贡献者。成为 Committer 并没有要求必须有巨大的架构改进贡献,或者多少行的代码贡献。贡献文档、参与邮件列表的讨论、帮助回答问题都是很重要的增加贡献,提升影响力的方式。

所以如何成为 Committer 的问题归根结底还是如何参与贡献,以及如何开始贡献的问题。

成为 Committer 的关键在于持之以恒。不同项目,项目所处的不同阶段,成为 Committer 的难度都不太一样,笔者之前也持续贡献了近一年才有幸成为了 Committer。但是只要能坚持,保持活跃,持续贡献,为项目做的贡献被大家认可后,成为 Committer 也只是时间问题了。

如何参与贡献

参与贡献 Apache 项目有许多途径,包括提Bug,提需求,参与讨论,贡献代码和文档等等。

  1. 订阅开发者邮件列表:dev@flink.apache.org。关注社区动向,参与设计和方案的讨论,大胆地提出你的想法!
  2. 订阅用户邮件列表:user@flink.apache.orguser-zh@flink.apache.org。帮助解答用户问题。
  3. 提Bug和提需求:Flink 使用 JIRA 来管理issue。打开 Flink JIRA 并登录,点击菜单栏中的红色 “Create“ 按钮,创建一个issue。
  4. 贡献代码:可以在 Flink JIRA 中寻找自己感兴趣的 issue,并提交一个 Pull Request(下文会介绍提交一个 PR 的全过程)。如果是新手,建议从 “starter” 标记的 issue 入手。笔者在 Flink 项目的第一个 issue 就是修复了打印日志中的错别字,非常适合于熟悉贡献流程,而且当天就 merge 了,成就感满满。当熟悉了流程之后,建议专注贡献某个模块(如 SQL, DataStream, Runtime),有利于积累影响力。
  5. 贡献文档:文档是一个项目很重要的部分,可以在 JIRA 中寻找并解决文档类的 issue。熟悉中英文的同学可以参与贡献中文翻译,可以搜索 “chinese-translation” 的 issue
  6. 代码审查:Flink 每天都会在 GitHub 上收到很多 Pull Request 。帮助 review 代码也是对社区很重要的贡献。
  7. 还有很多参与贡献的方式,比如帮助测试RC版本,写Flink相关的博客等等。

如何提交第一个 Pull Request

1. 订阅 dev 邮件列表

  1. 用自己的邮箱给 dev-subscribe@flink.apache.org 发送任意邮件。
  2. 收到官方确认邮件。
  3. 回复该邮件,内容随意,表示确认即可。
  4. 确认后,会收到一封欢迎邮件,表示订阅成功。

2. 在 dev 邮件列表中申请 JIRA Contributor 权限

Apache 项目都使用 JIRA 来管理 issue,创建 issue 和认领 issue 都需要 Contributor 权限。申请权限之前,先在 JIRA 注册一个账号。然后在 dev 邮件列表申请 Contributor 权限,邮件内容要带上 JIRA 账号 id。例如:

Hi Guys,

I want to contribute to Apache Flink.
Would you please give me the permission as a contributor?
My JIRA ID is xxxx.

社区的PMC大佬们看到后会第一时间给你权限的。

3. 在 JIRA 中挑选 issue

申请到权限后,就可以在 JIRA 中认领 issue了,推荐从简单的开始做起。例如中文翻译的issue。认领的方式非常简单,在 issue 页面右侧 Assignee 处点击 “Assign to me”,如下图所示。

Tip: 如果感兴趣的 issue 已经被别人认领,但是 Assignee 迟迟没有开始开发。那么可以在 issue 下面友好地询问下是否有时间开发,是否介意重新认领该 issue。

4. 本地开发代码

认领了 issue 后建议尽快开始开发,本地的开发环境建议使用 IntelliJ IDEA。在开发过程中有几个注意点:

  • 分支开发。 从最新的 master 分支切出一个开发分支用于 issue 开发。
  • 单 PR 单改动。 不要在 PR 中混入不相关的改动,不做无关的代码优化,不做无关的代码格式化。如果真有必要,可以另开 JIRA 解决。
  • 保证新代码能被单元测试覆盖到。如果原本的测试用例,无法覆盖到,则需要自己编写对应的单元测试。

5. 创建 pull request

在提交之前,先更新 master 分支,并通过 git rebase -i master 命令,将自己的提交置顶(也可以通过 IDEA > VCS > Git > Rebase 可视化界面来做 rebase)。同时保证自己的提交信息中只有一个 commit,commit message 遵循规范格式。Commit 格式是 “[FLINK-XXX] [YYY] ZZZ”,其中 XXX 是 JIRA ID,YYY 是 component 名字,ZZZ 是 JIRA title。例如 [FLINK-5385] [core] Add a helper method to create Row object

要创建一个 pull request,需要将这个开发分支推到自己 fork 的 Flink 仓库中。并在 fork 仓库页面(https://github.com/<your-user-name>/flink)点击 “Compare & pull request” 或者 “New pull request” 按钮,开始创建一个 PR。确保 base 是 apache/flink master,head 是刚刚的开发分支。另外在编辑框中按提示提供尽可能丰富的PR描述,然后点击 “Create pull request”。

6. 解决 code review 反馈的问题和建议

提交 PR 后会收到修改建议,只需要为这些修改 追加commit 就行,commit message 随意。注意不要 rebase/squash commits。追加 commit 能方便地看出距离上次的改动,而 rebase/squash 会导致 reviewer 不得不从头到尾重新看一遍 diff。

7. Committer merge PR

当 PR 获得 Committer 的 +1 认可后,就可以等待被 merge 到主干分支了。merge 的工作会由 Committer 来完成,Committer 会将你的分支再次 rebase 到最新的master 之上,并将多个 commits 合并成一个,完善 commit 信息,做最后的测试检查,最后会 merge 到 master 。

此时在 Flink 仓库的 commit 历史中就能看到自己的提交信息了。恭喜你成为了 code contributor!

总结

在我看来,成为 Apache Committer 的小窍门有几点:

  1. 把项目看成自己的事情,自发地,有激情地去做贡献
  2. 保持活跃,持续贡献,耐心和平常心都很重要
  3. 专注一个模块,吃透该模块的源码和原理,成为某个模块的专家
  4. 提升个人的代码品位和质量,让他人信任你的代码
  5. 勇敢地在邮件列表中参与讨论

希望通过本文能让大家了解到,成为 Contributor 并没有想象中那么难,成为 Committer 也不是不可能,只要怀有开源的热情,找到自己感兴趣的项目,在开源贡献中成长,持之以恒,付出总会有回报的。

成为 Apache Committer 不仅仅是一种光环和荣誉,更多的是一种责任,代表着社区的信任,期盼着你能为社区做更多的贡献。所以成为 Committer 远不是终点,而是一个更高起点,毕竟 Committer 之上还有 PMC 呢 ;-)。

 

转自阿里云邪-如何从小白成长为 Apache Committer?的更多相关文章

  1. 阿里云服务器 ECS 部署lamp:centos+apache+mysql+php安装配置方法 (centos7)

    阿里云服务器 ECS 部署lamp:centos+apache+mysql+php安装配置方法 (centos7) 1.效果图 1 2. 部署步骤 1 1. mysql安装附加(centos7) 7 ...

  2. 阿里云轻量应用服务器debian8.9用apache多端口搭建多站点

    前几天想要再搭个网站玩玩,就用阿里的服务器,apache本地搭建站点和服务器相差不多,然而却踩了大坑,差点耗死在这儿. 先进入apache这个目录,有如下文件夹: 打开ports.conf,  添加 ...

  3. 阿里云服务器 :Linux环境下搭建Apache+php+mysql

    以前我用的是Windows2012 的服务器,那时候只是抱着玩一玩的心态,所有用的是Windows,但是后来被导师给DISS了,于是决定改服务器的操作系统: (一)下载安装php+mysql+apac ...

  4. C# .net Ueditor实现图片上传到阿里云OSS 对象存储

    在学习的时候,项目中需要实现在Ueditor编辑器中将图片上传到云储存中,老师演示的是上传到又拍云存储,既然看了一遍,直接照搬不算本事,咱们可以依葫芦画瓢自己来动手玩玩其它的云存储服务. 现在云计算产 ...

  5. 阿里云主机windows系统Apache启用浏览器缓存的方法

    一群友使用卡卡网的网站速度诊断工具诊断网站速度时,发现有几个需要优化的地方,其中较为重要的是“启用浏览器缓存”.诊断结果显示,网站尚未启用浏览器缓存. 图一:浏览器缓存未启用 群友找我帮忙设置一下,据 ...

  6. 阿里云安装RocketMQ

    说明: 我的阿里云是centos 6.9 jdk 1.8.0_192-b12(安装教程参照:https://www.cnblogs.com/kingsonfu/p/9801556.html) mave ...

  7. 阿里云+wordpress搭建个人博客网站【小白专用的图文教程】

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. 阿里云ECS服务器折腾记(一):小白入门遇到的各类问题

    上周日折腾了一次阿里云服务器,被linux的网络问题折腾的够呛.在这里简单做个问题的概要记录,以备忘.题目中说自己是小白,其实也不完全是小白,自己对一些linux的常用命令还是有所了解的,但是对于li ...

  9. 小白从零开始阿里云部署react项目+node服务接口(三:部署到服务器)

    服务器 准备工具 依次安装即可 nginx 安装nginx https://www.runoob.com/linux/nginx-install-setup.html 配置全局nginx命令 http ...

随机推荐

  1. Linux系统优化脚本

    #!/bin/bash ############################################################################## # File Na ...

  2. Storm入门(十)Twitter Storm: Transactional Topolgoy简介

    作者: xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://xumingming.sinaapp.com/736/twitter-stor ...

  3. 二维前缀和模板题:P2004 领地选择

    思路:就是使用二维前缀和的模板: 先放模板: #include<iostream> using namespace std; #define ll long long ; ll a[max ...

  4. 利用python开发app实战

    你说,我们的未来 被装进棺材,染不上尘埃 *** 我很早之前就想开发一款app玩玩,无奈对java不够熟悉,之前也没有开发app的经验,因此一直耽搁了.最近想到尝试用python开发一款app,goo ...

  5. 华为云.NET Core支持情况调查

    各大公有云都提供了开发者开发的SDK,今天我们来看看华为云对.NET Core的支持情况怎么样? .NET SDK地址 https://developer.huaweicloud.com/sdk#.N ...

  6. GitHub开源:SQLite 增强组件 Sheng.SQLite.Plus

    Github:https://github.com/iccb1013/Sheng.SQLite.Plus Sheng.SQLite.Plus 是一个对直接使用 ADO.NET 方式操作 SQLite ...

  7. Linux 网络命令必知必会之 tcpdump,一份完整的抓包指南请查收!

    目录 01 简介 02 tcpdump 命令选项 03 过滤器 04 常用操作 4.1 抓取某主机的数据包 4.2 抓取某端口的数据包 4.3 抓取某网络(网段)的数据包 4.4 抓取某协议的数据包 ...

  8. Solr 14 - SolrJ操作SolrCloud集群 (Solr的Java API)

    目录 1 pom.xml文件的配置 2 SolrJ操作SolrCloud 1 pom.xml文件的配置 项目的pom.xml依赖信息请参照: Solr 09 - SolrJ操作Solr单机服务 (So ...

  9. 接口自动化:HttpClient + TestNG + Java(四) - 封装和测试post方法请求

    在上一篇中,我们对第一个自动化接口测试用例做了初步优化和断言,这一篇我们处理POST请求. 4.1 发送POST方法请求 post方法和get方法是我们在做接口测试时,绝大部分场景下要应对的主要方法. ...

  10. 10分钟明白对偶建模法 / +Leampms的“主模型建模”和“对偶模型建模” 之 —— 三类最短路径问题

    摘要 对偶模型建模是非常有独特的一种建模方式 —— 当问题本身要求指标极小的情况下,对偶模型表现为求极大.本文给出三种最短路径问题的线性规划/混合整数规划模型,其中的第三类最短路径问题采用对偶建模方法 ...