开源项⽬-如何在贡献开源项⽬的过程中提升⾃⼰
开源项⽬-如何在贡献开源项⽬的过程中提升⾃⼰
转载声明
本⽂⼤量内容系转载⾃以下⽂章,有删改,并参考其他⽂档资料加⼊了⼀些内容:
作者:Sergey Bronnikov
出处:Gitee
引⾔
我今年不知是机缘巧合,还是所谓的注定,有多次机会和⼤家讲《开发者与开源社区的关系》的演讲。那么开源的⽣产⽅式,是⾼效的、⾼质量的,那么这些是怎么来的呢?其中,⼈是最主要的,那么我谈到的开发者是⼴义的开发者,包括项⽬⽣产过程中全部的过程参与者。那么从⼩⽩该如何晋级为⾼⼿?不妨按照⽂中作者的指引去做做。
正⽂
1 概述
尽管有很多⼈认为开源项⽬只是需要程序员,⽽且是那种特别有经验的,然⽽,事实上是开源项⽬所需要的⼈才远远不⽌这些。⽐如测试⼈员、技术⽀持、⽂档⼯程师、营销⼈员等等。
不过本篇⽂章要说的是为开源项⽬做贡献,不仅可以提⾼技术技能,⽽且还能结识更多“臭味相投”的⼈,参与开源项⽬的⼀个障碍是不知道如何加⼊并开始使⽤,本篇⽂章就是为⼤家讲讲如何为开源项⽬做贡献。
我来举⼏个社区的榜样,参与社区⼀开始未必必须是程序员,⽐如Con Kolivas,他是⼀名来⾃澳⼤利亚的⿇醉师,他针对Linux内核开发了适合⾃⼰的任务调度器,因为现存的任务调度是通⽤的,并不能满⾜Kolivas的需求。
⼜⽐如Alexey Kuznetsov,⼀名理论物理学家,但是却也是⼀名Linux hacker,系统程序员。
还有Peter Semiletov,⼀名IT记者,撰写了⾃⼰的开源编辑器:TEA,已经⼗多年了。
Lesya Novaselskaya,本来打算是成为⼀名汽车修理⼯的,现在参与了开源项⽬的测试⼯作,还有很多很多这样的例⼦,个⼈通过在开源项⽬中到⾃⼰的兴趣,同时获得经验和乐趣。
2 撰写新的代码
参与⼀个项⽬未必从⼀开始就必须得是专家,假如你对编程语⾔有⼀定对掌握,那么可以试着去提交⼀些新的特性,并让项⽬的其它成员看到。有些开源项⽬新⼿是⽐较容易上⼿的,但是有些则拥有很⾼的门槛。在门槛较低的项⽬中,⼀般是初学者、菜鸟较多,这个时候,如果你能够帮助到其他⼈,那么你的贡献就不会被忽视。
每个开源的项⽬内部的流程都是特别的,所以在做贡献之前⼀定要⾃⼰先熟悉他们的流程。举例来说,在PostGreSQL项⽬中,所有的流程都是被严格监管的,任何代码的更改,都要将补丁发送给所有的主要开发者做深⼊的研究。然⽽在项⽬Parrot中,就允许提交到主分⽀。还有,如果项⽬使⽤的是GitHub,那么就会提倡使⽤Pull Request。总⽽⾔之,世上没有完全相同的开源项⽬贡献法则。
在你每次更改代码的时候,你⼀定要记住,你是整个团队的⼀部分,并尽⼒使你的编码风格符合项⽬所采⽤的编码风格。你所添加和编辑的代码不应和其它部分格格不⼊,你可以在代码样式⽅⾯拥有⾃⼰的偏好,但是你提交的内容必须遵循常规规则。否则的话,你这么做的意思⽆疑是在挑衅:“我不喜欢你的风格。我更好,所以像我这样做。” 这会导致很多冲突的,相信社区经理或其它相关的⼈员会站出来解决的。
3 排定 Bug 的优先级
毫⽆疑问,代码是任何软件项⽬的基⽯。然⽽,撰写代码并不是唯⼀可以参与开源项⽬的事情。技术
⽀持往往被忽视,因为每个⼈都专注于添加新功能和修复错误。但是,技术⽀持往往是⼀个新的贡献者⼊门上⼿的好的开始。
举例来说,OpenVZ在站点实现了完整的 bug 追踪,它会收集所有的已知的问题——已经修复的和尚未修复的——近⼗多年的 bug 都在,因为项⽬已经很多年了。bug 系统是在开发者和⽤户之间建⽴沟通的良好渠道。对当前请求的持续⼯作提供了巨⼤的机会。请记住,您可能需要项⽬经理提供的某些访问权限(通常以精英为基础)。
4 测试中间版本
源代码下载开源社区对测试感兴趣的同学,⾯对开源软件可能完全不知道该如何开始,但是,要知道,绝⼤多数的开源项⽬,⽆论是否具有商业背景,都是⾮常缺乏测试⼈员的。发现并将 bug 排定优先级,可以⼤⼤帮助开发⼈员节省时间。
如果有⽤户作了类似的评论:“我按照⽂档所给出的步骤,⽆法⼯作。”测试⼈员就可以去检查问题,在发送给开发者之前,尝试出为何会发⽣这种现象,测试⼈员决定那些是可再现的(以及需要那些步骤),或在特定的环境中触发了那些⾏为。即使测试⼈员并不知道这个bug 背后究竟发⽣了什么,但是缩⼩可能原因的列表对于解决实际问题的帮助是巨⼤的。⽆论您作为测试⼈员查哪些细节,将其添加到所有⼈都看得到的地⽅。
根据我个⼈的经验,开源项⽬⼀般都会⽐较缺乏资源来测试全部的功能特性,所以在主⼲作出重⼤变化之前,项⽬会试图发出号召,让⼤家尽可能多的去做测试。没有那个开源拥有充⾜的软、硬件配置的,正因为如此,诸如 OpenBSD、OpenVZ 才会召唤测试⼈员帮忙测试新的功能特性。
你可以帮助开发者测试软件在不同的平台下是如何⼯作的,如果你使⽤的是⾮标准的硬件的话,你的反馈是⾮常有价值的。如果您确认构建⼯作即使在这样的环境中,您也可以使项⽬经理更容易地评估项⽬当前的发布状态。
5 提交测试
多数项⽬针对代码测试都会使⽤软件套件,当然,也会让⽤户去做⼀些测试,使⽤诸如可定位 C 的源代码 LCOV 这样的⼯具,⽆法通过预设测试进⾏检查。然后创建⾃定义测试以覆盖这些代码部分。
6 修复 Bug、添加新功能
为开源项⽬做贡献,⼀直以来最为常见的莫过于⼯程师提交⼀个补丁,补丁要么是⽤来修复 bug 的,要么是⽤来增加⼀个新的特性的。Odin 的⾸席技术官 James Bottomley 曾经撰⽂:Linux 内核开发者30个星期的经历中写道:“那些不知道如何加⼊ Linux 项⽬的⼈们,建议去修改Bug和提交新功能。”他还专门举例说明,他⾃⼰曾经遇到 Android 下没有 SIP 客户端,然⽽他⾃⼰需要这个功能,于是写了补丁,并提交给了 SIPdroid 项⽬。
当你创建新的功能特性时,在所更改的代码中撰写相应的测试是⼀个⾮常好的⾏为。有⼀些项⽬要求所有错误修复都必须是有相应的测试⽤例的。在查看未知代码时记下笔记。即使是你⽆法修复的 bug,在提交的 Ticket 中尽可能的去详细的将之描述,因为这对于后⾯跟进的⼈会有很⼤的帮助。
7 帮助维护项⽬基础设施
你是否对 DevOps 感兴趣?⼀名优秀的 DevOps ⼯程师,是⾮常难求的(我之所以这么说是根据我⾃⾝的经验),⼀名 DevOps 可以通过开放的基础设施开发可以学习、改进其⾃⾝的技能,如、Fedora,OpenVZ 也有类似的基础设施维护,为项⽬组件设置持续集成、为 Linux 发⾏版创建组件包、开发者环境的⾃动配置这些统统都是 DevOps 的任务。
8 撰写或翻译⽂档
维护⽂档对于任何项⽬都是⾮常重要的部分,但是就这么⼀点却是经常性的被忽视。还有更加常见的情形:⽂档是针对软件⾮常熟悉的资深⼈的,⽽不是⾯对初学者和刚⼊门的。阅读诸如此类的⽂章,你的感觉是好像我应该什么都会似的。除此之外,迅速发展项⽬中的⽂档会变得过时,所以需要定期更新。
将⽂档视为不重要是犯⼤忌的事情,所有对开源项⽬的贡献都是重要的。⽂档甚⾄在某种程度上超越
了代码。举例来说,来⾃ CERN 的Ingo Schwarze,是⼀名OpenBSD 的开发者,创建了项⽬ mandoc,现在此项⽬已经不⾄于⽤在OpenBSD 下,它还被⼴泛的应⽤于各个 BSD 发⾏版,如 FreeBSD、 NetBSD、以及 DragonFlyBSD,他还整理了项⽬中现有⼿册页的格式。
因此,如果您有兴趣为项⽬做⼀些重要的事情,请帮助改进其⽂档。
9 帮助其他社区成员
随着项⽬的⽇益成长、进化,回答⽇常问题,尤其是针对新⼿的问题,就显得越发的重要。将时间花费在这⾥是值得的,哪怕是已经有了完善的⽂档。如果你能够成功的招募⼀名新的、活跃的成员,那真是善莫⼤焉!社区的每⼀位成员,⼏乎都是这么过来的。还有,任何项⽬都是由众多的⼈所完成的!
10 宣传项⽬
如果你有⾃⼰的博客的话,⽽且博客是⽤来和⼤家分享你在开源项⽬的相关经验的,那么你应该去撰写诸如在使⽤开源软件时遇到的问题,以及是如何解决的。作为博主的你,可以⼀举两得:
能够让项⽬得到更多的关注。
为未来的贡献者创造了相应的背景知识。
描述你的技术成果,研究和专业知识的博客也是分享在项⽬中获得的实际经验的好⽅法,以及在技术问题上发现的解决⽅案。(这对于你寻下个⼯作机会会⾮常的有帮助)。
许多项⽬采⽤贡献者博客帖⼦聚合器,通常称为Planet,常见的开源社区有:
OpenVZ:/
Linux Kernel:/
Perl:/
FreeDesktop:/
Gnome:/
Debian:planet.debian/
来⾃爱好者的⽂章,有的时候真的很有意思,哪怕是这位爱好者本⾝并⾮是项⽬的贡献者。
11 做⼀些设计的⼯作
设计是开源项⽬中永远的痛!这可能是很多项⽬失败的最⼤原因。令⼈厌烦的web站点,毫⽆⽣⽓的logo,都是困扰项⽬的主要原因,仅仅是贡献者们都将精⼒集中在了项⽬本⾝的功能上了,⽽不在乎它的外观如何,所以开源社区是⾮常欢迎设计师的。
StackExchange 社区的成员尝试回答了⼀些问题:「作为图形设计师该如何为开源软件项⽬做贡献?」和「如何激励图形设计师加⼊开源软件项⽬?」,当然,观点各有不同,但是可以作为参考。
总结
如果读者您有意为开源项⽬贡献⼒量的话,正在寻有兴趣的项⽬或者是帮助改进项⽬,都是⾮常受欢迎的。当然,每个项⽬有着不同的流程,⼀般情况下,项⽬都会设置如何参与贡献项⽬的指南和向导,请你仔细读⼀下,这⾥笔者为⼤家列出三个项⽬的贡献指南页⾯:
OpenStack: 如何贡献
OpenVZ 参与
如何为FreeBSD做贡献
事实上,⼀个项⽬若是专门的撰写了相关如何参与的指南⽂章,就说明这个项⽬是开放的,欢迎所有⼈。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。