华为发布全新AI开发平台 支持硬
智能硬件

开源软件入门指南:到底什么才是开源

  开源项目如今可谓无处不在,从Web到个人计算机再到智能手机,我们似乎随处可见它的身影。在今天的文章中,我们将共同探讨以下三个话题:

  开源软件是计算机软件下的一个子类,其中的源代码向公众开放并采取特定的许可机制,允许任何人对其进行代码修改并重新发布代码或者可执行文件。

  尽管开源软件通常由一群人负责开发与维护,但事实上只要有意愿、任何人都可以访问其代码并在其中表达自己的构想。

  我曾经为几个开源项目贡献过代码,而且为开源项目作贡献也确实是成为一位优秀开发人员以及回馈技术社区的最佳方式。大家可以从中接触到其他开发者编写的代码,并逐步学习如何对自己的代码加以完善。就我个人而言,看到自己与其他开发人员共同构建的开源项目能够顺利发展,实在是技术工作历程中最值得骄傲的经历。

  下面我们来看一些最具人气的开源软件方案。大家可能会对开源项目数量之庞大以及在背后支持这些项目的巨头企业表示惊讶,例如谷歌与Automattic。

  目前世界上的开源项目数量以百万计,下面我们仅列出其中最为常见以及最具知名度的一小部分:

  WordPress,网络上最流行的内容管理系统之一,目前使用者群体已经达到数百万。

  PHP是目前网络上人气最高的Web编程语言,它支持着包括Facebook在内的八成以上网络内容。

  Android开源项目是一套广为人知的移动操作系统,顾名思义属于开源项目。

  Firefox OS是一套移动操作系统,由Mozilla公司负责开发与维护。

  如果大家希望能够切实参与到开源项目当中,那么最好先与该软件背后的企业或者机构取得联系,询问对方自己能为项目作出哪些贡献。这种方式特别适合规模较小的项目或者新兴企业,不过大家需要明确一点—大部分开源项目不会为各位的工作成果支付任何报酬,我们的参与完全建立在自愿的基础上。

  遥想当年,我在参与开源项目的开发工作时,就曾经枯坐了数周之久以等待项目管理方给出的答复—事实上有一次等待周期甚至长达两个月。不过请大家稍安勿躁,这份确认邮件真的非常重要,值得我们为它付出一些耐心。收到对方的通知后,开发工作就可以正式开始了。

  另外,对于规模较大的项目,大家可以直接开始编码工作并构建起属于自己的衍生软件版本。大家还应当警惕这样的情况:如果同一个项目的参与者过多,那么我们辛苦劳作打造出的成果很可能根本不会被收录到该产品的最终版本当中。在这种情况下,请各位权衡利弊,如果不满意可以果断退出。

  如果大家正在为某个项目寻找能够指导起步工作的灵感,也千万别被自己的思路绑住了手脚。网络上可能提供大量有趣的项目供我们参考,特别是在GitHub、SourceForge以及Google Code等站点当中。

  在真正着手处理与项目有关的工作之前,大家应该首先学着熟悉项目的运作方式并了解如何对其结构进行管理,只有这样各位在需要援助之时才能清醒地意识到谁有能力帮自己渡过难关。再有,在开始工作之前明确自己要实现的目标也是个不错的主意,这样我们就不至于把项目弄得一团糟、或者把宝贵时间白白浪费在其他开发者早已实现了的现有功能身上。

  当大家已经完成了自己预期的变更或者实现了构思已久的新功能,下面要做的就是将变更内容提交至主项目、并把成果发送给项目维护人员以供审查。

  这项工作可能需要利用GitHub或者SourceForge等平台来实现。我们对项目作出的变更一般会收到来自企业或者项目管理团队的“接受”或者“拒绝”反馈,大家由此就能了解到自己的开发成果是否被实际应用在了项目当中。如果答案是“接受”,那么是时候迈向发布阶段了。如果答案是“拒绝”,我们还需要重新回到贡献阶段、用心琢磨自己的想法是不是出了偏差。

  在整个开源项目开发过程中,发布可能是其中最为复杂的一个阶段。在此期间,软件的最终版本将被提交到托管项目的代码库中,向非开发者提供的实时版本也会作出相应更新。到了这里,企业与开发人员就终于能够向繁重的工作挥手道别了,接下来软件成果将交给公众进行使用以及评判。

  我希望大家在阅读了本文之后能够对开源开发机制抱有更强的信心,更希望各位能够清楚了解要如何亲自参与到项目的发展进程当中。开源开发真的非常有趣,但有时候无法得到理想的结果也会使人感到沮丧。不过请大家始终记住一点:坚持下去,遇到障碍时不要轻言放弃—这是获得成功的必要前提。

  在本系列文章的下一部分中,我们将一同了解开源项目的许可机制以及开发人员在遇到问题时可以通过哪些途径找到答案。如果大家还有什么疑问,不妨评论栏中与其他朋友进行交流。