发表于2020-03-28 12:27:36 +0800

如何参与开源软件开发

最近接到好几个朋友的求助,他们由于工作需要专职从事开源软件的开发。 面对陌生的环境,异步的交流方式,他们的困惑有哪些呢?

这些问题都是开源新手经常面临的问题, 市面上也有不少教程来给大家介绍这部分的知识。本着不重复造轮子的原则,今天我给大家安利一下Github在发布的开源指导手册。 这本指导手册是2017年成稿发布,与其他开源软件一样,相关的文档内容一直依靠社区在做维护与更新。目前这本指导手册已经被翻译成为13种语言,其中也有简体中文版本。这本指导书涵盖了从参与开源开发,到创建开源项目, 以及如何更好的构建社区等与开源开发相关的内容,今天涉及的主要是第一章的如何为开源做贡献。

开源项目的开发采用开放式的方式进行协作,通过共享成果的降低了大家的重复劳动成本。因此大家要本着公开透明的方式进行相关交流与协作。尽量不要单独给开源维护人员发送私信,除非这些问题涉及安全信息或者其他不宜公开的信息。 借助Internet,我们可以与未曾谋面的人进行交流, 交流的过程中大家要注意一点就是我们的交流不是点对点的交流,而是点对面的交流。 为了能让更多的人参与进来,这就需要我们把跟开发相关的所有上下文信息都应该放置在大家都能获取的地方。 因此绝大多数的开源项目会在其代码仓中存放一个CONTRIBUTING文件,用以描述项目需要什么类型的贡献,具体的贡献流程是怎么样的。这样带来的好处就是贡献者可以采用自服务的方式参与到开源项目的开发流程中。

如果我们发现CONTRIBUTING文件描述的不清楚,或者是发现了具体的操作流程描述中的问题,我们应该怎么做呢?我的建议是直接修改文件中的内容, 向项目提交一个PR。 在开源指导手册中有一个很有意思的数据,28%的偶然贡献就是对文档的修改。 换句话来说这类文档级别的PR真的是一个离地比较近的果子,很适合刚刚接触开源的朋友尝试一下。因为文档修改很容易验证其正确行,也不会对其他代码模块产生副作用, 同时让贡献者熟悉开发协作流程, 所以项目的维护人员会比较乐意接受这样的PR。

同理心在开源开发交流过程扮演了很重要的作用, 你应当以期望社区里的小伙伴对待你的方式来对待社区里面的小伙伴。 热心地帮助他人解决问题, 以友好,富有建设性的方式提出问题,积极参与社区问题的讨论贡献自己的好点子。 这时你的id就不是一个冰冷的名字了,而是一个在社区里面活生生的人, 你在社区里面的交互都会与这个id产生联系。 你的社区影响力是靠平日里跟大家的交互积累起来的,请珍惜你在社区里的声誉,维护好在你社区里的形象。

随着Github的广泛流行, 目前开源社区交流主要是围绕issues进行的,由于我们不能面对面进行交流,需要大家对于交流的问题进行尽可能详细的描述。假如你发现了bug,可以创建一个issue,描述发生bug的环境信息,软件版本信息,以及具体的问题是怎么样的,必要时可以附上相应的调用栈信息。 详细的信息描述可以减少信息交互的次数,提供信息交流的效率。在寻求帮助的过程中,请仔细阅读README,文档,以及检索以往别人提的相关问题。一旦你对这个问题的相关背景知识有了比较清楚的了解,你所提的问题就会一定深度,也更容易被维护人员关注。确保贡献能够比社区接纳的关键是进行有效的沟通, 有关有效沟通需要注意的其他事项可以参考开源指导书的这段章节

开源开发是一个日积月累的过程,一旦你的工作被越来越多社区开发人员认可,那你在社区的影响力也就越高,你的贡献被大家接受的可能性也也就越高。 当然在开源项目的中的贡献并不只是局限于代码,如果你对组织活动,网站设计或者文档编写感兴趣的话,都是可以参与到开源项目中来的。 最后祝大家在这场奇妙的开源之旅中有所收获,玩得开心!