diylove/wiki

开源入门指南

Closed this issue · 1 comments

2jojo commented

你在考虑开始参与开源?恭喜!世界赞赏你的贡献。

"开源"是什么

当一个项目被开源,这意味着任何人都可以出于任何目的查看,使用,修改和分发你的项目。 这些权限通过开源许可强制实施。开源是强大的,因为它降低了事物被采纳的障碍,允许想法迅速传播。

想象你的朋友组织了一场聚餐,而你去他家厨房做了一道拿手的独家菜。

  • 每个人都尝到了菜(使用)
  • 菜的味道棒极了!大家请你分享它的食谱(浏览
  • 一个叫朋友是个厨师,他建议加一种蘑菇的话口感会更好(修改
  • 一个叫朋友想学怎么做这种菜,下周她家晚餐也想做这道菜,你还被邀请去她家晚餐(发布

相比之下,一个闭源过程就像去一家餐厅点菜,点了一个菜。

  • 你必须支付它定的价格,吃不起的人就不能吃(限制使用)
  • 餐厅恐怕不会给你菜的食谱,也不会让你随意改变菜谱的内容(限制浏览)(限制修改
  • 如果你复制了他们的保密食谱以你自己的名义出售,餐厅可能对你采取法律措施。(限制发布

闭源的菜建立交易关系、商业关系;开源的菜建立朋友关系、社区和社群关系、乃至与社会公众的关系。

人们为什么把他们的作品开源?

我从开源使用和协作中获得的最有价值的经验之一,就是在我面临许多与其他开发人员相同问题的过程中所建立的联系。 — @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 上
  • 回答处于开放状态的议题
  • 鼓励、协助创造友善的讨论区礼仪

你喜欢协助他人改善它的程式吗?

其实不一定要是开源软件的项目!

虽然很多人提到“开源”两字是指“开源软件”,其实不尽是如此,许多事物你都可以开源协作,你可以开源一本书、开源食谱、开源一张你整理的清单,都可以像开源软件一样发展你想制作的东西。举例来说:

找寻项目开始贡献

平均一个项目有28% 的贡献是随意且偶然的 ,像是写说明文件、修正错字、调整格式或翻译。

读到这里,已经对开源项目如何运作有了进一步的了解,是该找一个合适的项目做贡献的时候了!如果你从来都没有为开源做过贡献的话,那么请谨记来自美国总统约翰 F.肯尼迪的这段话:“不问国家能为你做什么,要问你能为国家做什么。

开源项目的每个面向与跨项目间都需要贡献者,先不用太钻牛角尖的去想你一定要先在那做贡献,或是做得好不好。不如从你使用过的或将来会使用到的项目开始贡献,你特别关注的项目才会是你会自愿积极参与的项目。

参与的过程中,如果有任何点子,觉得可以让项目更好或更不一样的,就依你的直觉行事。开源并不是某个会员俱乐部;它就是由你这样的人所打造。“开源”只是针对这个世界的需要修复的问题的一个梦幻术语罢了。

你或许在查看 README 的时候,发现了失效的超连结、或发现了错字。又或者你在使用的过程中发现了问题、某件你真的觉得该写进说明文件的议题,与其视而不见或请别人处理,试着自己投入看看是否有你能帮上忙的地方,这就是开源的精神……


Content based on github.com/github/opensource.guide used under the CC-BY-4.0 license.

2jojo commented

补充介绍1:https://opensource.com/life/12/4/day-my-mind-became-open-sourced

我能清楚地记得我的**变得开源的那一天。那是1973年11月一个清爽晴朗的日子。中学下课后,我打电话给我最好的朋友布鲁斯·乔丹,问:“我现在能过来玩吗?”布鲁斯回答说:“当然。”我跳上我的红色单速施文自行车,发疯似地骑了两英里去布鲁斯家。我高兴得气喘吁吁地赶到了。

布鲁斯玩起来很有趣,因为他不断发明新的游戏,无论是室内还是室外。布鲁斯的家里从来没有沉闷的时刻。所以那天我们坐下来玩拼字游戏时,布鲁斯自发地建议:“我们每人拿10个字母,而不是7个。这将大大提高游戏的玩法。”我抗议道:“但是游戏盒子上的规则说你应该带7个字母。”

布鲁斯很快回答说:“那些不是印在盒子上的规则。这些是建议的规则。你和我可以自由改进它们。”我有点惊呆了。我以前从未听过这样的想法。“但是盒子上的规则不是由比我们聪明很多的成年人写的吗?”我抗议道。

布鲁斯轻松地解释说:“发明这个游戏的人不比你或我聪明,即使他们是成年人。我们可以为这场比赛制定比他们更好的规则。更好的规则。”

我仍然有点怀疑——直到布鲁斯说:“听着,如果这个游戏在前五分钟没有更多的乐趣,我们将回到游戏规则上来。”这听起来是个明智的做法。

果然,布鲁斯的拼字游戏规则让这个游戏玩起来有趣多了。说到一半,我忍不住问他:“如果拼字游戏的规则可以改进,其他游戏的规则也可以改进吗?”

布鲁斯回答说:“所有游戏的规则都可以改进。不仅如此,你在周围世界看到的一切都是由人的心智设计的,这一切都是可以改善的。一切都可以改善。”

一听到这些话,一个霹雳掠过我的脑海。几秒钟之内,我的**就开放了。我当时就知道我的人生目标和命运:四处寻找可以改进的地方,然后改进它。

那天晚上,当我骑上施文自行车回家时,我的脑海里充满了各种想法和可能性。那天我从布鲁斯·乔丹那里学到了更多,然后我在一整年的学校里学到了更多。在“开源”这个词被创造出来的25年前,布鲁斯·乔丹开启了我的**。为此我永远感激他。

那天晚上,当我骑车回家时,我下定决心,在我的生活中,我将把精力集中在扩大校外学习机会上,因为有时最有意义的学习和实现发生在学校围墙之外。今天我在华盛顿州DC地区的一家公共图书馆工作,每天我都和路过的中小学生打招呼。偶尔我会遇到头脑容易接受大**的学生。当这种情况发生时,我在他们的头脑中种下小种子,然后送他们上路。培育这些种子取决于他们。我的角色是在他们的头脑中种下想法的种子。他们的作用是看着这些种子发芽,选择浇水或不浇水。

我从布鲁斯·乔丹那里学到了另一个重要的教训。同年,他问我是否想玩飞盘棒球。“飞盘棒球是什么?”我好奇地问。布鲁斯回答说:“我不知道,但这听起来是一个很棒的游戏。我们一边走向棒球场,一边制定规则。”

果不其然,布鲁斯发明了飞盘棒球的规则,而我们则漫步走过一个街区来到棒球场。我们非常开心地玩着那个游戏,直到我们几乎看不到夜空中的飞盘。那天我从布鲁斯那里学到的是,当你的直觉告诉你前方有非常好的事情时,不要害怕向前走。布鲁斯完全相信我们会玩飞盘棒球玩得很开心。我们做到了。

开源是一场软件运动,但也远不止于此。这是一种看待每一个人造物体和想法的乐观方式。一切都可以改善。都是可以改善的。所有需要的是一些创造力和将你的**应用于任务的意愿。

让我们试一试。每场比赛的原始规则都印在盒子上,但那些规则只是建议规则。它们是可以改进的,只要有可能就应该改进。