我在Linux核心社群當開發者 | Q推薦

今年 5 月,經過 Linux Kernel 社群成員的共同努力,Linux Kernel 5。10 維護週期最終確定從 2 年延長至 6 年。作為 Linux 社群的主要貢獻者之一,華為公開承諾投入資源,協助進行 Linux Kernel 測試和補丁回合。基於 Linux 核心的 openEuler 作業系統於 2019 年正式開源,至今已經發布三個版本,按照版本計劃,openEuler 22。03 將於明年釋出,並將基於 Linux Kernel 5。10 構建。openEuler 的快速發展離不開 Linux 核心的穩定開發,更離不開核心開發者的辛勤付出。

幾千名核心開發者維護著有近 3000 萬行程式碼的 Linux 核心,保證了無數裝置、機器和系統的正常運轉。正因為這些開發者參與社群,貢獻社群,Linux 才能從一個個人專案發展成世界級的開源專案。核心開發者怎樣參與社群?如何為 Linux 核心社群做貢獻?它們在社群都有哪些收穫?……帶著這些問題,InfoQ 與三位 Linux 核心開發者兼 openEuler SIG 組成員聊了聊。

1

俞玉芬:90 後的女性核心開發者

俞玉芬參與 Linux 核心社群已有三年時間,累計為社群貢獻了 60+ 個補丁。

我在Linux核心社群當開發者 | Q推薦

俞玉芬

2017 年從中國科學技術大學碩士畢業後,俞玉芬進入了華為,在核心儲存專案組工作。她所在的專案組主要關注 Linux 儲存領域,她具體參與的是 Linux 儲存 IO 棧相關工作。對她來說,“以前沒有接觸過 Linux 社群,只是研究方向與核心有關”。在核心儲存專案組,團隊氛圍非常開放,奉行“來源社群,回饋社群”的理念,鼓勵大家多給 Linux 社群做貢獻,於是俞玉芬開始接觸 Linux 社群。

不過,想成為 Linux 社群開發者並不容易,她雖然訂閱了很多與儲存相關的社群郵件,“但基本看不懂郵件裡討論的內容。同時,看核心程式碼時,我覺得程式碼非常好,沒什麼 bug。並且,我也沒有什麼新想法,完全沒信心可以參與進來”。

俞玉芬向 InfoQ 坦言,“整體感覺核心社群的門檻特別高,好難!”

但是,社群文化給了她信心,“感覺社群的技術氛圍很好。這是一個非常好的學習平臺。如果能靜下心來慢慢看程式碼,可以學到很多新東西,從而激發自己的興趣”。Linux 核心很複雜,涉及領域非常多,她逐漸意識到要先從理論上了解這個功能或特性,再去看程式碼。只有不斷地學習,才能慢慢深入,這是一個循序漸進和不斷積累的過程。

入門後,她嘗試為社群做貢獻,2018 年向社群提交了第一個補丁,這個補丁是關於 F2FS 的小特性,讓 F2FS 支援 cgroup writeback。為什麼提交這個補丁?她說:“看程式碼時,我發現其他檔案系統都支援這個特性,但是 F2FS 是不支援的。在跟內部的技術專家討論後,我們覺得可以做。然後進行開發,本地驗證。”

由於經驗不足,她寫出來的補丁存在一些問題,內部的技術專家就幫她 Review 程式碼,最後補丁修改了好幾遍才提交到社群。而維護者認為這個補丁挺有價值,就接受了它。在她看來,為社群做貢獻需要堅持,不能輕言放棄。這個感悟源自她的親身經歷:

2020 年,產品在 ARM64 平臺上使用 RAID5 時,我發現 RAID5 在 PAGE_SZIE 為 64KB 的情況下存在寫放大問題,進而影響上層應用。並且,這個問題也存在於社群主線程式碼。經過跟社群討論後,我認為修復這個問題很有價值。之後,與技術專家一起討論方案。在確定方案後,我首次向社群提交了一組特性補丁集。剛開始,並沒有信心補丁集能被接受,經過反覆討論,補充測試資料,針對社群提出的反饋一遍一遍的修改,一直到第八個版本才被接受,最終合併到 Linux 5。10 版本。從開始投入到最終合併補丁,前後花費半年時間。這個過程需要韌性,需要堅持。如果你不堅持,那這件事最終就沒了。

據 InfoQ 獲悉,從 2018 年到現在,俞玉芬累計為社群貢獻了 60+ 個補丁。看到自己提交的補丁被接受,得到別人認可,“覺得自己的工作挺不錯,有價值”。

