唐凤:开源之道 2015
| 2015-06-01 23:52 收藏: 1
这份简报是 Allison Randal 在 OSDC.tw 2012 演讲的衍生,白底是 Allison 原本的内容中译,楬色底的图片是新加上的。
Enlightenment 这个字在十八世纪,伏尔泰、康德、牛顿说 Lumières、Aufklärung,指的是让理性的光线,照亮人类的生活,这些想法最终导致了世纪末的法国大革命,提出自由、平等、博爱的理想。
自由软体运动 30 年来,争取不受限制的网路言论、创作、近用权利,是政治概念。
后起的开源运动则是希望企业放下身段,平等对待贡献者、透过开放协作获得高效率、高品质的创作,这是共享经济的概念。
这两个概念在实务上做的事是相同的,自由软体和开源软体基本上没有差别。
但我今天想分享的是“Solidarity”这个文化概念。这个字原本是 Fraternity “兄弟之情”,但现在一般说“社会连带”,就是人和人之间的互相帮助。
科学技术社群的特点,就是可以和社会上的任何社群有连带。开源社群开宗明义说“不限制用途”,也就是和整个社会有连带。
Web 是建立在连结上的世界。我们透过 Web 和社会对话,也创造社会对话的新形式、新空间。
这不仅让我们成为更好的创作者,也让我们通过与人合作,而成为更好的人。
这条路走向哪里呢?鲁迅说:希望本是无所谓有,无所谓无的。这正如地上的路;其实地上本没有路,走的人多了,也便成了路。
开源尤其是一条创造的路,已经有的拿来用就是了,所以都是沿着前人的足迹,往无人处行去。
您可以将它想成一条修行之道,让身而为人的我们能够不断成长。
让人不断成长的是社群。每个社群都有自己线上、线下空间,就像一片园地,它的内容是有机的。
开源的道路,可以带领我们走进全世界的社群空间里。
首先,人是一切开源专案的核心。程式码是很重要,但最核心的永远是人。人们透过各种不同的方式来参与专案。
每一百个使用者里,也许有十个人会参与修正,一个人会做出新贡献。
但是随着需要花的时间减少,参与和贡献的分界也变得更模糊。
除了专案开发常见的分类之外,最重要的就是解决使用者的需求,以及使用者之间的彼此支持。
当然很多专案的开发者就是第一个使用者。
在开源发展初期,要取代的就是过去“for the People”的概念,一小群大神推出新产品让大众使用。
开源的概念是“with the People”,专案的走向由使用者、参与者、贡献者来一起形成。
您的专案也许会用到别人开发的软体,而因此接触到上游的专案,或许偶尔也会向他们提出建议和修正。
又或许您开发的是一套程式库或模组,提供给其他专案的人使用。此时,您就是他们的上游专案,他们也会用相同的方式来与您沟通。
怎么和上游沟通?源头有许多个,有沟通就是活水。
无法沟通时,可以找新的源头,或者自己 fork 一份。
所以,人们到底为什么要做开源软体呢?
如果您想理解开源模式如何运作,这是一个很关键的问题。
认知剩余,也就是“闲闲无代志”。有些人休闲娱乐是看书,有些人画画,有些人拍照,有些人专门帮猫咪图片加字幕...
有 Web 之后,到线上的空间一起做同样的事,花同样的时间,可是乐趣是加倍的。
像维基百科,大家看的时候有空改几个错字,品质就提高了。
一部分的原因,是因为这能够让人迅速接触到刺激、有趣的新鲜技术。
能够与人分享,也是一个主因:透过与人分享,我们可以认识开源专案里的同好,来提升彼此的乐趣。
不只程式、文字、影像创作共用,传统上车子、房子这类以“拥有”为主的东西,现在已经逐渐演变成大家一起分享、使用,增进彼此生活的品质,这叫共享经济。
除了互惠之外,投入开源专案的人,往往也带着分享奉献的精神。
能够伸出双手帮助别人,是身而为人很重要的一部份,所谓助人为快乐之本。
Iain King "Help someone if your time and effort is worth more to them than it is to you” 就是说你花一分力气,如果可以帮到对方两分忙,而大家都愿意互助,那整体的生活品质就会不断提升。
在零边际成本的时代,表示你用开源工具帮了一个人,他可以拿去再帮两个、四个... 指数性的成长。
除了这些内在因素,参与开源专案工作,也可以得到许多回报。
其中一项,是获得别人的敬重:当我们创造新的事物与人分享,进而吸引人们一同合作时,人们自然会认识我们的人品与才能,从而为我们自己带来成就感。
现在有 Git,要解释“协作”概念就容易多了。
每个人各行其是,但是把成果都开源出来,这样好主意自然会被认同的人吸收、合并,大家也会知道“你就是当初提出那个好主意的人”。
所以,我们应当对于加入专案的人表示尊重,这样人们才会愿意继续参与专案的活动。
每个人的贡献,就是我们认识他们的方式。认识了新朋友,又可以揪团做新的创作。
认识彼此的价值是很重要的,所谓 “I'd like to know you by your values, not by your types, classes or roles.”
欣赏别人的作品也很重要。当人们发表自己的作品,而您有机会与他们交流时,即使是一封简单的电子邮件感谢函,说“您的专案对我很重要”,也足以营造出一种正向的文化,让大家都能保有继续创造的动力。
以前我每天醒来都收到感谢函,一整天就很高兴。现在收 pull request 当然更高兴... 感谢是会传染的。
社群是建立在彼此介绍、彼此认识、彼此肯定上的。
在线上的空间里,每一次 ++,都是在建立文化,让社群参与者知道,哪些贡献是社群需要的。
一起合作时,我们可以透过彼此鼓励,让彼此变得更好更强大。
当您看到其他人正在解决艰难的问题时,您不妨鼓励他们:“你做得很棒,未来会做得更棒,需不需要帮什么忙?”
当许多人聚在一起的时候,每个人都有不同的能力。
一起工作时,可能您知道专案需要的五样东西,而其他人知道另外五样东西,您们互补长短,就有了一整套技能足以完成专案,而这是单打独斗时做不到的事情。
南非的“Ubuntu”文化说的,就是每个人不是单独存在,而是透过彼此互相支援、互相帮助,才能完成自己、超越自己。
另一件很重要的事,是鼓励彼此放眼未来、看得更远。
我们可以给其他人灵感,帮助他们解决有意思的问题。
有时,只要说“这里有个坑...”,别人就可以将它化为现实。
有些时候,您只要看看别人在做些什么,然后告诉他们您想到的关键之处,不必自己跳下去实作,也可以帮助他们走得更好更远。
在做开源工作时,我们得时常提醒自己,我们并不是孤身一人。
由于需要和许多人合作,我们最需要注意的,就是不断改进自己的沟通技巧。
README、ChangeLog、ROADMAP、FAQ、etc...
在开源社群中,我注意到一件事情:人们对如何做软体往往有很好的规划,可是却由于缺乏良好的沟通,而让彼此的计划互相冲突。
如果您朝向某个规划埋头开发,而没有与人沟通的话,很可能会踩到别人的脚。
我们就像一窝在蜂巢里的蜜蜂,要经常发出嗡嗡声,才能让彼此持续发挥功能。
认知偏差:
- 透明度错觉(以为别人知道自己的内心状态)。
- 基础归因谬误(以为别人是故意的)。
此外,我们还会不时讨论技术问题,尝试找出最好的解决方案。
在面对技术问题的时候,人们可能会战到底,为了找出“最好的解决方案”,反而让事情难以获得实质的进展。
通常只能有粗略共识。要求更一致,就变成了“粗暴共识”。
所以,我们在工作过程里,要逐渐学会接受各种各样的可能性。
对于您自己想到的解法,您当然应该持续努力,但也不妨对别人所提出的其他可能性,抱持开放的态度。
- io.js 加入 Node.js 基金会。
- 微软帮 Node.js 添加查克拉。
而在您自己的工作有所进展时,也可以透过各种通讯管道,让大家知道您做了些什么。
发电邮、写推特… 有很多方法能让人们知道您的进度。
胆子要大,脸皮要厚,有心得就分享。
说错了,别人才有纠正的机会,我们才可以学到新的事情。
“万事万物都有缺口,缺口就是光的入口。
沟通的另一个重点是问问题。社群的好处,就是可以让你找到人、找到资讯。
心得要放在找得到的地方。Permalink。
专案的关键字很重要。
资讯科学里最难的两大问题:取新的名字、决定什么时候清掉快取,还有不小心多算一个的问题。
同样的道理,当别人想要学习时,您也可以认真回应,而不是对简单的问题抛下一句“RTFM(去看该死的说明书)”就算了。
如果说“不要跟人打交道,去跟书打交道”,Social Object 的特性就不见了。
学着如何去给别人有帮助的答案,帮助他们一同走上这条开源之道,日后他们才能把这条路走得更长、更远。
取暖、小圈圈、自嗨,这些都是最基本的需求,对新手是不可或缺的。
团体心理学上叫做 Basic Assumption Group。
满足了之后,才能形成工作组,做出实际的创作,登上更高的山。
有些时候,批评别人是必要的。
虽然我们对各种可能性抱持开放的态度,但针对特定的情况,确实可能对方的资讯已经过时了。
这个时候,就要先找到彼此可以同意的一个地方。
我们不能改变别人的想法,但可以改变他的感觉:“我同意你说的概念,但是有些资源已经过期,该清 Cache 了。”
即使对方态度恶劣,也请保持优雅。有时候,脸皮厚一点也有好处。
虽然有些人的沟通方式有待加强,也许有 5% 仍有价值。
从这个角度来看,就算人们说话的时候不礼貌,您还是可以礼貌地回应他们。
拥抱小白拥抱厨。
简单来说,如果对方讲十句话,有九句是来乱的,只要认真回应不是来乱的那一句,久了之后对方就会学到,来乱是不会有人理的。
沟通的另一部分不是说话,而是倾听。
有时我们须要做的,不是告诉别人我们的想法,而是静静地坐好,让别人畅所欲言。
HTTP:
- 100 请继续说
- 200 这是我听到的意思
- 300 这件事也可以找别人说
- 不要 400 “这是你的错”和 500 “这是我的错”。
光是聆听是不够的,我们还需要有同理心,也就是设身处地的能力。
每个人在开源社群的活动,都会留下足迹。
沿着这些痕迹,想想对方当年为什么会说这些话、写这些字,慢慢就能从对方的角度,看到新的世界。
有些人以为,能够从事开源软体工作的人,个个都得是天才。事情绝对不是这样。
的确有特别专精某个领域的人,但其实任何专案,都需要各方面具有不同才能的人加入。
即使再能发光、发热的人,同时也只能往一个方向照。
开源社群的连带,像是德勒兹在《千高原》这本书里,提出 Rhizome“地下茎”的想法:往各个方向有机生长,群龙无首、自行组织,断裂之处可以冒出新芽,也就是新的社群 。
重要的是,无论您有多聪明,都要保持谦虚。谦逊的心态,让您能欢迎其他人加入您的专案。
相反的,抱持骄傲自大的态度,就等于是在跟其他人说:“我不需要你们,我用自己的方法做事就够了。”
劣即是夯。不要怕丢脸。
社群愈有多元交织的文化,参与者的基础就愈丰厚。
所谓多元交织 Intersectionality,意思是每个人在社会阶层、身份、族群、认同上,可能有些居于优势,有些居于弱势。
运用自己在弱势时的经验,就可以体会别人处于弱势的感受,也才能设身处地,形成真正的社会连带和互助。
“安全空间”这个概念是从 LGBT 同志社群来的。我在这个空间里,假设是来学习的,那对身材、肤色等无关的评论,或是性感图片等等,就是一种干扰。
这几年来,我们推广各 Conference 的筹备团队,自己讨论出 Code of Conduct 与会守则,来确保安全空间。
希望下次 Modern Web 可以有自己的 Code of Conduct。
就像每个地方有不同的语言和文化一样,相同的多元性,也体现在各式各样的开源专案里。
举例来说,Linux 社群、Perl、Ruby、Python、PHP 和 JS 社群,都各自用独特的方式来交流合作。
以前南非种族隔离时,黑人白人互不往来,但你问欧巴马他是白人还是黑人?在场的各位是白人还是黑人?
“多样性”Diversity 的概念,就是现场一千个人就有一千种人。
在这个前提上来沟通,才能互相理解彼此的世界观,而不只是互相贴标签而已。
另外,做开源专案并不只是享受乐趣而已。乐趣当然是有,但同时也有责任。
责任的“自我治理”。个人的层面,像是蕃茄钟啊,Inbox Zero 等等。
社群的层面,则是尽量把决策过程透明化,让新来的人容易接手。
为什么要这样做呢?
因为人生中还有其他的事情,像是您的伴侣、父母、孩子,以及新的社群。
所以在过程里,就要不断交棒,逐渐放手,而不是忽然留下一大块遗产给继承人。
我们要意识到这是一个循环。一开始我们加入社群,逐渐负起越来越多的责任。
但当人生到达某个阶段之后,您总会逐渐减少所负的责任。
成、住、坏、空。
开源不是零和的竞赛,没有“输在起跑点上”的问题。
只要让接棒的人知道,他可以往自己的方向跑,这样就赢在起跑点上了。
所以我们不妨想想:“哪天我无法再付出那么多心力的时候,谁来继续我的工作呢?”
能留下来的,就是我们在彼此心中的样子。
为了确保其他人能继续我们的工作,我们可以创造出持续前进的过程。
这是一个不断吸收与分享的过程。
张悬有一句歌词说“时光穿梭,我们不在左右,只在彼此其中。”
在 Social Web 的时代,我们都是彼此的分灵体。
这张图里列出了“乐趣优先”的主要元素:稳定的支持、安全的空间、不受限制的活动,就能出现新的看世界的方式。
专案像是金字塔,让社群围绕着它彼此发现、彼此学习。
开站是一时的,开源是一辈子的。
一辈子也并不长,人生像彩虹一样,原本就是向大自然借来的。
但是看到彩虹留下的感动,会激发新的创作,再感动更多人,这样的文化可以绵延不绝。
这是 Git 的 Logo,展现出人跟人之间有连带,也跟外部的社会有连带。
- 遇到新的事情时,要先 Fetch 新的状况(接受它)。
- 接下来要跟心里的想法 Merge(面对它)。
- 这时可能产生冲突,冲突是要解决的。
- 冲突解决之后才能够用行动 Commit(处理它)。
- 最后再 Push(放下它)。
一旦把 Code push 出去、开源之后,它就不是你的了。
开源的意思,就是任何人可以拿着这个 Code,向他自己想要做的创作方向,继续去创作。
所以,要放下对自己的作品的执着。
这是开源之道目前让我学习到的事情。谢谢大家。
宣讲人: 唐凤
(本简报的逐字稿、现场录音、现场录影、线上简报、下载 Keynote 档。本文经过了繁简体转换,为与讲稿匹配,未作两地用语替换。)