Repository navigation
what is opensource

术语“开源”指的是人们可以修改和共享的事物,因为它的设计是公开可访问的。
上世纪末的天才黑客们创造了 Unix, GNU, Linux 等家喻户晓的传奇软件,同时也带来了开源软件这个概念;开源软件的源代码被开放给希望查看、复制、学习、修改或共享该代码的其他人使用,通常受到开源软件许可证的保护
经过无数的开源贡献者几十年不断修复、优化、衍生,如今的开源软件已经成为了计算机世界稳固的基础,在一切与计算机相关的领域活跃。
为开源贡献力量,得到的回报就是能够学习到很多、受教很多、且能够锻炼任何你能够想到的经验。
为什么会有人为开源做贡献?这可能是很多人都不明白的地方,这里不妨列出一些!
无论是撰写代码、设计用户界面、图形设计、撰写文档、亦或是组织活动,只要你想做,你总能在开源项目中找到自己的位置。
开源项目一般都会有一个和谐、热心的社区,以让大家团结一致。实际上,开源界经常发生这样的情形,很多人的深厚友谊都是通过共同参与开源所建立起来的,至于具体的方式,可能是在一次技术研讨会上相谈甚欢,也可能是一直在聊天室中探讨问题。
和他人共同在一个共享的项目下工作,这意味着需要向他人解释清楚自己是如何做的,同理,也需要向他人求助,询问别人是如何做的。相互学习和彼此教学可以让每位参与者都能满载而归。
根据开源的定义,你在开源下所有的工作都是公开的,这也就意味着开源项目是一个很好展示你实力的地方。良好的开源履历也会成为你简历的重大亮点。
如果你是一名开源界的新手,可能会对贡献的流程心生畏惧。比如:该如何找到正确的项目?不懂编码又想参与怎么办?万一做错事情了怎么办?
其实没有关系的啦!条条大路通罗马,开源项目有太多的路径可以参与!以下是一些实用的技巧,帮助你快速的获得经验。
对于为开源做贡献常见的误解就是:为开源做贡献必须得提交代码。事实上,代码固然重要,但是项目中不需编码的重要部分经常被忽视。你若做了这部分,对于项目来说可是莫大的贡献,而这根本就不需要什么撰写代码!
即使你是一位开发者,非代码的贡献对于项目来说也是举足轻重的,尤其是对于社区的其他成员来说。用心维系这些关系能够让你有工作到项目其它部分的机会。
- 重新布置布局以提高项目的可用性
- 进行用户研究以重新组织和完善项目的导航或菜单
- 整理一个风格指南,以帮助项目有一致的视觉设计
- 创建t恤的艺术或一个新的标志,就像 hapi.js 的贡献者那样
- 参与 GSoC 一类的开源夏令营
- 找到一个打开的 issue 并解决它
- 想一想你是否可以帮忙写一个新的功能
- 自动化项目设置
- 改进工具和测试
- 为他人的提交审核代码
- 为如何利用项目撰写教程
- 为其他贡献者做导师,正如 @ereichert 为 @bronzdoc 在 Rust 项目中所做的那样
尽管人们一提起”开源”二字,默认就是指开源软件,其实不尽然,开源可以是任何事情的修饰,而不仅仅是指软件。比如图书、食谱、列表、以及任何可以开源的项目类别。
比如 JNU-EXAM 是一个致力于解决江南大学校内考试资料获取难、信息不对称问题的开源项目,作为江大学子,你可以贡献该项目未收录的试题或笔记等等。
为开源做贡献,除了单词拼写错误之外,大多数时候就像是走在陌生人中间,浑身上下不适。这就像人们已经讨论西边的事情讨论得非常深入了,你突然开始讲东边的事情,肯定会让人感到不舒服。
与其盲目的在项目中游荡,不如静下心来学习规则。这样反而会让你的想法被注意到,也会有人听到你的声音。
在某一个开源项目扎根多年,这意味着你只是对这一个开源项目无比的熟悉。若是切换到不同的项目,可能会发现完全是另外一回事,所谓的使用词汇、习惯用语、沟通方式都发生了变化。
然而,很多的开源项目还是遵循类似的组织结构的。理解不同的社区角色和全部的流程,可以很好的帮助你快速的切入新的项目。
一个典型的开源项目均会有如下类型的人:
- 作者: 项目的创始人或创始组织
- 归属者: 代码仓库或组织的管理员(不一定和作者是同一个人)
- 维护者: 贡献者,负责项目的未来走向和组织的管理(他们通常也是项目的作者或归属者)
- 贡献者: 只要是为项目做出了贡献,就算是贡献者
- 社区成员: 那些使用项目的人们。他们或许是积极的讨论者,又或者是为项目的方向提出意见的人。
一个较大的项目,可能下面还会细分子社区,或者是针对不同的任务分成不同的小组,比如工具小组、分流、社区事务、以及活动组织等。径直到项目到网站,找到”团队”页面,或者是查看治理文档,从而获得类似的信息。
靠谱的开源项目,一般都会有文档的,这些文档文件通常会在代码仓库的顶级目录列出。
- LICENSE: 根据开源软件的定义,每一个开源项目必须是有开源许可协议的. 可以这么认为:假如说某个项目源码开放,但是没有任何的许可协议,那么它就不能叫做开源。
- README: README 是一个介绍性的说明文件,对初次光临社区的人们表示欢迎,它通常会解释项目有何用处,为何发起,以及如何快速入门等。
- CONTRIBUTING: README 文件帮助人们来认识项目,而 CONTRIBUTING 文件则是告诉人们对项目如何做贡献。它解释了目前项目需要什么样类型的贡献者,社区的流程是什么样的。并非所有的项目都会有这个文件,它某种程度上也是展示项目对于贡献者的友好程度。
- CODE_OF_CONDUCT: 顾名思义,即是一些参与社区时的一些礼仪、说话方式、行为等,让社区形成一种友好的氛围,不是所有的项目都会撰写行为准则文件,它某种程度上也是展示项目对于贡献者的友好程度。
此外,开源项目还会利用如下一些工具来进行组织讨论,阅读这些归档对于理解社区的想法、是如何工作的有非常大的作用。
- Issues: 这里是人们讨论项目相关问题的地方。
- Pull requests: 审核代码、以及相关的问题讨论。
- 论坛或邮件列表: 一些项目会使用会话式的主题(例如 “How do I…“ 或 “What do you think about…“ 来替代 Bug 报告或特性请求)。然而有一些项目关于讨论全部使用问题追踪。
- 如果你初次接触开源,且对技术充满热情,你可以学习搭建你的 blog,或者将你已有的 blog 通过 PR 的形式提交到我们社区的博客列表,详见做出你的第一个 Pull Request!
- 隶属于我们社区维护的开源软件
- 正规开源活动,通常还能获得一定报酬,见常见开源活动汇总
- GitHub 的开源社区,从你每天都在用的项目,你擅长的技术栈入手,推荐阅读:关于 Yak Shaving