開源之道 2015

逐字稿活動錄影現場錄音線上簡報下載 Keynote 檔。)

這份簡報是 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,向他自己想要做的創作方向,繼續去創作。

所以,要放下對自己的作品的執著。

這是開源之道目前讓我學習到的事情。謝謝大家。