开源项目与开源社区

一个在封闭项目中只靠自己的开发者,将远远落后于这种开发者:他们知道如何创建一个开放的、有改进能力的环境,在这个环境中,上百人(甚至上千人)反馈并提供设计空间拓展、代码贡献、bug 定位以及软件的其他改进 -- 埃里克·雷蒙《大教堂与集市》

前言

最近@曾老师在学校里为大二学生开设了一门选修课:开源软件开发技术(2019 年秋季项目设计),这门课将带着大家接触开源文化、构建开源项目、参与开源社区。

课程计划采用类似编程马拉松的形式在三个周末完成项目。

编程马拉松(hackathon)是一种活动。在该活动当中,编程者在一段时间内,以合作的形式去进行编程、合作是其灵魂。编程马拉松这个术语是个合成词,它由编程(hack)马拉松(marathon)两部分构成。这个术语诞生于 1999 年。OpenBSD 于 1999 年 6 月 4 日在卡尔加里举办的一次密码学开发活动上第一次使用了该术语。

开源软件开发技术课程一共邀请了 14 位开发者担任校外导师,他们中有些来自大公司: 阿里巴巴、字节跳动、亚马逊...有些则来自很酷的创业团队:Peak Labs...他们的共同特点是:热爱开源,业余时间积极参与开源社区相关的工作。

有个周末在爬白云山的时候,@曾老师打电话跟我聊起这个话题,他觉得 CodeLab Adapter 是个很合适的项目,学生通过构建 CodeLab Adapter 插件,可以了解到开源软件的构建方式以及开源社区的典型协作方式, 这些学生也是 CodeLab Adapter 的潜在志愿者。我觉得十分契合,便说乐于参与,于是也成为校外导师之一。

目前有 200 多名学生选修这门课, 他们根据自己的兴趣选择感兴趣的项目,通过参与这个项目,了解开源项目的构建过程和开源社区的运作方式。目前可选的一些项目包括:

  • Wordpress Plugin:全球每三个网站就有一个是 WP
  • Codelab Adapter:AIOT 连接器
  • iOS/Android APP
  • 机器学习模型
  • ...

开源社区

兴趣驱动

如何参与开源社区?

这是个很大的问题,我能想到这个问题最好的答案是:你应该带着这个问题去开源社区里问问大家

开源社区有点像一个集市(参见大教堂与集市),它有些嘈杂和混乱,对于那些热爱秩序和围墙花园的人来说,一开始恐怕会有些不适应。可一旦你习惯之后,就会发现开源社区的居民大多友好、开明而善意。他们中的许多人都乐于给陌生人提供力所能及的帮助。

在你一开始还不清楚去哪个社区,以及如何提问时,如何参与开源社区呢?

追随你的兴趣是我喜欢给出的建议。

开源社区里的大多数人都是由兴趣驱动着,即便在周末和旅途中,他们也可能混迹在社区里,社区已经成为他们的一种生活方式,当然也包括我自己。

在你不知道干嘛的情况下,追随自己的兴趣,大多时候都是很好的选择。

如果你不知道自己对什么感兴趣又该怎么办呢?

我喜欢乔布斯对此的回答: 你应该花时间去找到它,还有什么比这更重要的事呢?关于这个话题,乔布斯在斯坦福大学毕业典礼致辞也许值得一看。

大教堂与集市里提到说兴趣往往意味着效率的巅峰,这句话在某种程度上解释了为何开源会成为整个软件行业的基石和创新来源,它是由一群充满热情的人驱动的。

参与社区

你对某个项目有了兴趣,在多数情况下,你首先是它的用户,作为用户,在使用软件的过程中,常常会遇到一些问题和困难,此外也可能会发现一些软件的 bug,这些都是参与社区的良好契机。

你可以到社区里提问,描述你遇到的问题,以及你的困惑。

在提问之前,开源社区居民的习俗是先在搜索引擎里搜一下问题解决方案,如果能自行解决再好不过了,社区鼓励你把解决方案写成博客,分享出来。如果你自己努力了但还是解决不了,尽可大大方方去社区寻求帮助,大多数情况下,大家都乐于相助。

那么社区又在哪里呢?它是个什么组织形式?

社区是个抽象概念,它可能有多种形式,可能是一个微信群、一个邮件组、一个论坛...这取决于你使用的软件,一般在在项目主页里会提到社区地址。

今天很多开发者会直接使用Github作为他们的根据地(CodeLab 就是), 在你的开源旅程里,Github 是随处可见的风景,所以我们接下来先了解一下它。

Github

你可能在很多地方都听过Github,尤其是最近的中美贸易战,让许多非技术社区的人也开始关注Github

Github只是一个普通网站,它和你用过的哔哩哔哩知乎是一类东西, 都是一种能够使用浏览器打开的东西。它的特点在于这个网站上,存放了大量开源项目的源代码。目前,一些国家将宪法也放在上边,有些小说作者开始使用它来管理小说草稿。

Github主要是个技术社区,它是很多开源项目的根据地,而开源项目又是整个软件行业的基石,这就是为何中美贸易战,很多人担心Github被封的问题,人们担心这会影响整个软件产业,这也可以看出今天开源项目在人们心目中所占据的地位。

Github 是个源代码托管服务平台,你除了可以在这儿参与开源项目之外,也可以把自己的构建的项目在这儿发布,向全世界开源。

发布这个词听起来很有舞台感,它让你想到聚光灯下的舞台,巨屏上的 PPT,偌大的黑底 PPT 上写着的颠覆二字,以及台下即将爆发的掌声。这种仪式感也让人想到,恐怕我与发布二字是扯不上什么关系的。

但请放心,在 Github 中发布一个开源项目,就跟在朋友圈发布一个状态差不多简单。

至于如何使用Github, 这两个链接提供了很棒的参考:

开源项目

随着你对一个项目的使用和了解,你开始有了自己的需求,你为开源软件增加了新功能,或者为它写了新的插件,又或者你干脆不满于手头上在使用的软件,准备打造一个更好的,这些工作你都可以发布到开源社区里(诸如发布到 Github)。

构建和发布一个开源项目,往往从成为一个开源项目的用户开始。

如果你的项目帮助其他人解决了 ta 遇到的问题,戳中了 ta 的痛点,当你将开源项目发布到开源社区里之后,这些感兴趣的人就会加入进来与你一起改进它,推动它的前进。

今天全球有数十万人参与到 Linux 项目中,共同推动它的前进,无论是军舰、卫星、手机平板还是你厨房里的电器、很可能都运行着这份来自开源社区的礼物。这也许是迄今为止这个星球上发生的最大规模的自发组织,它松散但有效。(大教堂与集市)。

那么你要如何发布你的开源项目呢?

有许多的选择,在今天,人们比较喜欢把它发布在Github上,所以如果你对开源感兴趣,熟悉一下如何使用Github总是值得的,它只是一个网站,不要有什么心理负担。

我将在下一篇文章里,构建一个 CodeLab Adapter 插件,并将其作为独立的开源项目发布到 Github 上。

延展阅读

参考