她說:“我能從 Linux 社群日誌裡找到屬於自己簽名的程式碼,它們在全世界被使用,跑在無數的機器上。我覺得挺有成就感。“

從個人角度來說,參與社群,貢獻社群,也給俞玉芬的成長帶來了極大幫助。在她看來,一是透過參與社群,提升了自己的溝通表達能力。因為核心社群的日常溝通主要透過郵件,“剛參與社群時,寫郵件經常‘詞不達意’”,而現在則學會了用郵件進行高效溝通。二是透過貢獻社群,學習優秀開發者的諸多經驗。這不僅讓她對其他領域有更多的瞭解,而且大大提高了思考深度。“社群對我提交的補丁反饋了很多寶貴的意見,比如補丁是否會引入其他問題、有沒有更好的修復方法等。這些方面的積累都能幫助到自己,並提高個人的開發能力”。

不論性別男女,還是年紀大小,你都可以參與 Linux 核心社群。這已經被俞玉芬證明了。透過不斷學習,沉澱知識,積累經驗,她從一名小白順利成長為初級 Linux 核心開發者。更重要的是,在這個過程中,她不僅增長了見識,自身能力得到極大的提升,而且讓自己的程式碼在全世界被使用,獲得很大的成就感。

2

吳峰光:Linux 就是我的遊戲

吳峰光,接觸 Linux 超過 20 年,曾因社群貢獻獲得 Linux 之父 Linus Torvalds 的好評。

我在Linux核心社群當開發者 | Q推薦

吳峰光

吳峰光在 1998 年開始學習 Linux,此時,他還在中國科學技術大學讀書。最初,他和大家一樣學習 Windows,但後來無意中接觸到 Linux。同學給他取了個不食人間煙火的綽號——“老神仙”,但他卻逐漸迷上 Linux,“發現它真的好,非常開放,一旦學會後終身受益。並且,一旦過了 Linux 門檻,它的效率就很高。此外,它是開源開放的,對技術人員非常友好,可以從中學到很多東西“。

吳峰光說:“我平時沒有打遊戲的愛好,Linux 就是我的遊戲。”

目前,吳峰光已經為社群做了 16 年貢獻,而第一次為社群做貢獻是在 2005 年。那時,他首次向社群提交補丁。但是,補丁提交上去後沒有任何響應。為此,他感到很納悶,因為一般而言,開發者向社群提交補丁後,社群會有開發者反饋,即挑毛病。即使沒有反饋,他也在改進補丁,繼續向社群提交,“幾個月後,收到社群的一個回覆,真的很激動,但是那個補丁仍然不被接受”。在花了兩年時間,累計寫了十幾個版本後,這個補丁才真正被接受。

2012 年由於為 Linux 社群提供自動化測試服務的 0day/LKP 系統,他不僅受到廣大 Linux 核心開發者的讚譽,而且獲得 Linux 之父 Linus Torvalds 本人的好評。因為這個系統極大降低了新核心釋出的編譯與啟動錯誤、效能 regression 等問題。為什麼會開發這個系統?據吳峰光回憶:

那時,我的工作最初是做預讀和回寫最佳化,本質是對 Linux 核心的一些演算法進行最佳化。由於 Linux 核心的使用場景非常廣泛,因此需要大量測試證明改進是有用的。每做一個新測試就會發現一些問題,然後進行修改,測試量大概佔了整個工作的一半時間。其次,大家在參加 Kernel Summit 時談到對 Linux 的擔憂——它的複雜性不斷增長。複雜性不僅會導致這個專案超出大家的維護能力,而且會讓它失去對新人的吸引力,因為新人只有先理解一個系統,才能去修改它。此外,複雜性還會讓系統失去演進能力,導致開發者很難修改系統,因為牽一髮而動全身。如果任由核心繼續膨脹,最終它會壓垮自己。另一個重要因素是所在的核心組正考慮弄一個構建測試,後來把目標擴大,不僅僅只考慮自己所在的核心組,而是為整個社群提供服務。

為了做這個測試系統,吳峰光另闢蹊徑。傳統上,“先跑一些測試用例,跑完後把所有問題放在一個 Web 介面,讓開發者們看”。他直言,“這個效果不好。因為 Linux 社群很大,有幾千個開發者,把一堆測出來的問題放在 Web 介面,裡面有噪音,可能只有幾個問題與自己有關,大部分都是別人子系統的問題。這就導致測試系統與開發者之間是割裂的,它沒有一個好的指向性”。

