有时我跟一些人聊天,经常听到这样的声音:“我喜欢开源,特别是XX项目,我非常想为它做些贡献,可是我不知道怎么去做”。还有一些其他的说法,比如:“我不是一个程序员”,“我不理解这些代码,它们太庞大了”,“我不知道如何提交那些修改”等等。
为了帮助这些人,我决定写一个小系列文章(总共3篇,本文是第一篇),来谈一谈如何为开源项目做贡献。希望这个举措能够帮到更多的人,让他们意识到,小小的努力也能为开源做出大贡献。
我想谈一谈以下的几个主题:
怎样做到不写任何代码也能为开源项目作出贡献
怎样做到不了解开源项目的内部机制也能为其贡献代码
怎样为开源项目贡献代码 - 报告bug以及创建代码补丁
这系列文章将包含非常多的实际的东西让你开始参与开源。这个主题本身可以延展的很广,甚至人们可以就这个话题写本书,但为什么还要浪费时间来写书呢,有非常多伟大的开源项目等待你尽快参与。
所以,当你找到一个非常喜欢的开源项目,可能它能帮你节省许多时间,或是将许多不快从你的生活带走,或者帮你省钱,你可能尊敬并且感谢这些贡献自己业余时间的人,以至于你可以享有这些成果。你感到你应该偿还他们,或是偿还整个社区,但你并不想或是不能完成看起来是最重要的事情,例如修复bug或是增加新组件等等任务,于是你选择了不参与这个项目。但你应该知道,撰写代码并非是回馈开源项目的唯一方法。甚至,无须写一行代码,你也能为整个项目做出很大的贡献,而这也只需消耗你小量的时间。
反馈
给予反馈,这是非常细小的事情,但同样可以给开源项目以巨大的帮助。每一个开源项目,要想良好地运行下去,都需要用户的反馈。你希望新组件如何工作?你觉得现有的组件怎么样?在下一版本中,你最想看到什么样的新组件、新特性?项目怎样才会让你觉得逻辑性更强?开发者经常向社区提出这类问题,说出你的想法,你就能帮他们做出正确的决策。
有些项目在uservoice.com上建有专门的网站,使用uservoice.com来提供反馈是非常简单的,只需要你点击即可表态。在google讨论组或是项目的博客上,可以提出更深入的问题讨论。占用你一小刻的时间,写一些反馈,可能会让你的观点大放光芒。反馈看起来事小,但却是最重要的事情,因为它保证了项目在朝着正确的方向努力。
帮助他人
商业软件的背后往往是一些大的公司,他们雇佣了一些人员,针对产品撰写一些文稿。例如写文档,在杂志上发表相应的文章,通过写博客进行宣传,或是在会议上发言,写书,在论坛上答疑等等。可开源项目常常只有少量志愿者撰写代码,文档,写博,回答问题,而且他们往往是利用工作时间之余来做这些事情。
所以,你可以贡献你的一些时间,接手一些非编码的任务。例如订阅该项目的google讨论组,或者去一些你常去的Q&A网站解答别人对于该项目的一些疑问。如果有些问题,恰巧你知道答案,那么请回答那些提问者,而这也不会浪费你太多的时间,同时提问者会非常感谢你的帮助。通过说出来你所知、所想的,你将会更好地理解该项目,这同时会巩固你的专业知识,在社区中你也会赢得更多的赞同与尊敬。像180link.com这样的站点,如果你的回答被提问者采纳,你还将获赠分数(类似百度知道)。
撰写文档
如果你发现该项目某些方面使用起来比较费劲,而文档又不足以帮助你克服问题,你可以帮忙改善该项目的文档。许多项目以wiki的方式来撰写文档,这也意味着给你开放了编辑以改善它的权限。要记住,文档是人们产生问题时第一个会求助的对象。如果你写博客,你可以在博客中记录问题的解决方法,再将你博客中的相关部分增加到文档中,保证你撰写的方式与文档规范一致,并保持文档跟得上项目的进度,你会发现,改进文档是如此轻松简单。
不仅仅是代码
开源项目不仅仅是编码和文档,而是有很多事情等待你去做,比如,改善该项目网站的视觉效果,设计站标,这都是重要的工作,当然,大家也经常忽视这些问题。
写博,在用户讨论组会议中发言
如果你拥有博客,请写一写与项目相关的文章,一些微不足道的问题,也请你写上具体的解决方案,如果解决这个问题花了超过15分钟,那么将它写出来就有价值,因为会有非常多的人碰上与你相同的问题。
如果你喜欢这个项目,请帮忙做做宣传,让其他的人也加入。在你加入的用户讨论组中发表相关的话题,向人们解释这个项目哪些地方让你喜欢,它帮助你做了些什么事情,为什么你喜欢它。支持并宣传优秀的项目,会让更多的人参与进来,随着社区的扩大,会有更多的人了解它,使用它,并为它做出贡献。
捐款
开源项目往往都是免费的,但是开发并维护它们可是非常耗费钱和精力的。很多人没有意识到,捐款能非常有效地帮助项目取得进展。如果你帮忙解决部分服务器主机托管与空间费用,硬件以及宽带费用,会让项目的维护者有更大的作为。
往往,开发免费的项目,而使用的开发软件不是免费的。你希望X项目发展Z功能的Y版本?那么请捐款让开发者可以购买Z的许可,这是最好的贡献。在许多与微软的软件相关的开源项目中,开源项目由非常多非开源项目组成,这种情况是非常常见的。
捐款同时能让一些开发者全职进行开源项目的开发,最著名的例子是IMeta公司,该公司捐助了他们最优秀的开发者中的一位,让其全职在一个开源项目上工作了数月,以让LINQ支持NHibernate。