本文字数:2948 字
阅读时间:8 分钟
目
录
举个例子
开源社区如何起步
起步后的困难在哪
是什么激励我们
举个例子
大家经常看到开源社区这四个字,什么是开源社区呢?咱们先看个例子。
一个程序员 A,写了一个简单的计算器,支持加减乘除四个功能,然后公开到网上了,类似一个在线文档,可以协同编辑,他就成了第一个贡献者。
有一些人发现这个计算器的风格挺好看,就下载使用了,于是就成为了开源用户。用户在用的过程发现缺少了一些高级功能,于是开始提新需求。
这些用户里,有一个也是程序员,他想了想,与其等原作者开发,不如自己动手写了,毕竟代码都是公开的,他就开始向这个计算器里增加新的代码和文档。于是他又多了一个身份:贡献者。
还有一些程序员,他们本身不需要用计算器,但是他们发现这个计算器的代码水平很高,于是一边看代码学习,一边提交一些代码和文档,于是他们也成为了贡献者。
还有一些人,觉得这个计算器项目很有意义,于是开始给朋友推荐这个计算器,他就成为了布道师。
用户、贡献者、布道师,开源社区里主要就是这些角色。
所有围绕这个开源计算器项目的参与者就构成了这个项目的开源社区。一般来说项目和开源社区是一对一的。
一个开源项目的代码可以商用吗,商用时 Bug 造成了损失能找开发者索赔吗,基于这些代码改的代码也需要开源吗,这些是开源协议明确的事情。如 Apache 协议、BSD 协议、MIT 协议、木兰协议等。通常被 OSI (Open Source Initiavite 开源促进会)https://opensource.org/licenses/category 认证的才算开源协议。
为了让大家协作的更好,需要有一套完整的流程引导大家工作,告诉大家这个项目的运转规则,比如在哪里进行交流讨论、如何发布版本、如何接受一个人的修改建议等,这就是开源社区规范。这个没有标准模板,每个社区都可以制定自己的规范。
为了促进开源项目的发展,会有一些组织,帮项目提供知识产权服务、指导项目建立开源社区规范、提供一些技术和平台支持,这就是开源软件基金会。如 Apache 基金会、Linux 基金会、CNCF 基金会、开放原子基金会等。基金会通常会为项目分配社区导师来进行实际的指导。
从上边的例子可以看到,开源社区是一个虚拟世界的概念,他不要求社区中的人物理上在一个城市、一个小区,社区的人甚至没有互相见过面,但这不影响他们一起协作,而且也不是只有程序员才能参与开源社区,文档贡献、Logo设计、活动组织、宣传等都是可以参与的建设活动。
开源社区如何起步
我最开始接触开源,是在做一个项目过程中遇到了问题,于是去相关项目的 Github 中提问,当时有一个国外小哥很快回答了我的问题,这是我第一次享受到开源社区对用户的福利。作为回报,我关注了这个小哥。
在做时序数据库 IoTDB 的过程中,我们也幸运地进入 Apache 开源软件基金会,在社区导师的指导下,开始建设我们的开源社区。虽然有很多不熟悉的,但还是朝着正确的方向前进。
开源社区建设有几个重要的方向:
项目整理:按照 Apache 的规范整理代码、用户手册、开源协议,并且学习版本发布计划,这个阶段是让项目合法合规,这是建设社区的第一步,也是需要持续关注的。
社区宣传:把代码公开并不会给项目带来多少流量,需要通过各种宣传渠道让别人了解你的开源项目。
服务用户:一个开源社区的目标一定是让软件被更多人用起来,所以服务用户是每个社区的主线工作。包括开发用户需要的功能、修复用户发现的bug、写文档让用户更便捷地使用起来。
贡献者协作:贡献者往往不是一个人,而且通常是远程交流,为了更好地服务用户,现有贡献者通常希望实现两件事:吸引更多的贡献者、和其他贡献者高效地分工合作。这就需要社区有一套完善的工作机制,让每个人都能找到自己合适的位置,并且做出贡献。
起步后的困难在哪
上边四项听起来并不难嘛,确实,起步不难。但是做好并不容易,接下来讲几个场景。
(1)持续合规:项目中依赖的其他开源项目都需要满足一定的开源协议要求,并且进行声明。但并不是社区所有人都清楚开源协议的具体要求的,毕竟大家不都是法务,于是可能某一次代码合并就引入了一个不符合要求的项目。
解法:需要通过一些工具来进行检查,在发版前都要一一确认。
(2)宣传:很多开发者都喜欢低调研究技术,并不喜欢宣传自己在干什么,于是了解项目的人就少。
解法:要鼓励大家写文章,有意识地与人交流,多做分享。
(3)交流:与开源用户交流通常是在线上。而且不同用户的背景和语境都不一样,导致交流困难,所以你会发现每个社区与用户交流较多的都是那么几个人。
解法:多与用户接触,之后就能适应各个用户的语境,快速切换语料库。
(4)文档:程序员都喜欢看文档,但是都不喜欢写文档,尤其是用户手册,或者用户手册写的别人并不能看懂。
解法:把自己当做产品经理,多从产品的角度思考。
(5)协作:通常社区的贡献者都是一个一个小团队,每个小团队是线下一起办公的,大家肯定更习惯面对面讨论,通常团队内讨论出来结果就直接开干了,并不会有跟社区同步的意识,这就会导致社区贡献者之间不知道其他人在干什么,也可能做了重复、冲突的工作。
解法:团队内要注意多把开发计划和社区同步,尤其是团队负责人要有这个意识。
(6)培养:新人加入社区,通常需要有老人带,老人只能通过给新人分配任务的方式培养新人。这时候老人可能会有一种心理,我又不是新人的上级,给他们分配任务是不是不太好。
解法:要脸皮厚一些,习惯跟新人说“来做个这个任务吧”。
(7)鼓励:对于新人来说,开发过程中会遇到各种各样的小问题,即使指定了一个老人带他,也会不好意思问,觉得这个问题太小了,是不是自己太菜了。
解法:要多鼓励新人提问,不分大小,并且总结常见问题给更多新人参考。
(8)协商:不同开发者对于同一件事的观点不同,我想用方案1实现,你想用方案2实现,怎么办?
解法:可以定义框架,大家对外暴露的功能一样,但是允许有不同的实现方案。如果是功能不同,可以考虑提供配置参数进行功能切换。
是什么激励我们
上边只列了一些困难和可能的解法。接下来到了核心问题。社区贡献者为什么要费这么大劲来做这些事,社区做大了对个人有什么好处?
(1)对用户兼贡献者友好
社区做大了,用户的体验一定会变好,因为软件会更完善,维护者也会更多。很多贡献者本身就是用户,所以这是一件对自己有直接好处的事。
(2)技术能力提升
一些开发者,工作之余还有精力,想积累一些项目经验,锻炼编码水平,这时候就可以参与到开源社区中,锻炼技术能力,做的越多,收获越多。
(3)提升影响力
在社区中,解答用户的问题、培养新人、贡献代码,这些贡献别人都会看在眼里、记在心里,这样就提升了自己在社区的影响力。
(4)获得友情、甚至爱情
一个社区的人通常都有共同的目标,大家一起扛过枪,服务过用户,关系会更紧密。对于一些不会追女生的男生,聊代码、聊技术也是一个好的活动。
(5)理想
项目的每个贡献者,不论贡献多少,都会有一种希望,希望社区越来越好。而且贡献越多,希望会越强烈。当社区足够出名,他能很自豪的跟别人说:我也是这个社区的贡献者。
最后,欢迎大家加入 Apache IoTDB 社区,为国产时序数据库贡献力量。至于如何加入,可以在公众号加我微信。
长
按
关
注
铁头乔
生命,永不低头。