吳峰光抓住一些關鍵點進行改進,按照自己的思路設計,定義出關鍵要素,可以精準識別開發者的痛點。同時,好鋼用在刀刃上,聚焦關鍵點。剛開始,這件事的挑戰不小,只有吳峰光一個人,一臺機器,最初的測試系統甚至連 Web 介面都沒有,測試很慢,”我後來在實驗室用各種途徑搜刮可用資源,慢慢才積累起更多的測試資源。在成功後,更多人才加入進來“。

他說:“我每個開發都要實實在在的,做那種能落在開發者心坎上的功能。”最終,這個測試系統獲得很大成功。那段時間,每天都有人發郵件感謝吳峰光。甚至參加 Kernel Summit  時,開發者們集體給吳峰光鼓掌,“那是我參加 Kernel Summit  後從未遇到的事,以前也沒有這樣的事”。

十幾年參與 Linux 社群的過程中,他對核心開發者的郵件印象深刻。“我特意把 Linux 郵件列表的一部分人用語法加亮,因為他們寫的郵件很值得閱讀,比如 Linus Torvalds”。這些核心開發者很善於在郵件裡表達觀點,郵件內容可以寫的非常生動和活潑,“感覺就像本人在那裡講話一樣”。在他眼中,核心社群的所有核心開發者,郵件的表達能力都非常強。在郵件裡就某一話題進行討論或辯論時,提出鮮明觀點,擺事實,講道理。同時,其邏輯性非常強。

以 Linux 為遊戲的吳峰光,為社群做了 16 年貢獻,早已是資深 Linux 核心開發者。想成為資深 Linux 開發者,不是靠權力、財富或地位,而是看你對社群的貢獻。更大的社群貢獻意味著你能贏得更廣泛的讚譽,即我為社群做貢獻,我因社群更精彩。

3

Mauro Chehab:從一名終端使用者到 Linux 社群核心貢獻者

Mauro Chehab,Linux 核心 Media 子系統維護者,Linux 5。8 版本貢獻排名第一,Linux 5。10 版本貢獻排名第二,Linux 社群核心貢獻者和活躍開發者。

我在Linux核心社群當開發者 | Q推薦

Mauro Chehab

Mauro Chehab 是華為 Linux 核心專家,自 2005 年以來一直擔任 Linux 核心 Media 子系統維護者。據他介紹,Media 子系統涵蓋了對各種裝置的支援,還支援 HDMI 介面功能。作為維護者,其主要職責是審查向 Media 子系統提交的程式碼,檢查程式碼質量是否過關,是否可以新增到核心中,並向開發者對打回的修改提供反饋建議。

據悉,他最早是 Linux 的終端使用者。為了將本地網路的資料包路由到網際網路,他安裝了 Linux。上大學時,他對訊號處理領域產生了興趣,還寫了這方面的本科和碩士論文。當打算再進修時,他買了一張支援 Linux 的電視採集卡,用來開發一些編碼影片的工作。然而,在測試卡時,“我注意到驅動程式上有一個錯誤,導致它無法與巴西的電視編碼系統一起工作。所以,我開始修復它的程式碼”。修復方法很簡單:雖然巴西電視標準使用的顏色訊號頻率與美國的非常接近,但兩者間的差異足以讓敏感的主機板濾波器拒絕訊號。雖然這個修復很微小,但是他花了兩週時間理解程式碼,閱讀晶片文件,才確定錯誤的位置。在修復結束後,他添加了兩行額外的程式碼讓驅動程式感知這種差異。

在寫出補丁後,Mauro Chehab 便向社群提交。他說:“一位熱情的核心開發人員指導我修改補丁,並且介紹了 Linux 編碼風格。根據 Linux 編碼風格,我又重新修改了幾次。“

成功提交第一個補丁後,他在 Linux 核心社群非常活躍,開始修復驅動程式其他幾個錯誤。

這引起了開發人員的注意,他們也請求 Mauro Chehab 幫他們提交程式碼。事實上,當時 Media 維護者轉移到另一個子系統,正好缺人,這樣 Mauro Chehab 成為了這個子系統的維護者。

“在工作幾個月後,以前的維護者看到我的工作,在交談後,我們發了一個補丁,宣佈從那時起,我正式擔任 Media 維護者。”

對 Mauro Chehab 來說,Linux 社群每個版本聚合了 2000 多個來自不同文化習慣和時區的貢獻者,“持有不同見解的貢獻者,我相信這是 Linux 核心維護工作中最具挑戰性的部分”。這種巨大的多樣性讓 Linux 成為一個如此龐大而重要的系統。但這也帶來了相當大的挑戰,即如何融合和使用這些想法與觀點,讓整個系統順利執行,並帶來全面的改進,幫助來自全球所有國家的人們。

