6 月 26 日星期一,Linus Torvalds 首次來到中國,在北京舉辦的 LinuxCon + ContainerCon + CloudOpen 研討會上開講。在 2 千人面前,Torvalds 與 VMware 的開放原始碼主持者 Dirk Hohndel 進行了爐邊談話(fireside chats),分享他如何維持開發動能、今日的 Linux 仍帶給他驚喜,以及建議新手該如何開始參與開放源碼專案。以下是他們談話中的一些精彩摘要。
Linux 開發有什麼令人驚喜之處?我覺得最有趣的,是我認為已經穩定的程式碼,還有人會繼續改良!其實有些東西我們已經很多年沒摸了,然後新來的人改善了它們,或者針對我以為沒人在用的部分提出錯誤回報。雖然現在我們有新的硬體,也在開發新功能,但是 25 年後,仍然有人們關心久遠甚至是非常基本的原始碼,而且持續改進。
如何維持自己的動力?我真的很喜歡自己在做的事情。我喜歡每天醒來以後,工作內容在技術上是有趣和富有挑戰性的,而也不要給自己太大壓力,這樣就可以做久一點;我覺得我真的在改變一些事情,這些事情不只對我有用,對其他人也很有意義。
我偶爾會在工作期間休息,例如說,我開始開發 Git 的 2 或 3 週後就休息了一陣子,但每次我休息一段時間後,就會感到無聊。當我開車到處逛一個星期時,我卻是期待回去寫程式,我從來不覺得自己需要休更久。
未來 Linux 開發的領導方式我們的作業流程不僅持續了 25 年,而且維護團隊非常強大。我們抱怨過沒有足夠的維護者──這是真的,我們「只有」數十名頂級維護者在做每天的合併(merge)工作。對於一個開源專案來說,這是很強壯的團隊。隨著這些維護者變得越來越老以及愈來越胖之際,有新的人加入進來,這些新人會需要幾年時間從新開發者成長成頂級維護者,所以我不覺得我們一定要擔心這個作業流程和 Linux 的下一個 20 年。
Linux 會被取代嗎?也許將會有積極的新專案出現,而且做得比我們的更好,但我一點也不擔心。Linux 有很多非常成功的分支版本(fork),然而人們不會把它們真的當成分裂出去,反而大家是和諧地並存著。如果有人說「這樣改寫程式,可以大幅改善核心(kernel,Linux 其實是作業系統的核心 )」,我認為那就「請做看看,證明你的論點」(Do it, prove yourself)。也許我可能認為這是一個壞主意,但你可以證明我錯了。
關於 Git 的想法我對 Git 會被廣泛傳開來運用感到非常驚訝。我很開心,因為它驗證了我做分散式開發的概念。在發表 Git 的當年,其實已經有很多不同的版本管控系統了,再推出一個新的版本管控系統,不僅困難且很難介紹給大家。所以我預計主要只會侷限用於核心的開發,畢竟 Git 是針對我們需求所做的。
在一開始的 3 到 4 年,很多人抱怨 Git 跟傳統版本管控系統差異太大了,很難用;但是大約 5 年前,事情發生了變化,開始有夠多的專案和開發者使用了 Git ,它已經變成沒什麼特殊的普通東西。就是因為大家習慣使用了,他們開始享用這種新的開發模式和使用 Git 的安全感,這意味著不會發生有程式碼破損或遺失的狀況。
註:傳統的版本管控系統都是以伺服端為核心,原始碼發展樹很難分支,當伺服器用久硬碟壞軌時就會影響到專案開發;然而 Git 是分散式的,每一個用戶端其實都是一個小小伺服端,用戶還可以為了不同的需要,自己做很多分支,或者合併進別人改良。在某些方面來說,Git 比 Linux 更為人所知。 Linux 經常隱藏起來,例如在你的 Android 手機底層就是一個 Linux ,但是你常常沒有意識到它存在;而使用 Git 時,你會知道自己正在使用 Git 。
Linux 分支當初我之所以會坐下來寫 Git,一個主要的理念是你應該要能輕易地作出自己的分支版本,然後去嘗試一些事情。有一個友善的分支產生機制很重要──你可以盡情對核心做一些有趣的改進,來證明我論點錯了。在這種情況下,你回報說實際上改進了核心,對我來說這沒有什麼不好的感覺,只要原始碼確實比較好,那我就會採用你改進過的部分,合併回 Linux 原始碼裡。這就是為什麼應該要鼓勵分支,而你也想要把好的分支源碼拿回來用。
如何成為一名開源軟體開發者對我來說,我一直有自身動機,也知道自己想做什麼。從來沒有人跟我說我應該讀什麼書、做什麼事,不過對於其他人而言,我不知道我的例子是否值得仿效。現在大概有一卡車各式各樣開源專案,如果你是一個剛起步的程式設計師,那就找到你感興趣而且可以追好幾個星期的東西吧。了解原始碼很好,你可以成為一部分程式碼的專家,但不需要做到窮究整個專案的所有原始碼,因為沒有人是整個專案的專家,但你可以好好地專注某個區域就好。
如果你可以成為社群的一份子,並提出修補檔(patch),那不僅跟編寫程式相關,更是關於開放源碼圈的社群交際。身為一名程式設計師跟他人產生連結與提升自己程式設計師的能耐,你基本上是在展現「我做了這些改進,我有能力在社群或工作中走得長遠」。你將花費相當的時間來學習一個專案,但它會帶給你巨大的成長空間──不僅僅只是在職涯,而是你在人生中參與過了不起的專案。
聽完 Linus Torvalds 的「開示」,有沒有什麼啟發呢?雖然施比受有福,但也要不貪多,一點一滴來進行,細水長流才能維持永續開發動能,而不是一瞬間就燃燒完猛發的熱情。當然最重要的,就是要找到創作東西的樂趣囉(for fun)。