开源入门指南 - Wed, Sep 1, 2021
你在考虑开始参与开源?恭喜!世界赞赏你的贡献。
“开源"是什么
当一个项目被开源,这意味着任何人都可以出于任何目的查看,使用,修改和分发你的项目。 这些权限通过开源许可强制实施。开源是强大的,因为它降低了事物被采纳的障碍,允许想法迅速传播。
想象你的朋友组织了一场聚餐,而你去他家厨房做了一道拿手的独家菜。
- 每个人都尝到了菜(使用)
- 菜的味道棒极了!大家请你分享它的食谱(浏览)
- 一个叫朋友是个厨师,他建议加一种蘑菇的话口感会更好(修改)
- 一个叫朋友想学怎么做这种菜,下周她家晚餐也想做这道菜,你还被邀请去她家晚餐(发布)
相比之下,一个闭源过程就像去一家餐厅点菜,点了一个菜。
- 你必须支付它定的价格,吃不起的人就不能吃(限制使用)
- 餐厅恐怕不会给你菜的食谱,也不会让你随意改变菜谱的内容(限制浏览)(限制修改)
- 如果你复制了他们的保密食谱以你自己的名义出售,餐厅可能对你采取法律措施。(限制发布)
闭源的菜建立交易关系、商业关系;开源的菜建立朋友关系、社区和社群关系、乃至与社会公众的关系。
人们为什么把他们的作品开源?
我从开源使用和协作中获得的最有价值的经验之一,就是在我面临许多与其他开发人员相同问题的过程中所建立的联系。 — @kentcdodds, “参与开源对我来说太棒了”
个人或组织为何想要开源一个项目,有各种各样的的原因,例如:
-
协作: 开源项目可以接受世界各地人们的修改。 例如 Exercism 就是一个拥有350多个贡献者的练习平台。
-
采用、修改、重建: 任何人几乎可以出于任何目的使用开源项目。人们甚至可以使用它来构建其他东西。例如,WordPress 就是派生自一个名为 b2 的现有项目。
-
透明度: 任何人都可以检查开源项目是否有错误或不一致。 透明度对保加利亚 或美国等政府、银行或医疗保健等受监管行业以及 Let’s Encrypt 等安全软件都很重要。
开源并不仅仅限于软件。您可以开源任何事物,从数据集到书本。 查看 GitHub Explore 开找找有什么是你可以开源的。
开源是指"免费"吗?
开源最大的吸引之一是它不花钱。 但是,“免费"只是开源的总体价值的一个副产品。因为开源许可证要求任何人可以几乎出于任何目使用,修改和共享您的项目,项目本身往往是免费的。 如果该项目花钱使用,任何人也都可以合法地复制和使用免费版本。因此,大多数开源项目是免费的,但"免费"不是开源定义的一部分。 有些方法可以通过双重许可或有限功能间接地为开源项目收费,同时仍然遵守开源的官方定义。
发起自己的开源项目 无论结果如何,启动您自己的项目来了解开源的工作原理是一个好方法。如果你从来没有创建过一个项目,你可能会担心人们会说什么,或者是否有人会注意到。 如果这听起来像你现在的状态,别担心,你并不孤独!开源工作就像任何其他充满创意的活动,无论是写作还是绘画。 向世界分享你的作品会让你提心吊胆,但唯有练习能够让你的感觉变好的方法 - 即使你没有观众。
从加入其他项目开始进入开源世界
人们是通过投身于某个特定项目而进入黑客文化的,每个项目都是一个鲜活的社会语境,想要成为项目的贡献者,一个人需要在技术上和社会上都对它进行研究和理解。新手正是通过项目团队,从有经验的老手经历过的事件中获得阅历。 ———— Eric S.Raymand 《大教堂与集市》
如果你的目标是学习如何与他人合作或了解开源的工作方式,请考虑为现有项目做出贡献。从你已经使用并喜欢的项目开始。像修复拼写错误或更新文档简单的事也能为项目做出贡献……
为何要为开源贡献心力?
在开源项目[freenode]的工作让我学习到许多技能,这些技能在我往后大学研究及实际工作上有许多帮助,我在开源项目的贡献跟收获一样多!— @errietta, “为什么我热爱贡献心力在开源软件上” 透过为开源贡献力量,能从中学习、帮助他人并且从中累积相关技能的经验 - 任何你能想像得到的技能。为什么会有人为开源做出贡献?有数不清的原因!
- 巩固现有技能:无论是撰写程式码、设计使用者介面、平面设计,撰写文章或是组织活动,只要你有意愿实践,你总能在开源项目中找到自己的位置。
- 认识那些与你有相似兴趣的人:一个友善、温暖的开源社群会让人们持续的参与。许多人透过参与开源建立了深厚的友谊,可能是在一次的技术研讨中,也可能是在线上聊天室的闲聊中发生。
- 寻找导师,并且尝试帮助他人:与他人在共享的项目中工作,你会需要向他人解释自己是如何做的,同时也需要向他人求助。每个参与开源的人都教学相长。
- 在公众建立你的名声(以及职业名声):根据开源的定义,你在开源里的所有工作都是公开的,这也意味开源项目是一个能好好展现你实力的地方。
- 学习人际交往的能力:开源为练习领导及管理的能力提供了很好的机会。例如如何解决冲突、组织团队以及如何为工作的优先顺序排列。
- 鼓励作出改变,哪怕只是很微小的改变:你不一定要持续不断的贡献开源才能享受参与的乐趣。你是否曾在某个网站上发现拼写错误,并希望有人能够修改它?在开源项目中你可以亲自修正这样的错误即可。开源让人们自在的做事,而这正是这个世界应有的体验。
如何贡献开源项目?
如果你是一名开源世界的新手,可能会对贡献的流程心生畏惧。如何找到适合彼此的项目?不会写程式又想参与怎么办?万一中间出了差错怎么办?不用担心!条条大路通罗马,有很多能参与开源项目的方式。以下是一些实用的技巧,帮你快速的获得经验。
你不一定要会写程式才能贡献
对开源做出贡献常见的误解之一就是:要写程式才算贡献。其实项目里不需编码的工作也是经常被忽视的部分。你对项目所做的非程式类贡献,其实是对项目来说莫大的帮助!
我被大家所熟知是因为为 CocoaPods 做了一些事, 但大多数人并不知道我实际并没有为 CocoaPods 本身做了什么,我多数的工作是撰写说明文件与品牌宣传的事情。— @orta, “将自己预设为开源软件”
即便你乐于写程式,撰写程式以外的贡献对于项目来说也是举足轻重的,维系这样的关系也能让你获得与项目的其他成员共事的机会。
我第一次接触 Python 开发团队(简称 python-dev)是在 2002年6月17日,当时我向邮件列表寄了一份请求接受补丁的信,接着我决定为工作小组搜集整理邮件摘要,后来他们甚至给了我一个机会去谘询某个主题,这当中的关键是,我能注意到有人指出哪些东西必须要处理。— @brettcannon, “系统维护者的故事”
你是否热衷于规划活动?
- 为项目举办一个工作坊或线下聚会,例如 @fzamperin 为 NodeSchool 所做的
- 为项目举办一个大型会议﹝如果它有需求的话﹞
- 帮助社群成员找到合适的会议,或是协助成员找到窗口提交演讲的提案。
你是否喜爱设计?
- 重新布置布局以提高项目的可用性
- 做一份使用者调查去整顿与完善项目导览或菜单,像 Drupal 所提出的建议
- 整理一个风格指南,以帮助项目有一致的视觉设计方针。
- 透过艺术创作设计T恤或划一个新标志,就像 hapi.js 的贡献者所做的
你是否热爱写作?
- 撰写和改善项目的说明文件
- 策划一个资料夹来搜集项目的实际应用案例
- 办一个项目的电子报,或者搜整邮件列表的摘要
- 写一个项目教学,就像 PyPA 的贡献者做的
- 翻译项目的说明文件
讲真的, [说明文件] 是至关重要的。目前 Babel 的说明文件已经很棒了,这也是它杰出的特色之一。有些段落还需要加强或者补上一个句子,有些段落是很值得赞赏的。— @kittens, “贡献者召集令”
你喜欢组织活动吗?
- 指认出过去讨论过或重复的议题、推荐一个新的议题类别,让事物井井有序
- 浏览在开放状态(open)的议题,并建议将已经处于开放状态很久的议题设为已结束(closed)就像 @nzakas 在项目 eslint 做的
- 鼓励最近才刚提问的人将疑问阐释清楚,加速讨论的进展
你喜欢写程式?
- 尝试解决一个开放状态(open)的议题(issue) 就像 @dianjin 在 Leaflet 做的
- 想想自己是否能协助开发一个新功能?
- 将项目建置变得自动化
- 改善工具及测试方法
你喜欢帮助他人?
- 回答有关于项目的问题,例如在 Stack Overflow( Postgres 的展示范例 )或者 reddit 上
- 回答处于开放状态的议题
- 鼓励、协助创造友善的讨论区礼仪
你喜欢协助他人改善它的程式吗?
- 为他人贡献的程式码做程式码审查
- 写一个教学向大家介绍如何使用该项目
- 当其他贡献者的导师, 像在 Rust 项目中 @ereichert 为 @bronzdoc 做的
其实不一定要是开源软件的项目!
虽然很多人提到“开源”两字是指“开源软件”,其实不尽是如此,许多事物你都可以开源协作,你可以开源一本书、开源食谱、开源一张你整理的清单,都可以像开源软件一样发展你想制作的东西。举例来说:
- @sindresorhus 搜集了 “惊奇”(awesome) 列表
- @h5bp 维护了针对前端开发者的面试题
- @stuartlynn 和 @nicole-a-tesla 搜集了关于海鹦的小知识
找寻项目开始贡献
平均一个项目有28% 的贡献是随意且偶然的 ,像是写说明文件、修正错字、调整格式或翻译。
读到这里,已经对开源项目如何运作有了进一步的了解,是该找一个合适的项目做贡献的时候了!如果你从来都没有为开源做过贡献的话,那么请谨记来自美国总统约翰 F.肯尼迪的这段话:“不问国家能为你做什么,要问你能为国家做什么。”
开源项目的每个面向与跨项目间都需要贡献者,先不用太钻牛角尖的去想你一定要先在那做贡献,或是做得好不好。不如从你使用过的或将来会使用到的项目开始贡献,你特别关注的项目才会是你会自愿积极参与的项目。
参与的过程中,如果有任何点子,觉得可以让项目更好或更不一样的,就依你的直觉行事。开源并不是某个会员俱乐部;它就是由你这样的人所打造。“开源”只是针对这个世界的需要修复的问题的一个梦幻术语罢了。
你或许在查看 README 的时候,发现了失效的超连结、或发现了错字。又或者你在使用的过程中发现了问题、某件你真的觉得该写进说明文件的议题,与其视而不见或请别人处理,试着自己投入看看是否有你能帮上忙的地方,这就是开源的精神……
Content based on github.com/github/opensource.guide used under the CC-BY-4.0 license.