作為維護者,他工作的大部分時間主要審查提交的補丁,並作出反饋。

他表示,“我們一直歡迎新的社群貢獻者加入,成為開發人員的唯一基本要求就是對它感興趣。不要害怕交談或提問,我們向來歡迎並且樂意幫助每個人。”

Mauro Chehab 不僅是 Linux 核心 Media 子系統維護者,而且是 Linux 社群核心貢獻者和維護者,並在 Fedora 社群和 KDE 社群維護多個核心包。他在 Linux 5。8 版本補丁數和修改程式碼行數均排名第一,提交程式碼 549 次,佔比 3。4%,修改程式碼行數佔到所有人修改的 1/4。並且,他在 Linux 5。10 的版本貢獻排名第二。

究竟是什麼支援他 16 年來不斷為 Linux 社群做貢獻?他回答:

我之所以持續為 Linux 社群做貢獻,是因為我有機會協助開發一個在全球範圍內使用的現代作業系統,它可以在大量裝置和計算機上使用,為許多不同的硬體提供支援,其功能每 2。5 個月更新一次。我有機會在變化最多的領域工作。最近用於從火星表面影片製作的機智號直升機使用的就是 Linux。所以,現在我們的程式碼已經衝出地球,到達了另一個星球!我很自豪能夠為這樣的成就做出某種貢獻。

在 Mauro Chehab 看來,Linux 社群的主要價值觀念是開源。這樣,任何人都可以訪問 Linux 的原始碼,將其用於任何目的並將改進它。這意味著人們可以從程式碼中學習,任何人都可以隨時隨地對它做出改進。它有一個非常包容的環境,所以吸引和招募了來自不同國家和文化的開發者。

十幾年 Linux 核心維護工作讓他遇到過很多偉大的開發人員,並在採訪中重點提到了以下五位:

Linus Torvalds 作為 Linux 創始人,他是一個非凡的開發人員和維護者,能夠從一開始就協調核心開發。

Greg Kroah-Hartman 是一位非常有才華的開發人員和維護人員。他管理 staging tree,這對初學者來說是一個有趣的地方,因為它包含的驅動程式不完全遵循編碼風格,需要進一步的審查和編碼。

Jonathan Corbet 撰寫了一些 Linux 著作,他為 Linux 核心開發人員維護了一個非常有價值的網站,專注於開源和 Linux。他也是文件子系統的維護者,並開發了幾個 Linux 驅動程式。

Randy Dunlap 讓我最難忘。當我開發核心的第一個補丁時,他幫了我很多忙。

Andrew Morton 的工作也很出色,他除了維護記憶體子系統,還主動去維護那些無人維護的子系統,合入補丁。

在採訪最後,他說:“為 Linux 工作是令人高興愉快的,我覺得做自己真正喜歡的事情,並能夠在世界和社會中帶來影響,真的很有成就感。作為華為團隊的一員,我們專注致力於幫助 Linux 核心改進,為其添磚加瓦。”

以開源為核心,Linux 社群的包容、開放氛圍似乎具有一種魔力,源源不斷地吸引著來自全世界的優秀開發者。這或許才是 Linux 社群的生命力。

4

寫在最後:

無論是俞玉芬,還是吳峰光,或 Mauro Chehab,他們不僅是 Linux 核心開發者的代表,而且是 openEuler 社群的核心 SIG 組一員。正是因為有他們的貢獻,Linux 核心才能越來越好,而這也為 openEuler 社群的蓬勃發展奠定了堅實的基礎。openEuler 社群從成立到現在,已經擁有 5200+ 社群開發者,社群版本下載量超 15 萬。社群迅速發展壯大,版本如期穩定釋出。這一切都離不開開發者的辛勤付出,向每一位開發者致敬!

今年也是由華為來主辦中國核心屆最有影響力的峰會 ——“中國 Linux 核心開發者大會”(簡稱 CLK)。CLK 以“自由,協作,創新”為理念,以開源技術的推廣和普及為使命,旨在促進 Linux 核心開發愛好者相互交流、共同進步。由英特爾、華為,阿里巴巴、富士通南大軟體、清華大學,今日頭條、麒麟軟體,統信軟體等企業組織,每屆線下參會人數近 500 人,舉辦至今已是第十六屆。openEuler 社群也會積極參與到 CLK 大會中。

TAG: Linux社群核心開發者補丁