專訪笨叔叔:Linux 絕對霸主,Linux 開發者未來可期

Linus Torvalds 在上個月正式發佈了 Linux Kernel 5.0 全新版本,版本號雖然直接從 4 升到了 5,但其實這只是 Linus 不喜歡子版本號太大的“任性操作”。

版本號大升級是否意味著 Linux 內核也發生了重大的變化?

目前 Linux 在物聯網、雲計算、超算、人工智能等領域扮演著越來越重要的角色,諸如 5G、邊緣計算等技術也開始逐漸鋪開,技術的革新對 Linux 從業者又會帶來怎樣的機遇和挑戰?作為一個“超級”開源項目,雖然 Linux 總是藏身幕後而不怎麼為普通人熟知,但作為開發者的我們應保持對它的關注。

為此,我們邀請到了資深 Linux 內核開發者笨叔叔一起探討關於 Linux 開發者的職業發展前景、Linux 未來發展,以及如何為 Linux 內核貢獻代碼等話題。

下面是採訪內容整理。

笨叔叔您好,先自我介紹一下吧,順便和大家分享下最近和 Linux 內核相關的工作

大家好,我是笨叔叔,目前在上海紫竹一家芯片公司擔任 FAE 職位,FAE 就是 Field Application Engineer,技術支持工程師,負責客戶支持工作。

我本人從大學畢業到現在工作已經有 15 個年頭了,從事的工作基本都是和 Linux 相關。第一份工作恰好也是客戶支持,當時 Intel 的 XScale 移動處理器十分熱門,而我們做的正是 XScale 處理器的開發板。在這之後也曾投身過一段時間的研發工作,幾經折騰現在又回到 FAE 的老本行。

平時除了在工作中會和 Linux 內核打交道以外,還會利用業餘時間編寫與 Linux 內核相關的書籍和錄製相關視頻。從業多年,也一直在思考一個問題:作為有志進入 Linux 內核領域的小夥伴,如何能快速入門?最近本人剛出版的《奔跑吧Linux內核 *入門篇》分享了我對於這個問題的一些心得和經驗。

在 Linux 內核領域深耕多年,您認為 Linux 開發者的職業發展如何?

整體來看,Linux 開發者在中國的職業道路是十分光明的。因為除了桌面領域,Linux 現在稱得上是操作系統的絕對霸主,國內對 Linux 職位的需求也很旺盛。

另外一方面,自從去年中興事件發生後,國家對芯片和操作系統領域的重視程度越來越看重。操作系統雖然已發展多年,但目前還沒有一款真正意義的完全自主研發的通用操作系統。據瞭解,很多大公司都在秘密自主研發操作系統,比如有消息稱華為一直在研發操作系統以作備用。

Linux 內核作為底層項目,那麼 Linux 開發者的工作是不是也比較偏底層,主要有哪些?

圍繞 Linux 內核的工作有很多,取決於不同的公司和不同的工作崗位。

舉例來說,如果就職的公司是雲服務器廠商或者遊戲廠商,而所在的部門是IT基礎設施部門,那你的基本工作就是 Linux 運維,即大家俗稱的「網管」。

對於 Linux 運維,業內也有約定俗成的評估標準,粗略分成初、中、高三個等級:

  • 初級:掌握主流 Linux 服務器發行版的安裝,如 RHEL 和 CentOS 等;維護多臺服務器,熟練掌握常用 Linux 命令和 RHEL 常見的服務。
  • 中級:熟練掌握 SHELL 腳本或 Python 語言,能為運維工作開發自動化腳本。
  • 高級:深入瞭解 Linux 內核代碼。根據企業需求,深入瞭解內核的某個模塊並進行代碼級別的優化。

像 BAT 和華為等公司的 Linux 運維裡面,就有不少 Linux 內核專家,他們對內核某些核心模塊有深厚的理解和造詣,比如內存管理、文件系統、IO 性能以及虛擬化等。他們平時會積極參與 Linux 社區的技術討論,並且也給 Linux 內核提交了很多補丁。這一塊國內的阿里巴巴和華為做得最為出色。薪水方面,初級運維薪資普遍較低,而上面說到的高級運維,基本是百萬年薪起步。

除了 Linux 運維,還有一類公司會利用 Linux 打造產品,比如消費級的嵌入式產品,手機、可穿戴設備、IoT 和工業嵌入式等。在中國,這類公司正好是 Linux 使用群體的主力軍。

通常來說,這類公司都有一個共同點,那就是最終交付給客戶的是一個產品,而 Linux 只是一個基礎平臺或者載體。最終用戶可能甚至不知道這個產品使用了 Linux 內核,但這不妨礙他們需要大量的 Linux 開發者 —— 包括 Linux 內核驅動以及 Linux 應用程序開發人員。

對於 Linux 內核開發者來說,這些公司主要提供幾類工作崗位,需求最大的崗位是 Linux 驅動開發工程師,其次是 Linux 測試工程師,最後是 Linux 內核優化工程師。此外,這些公司通常採用第三方芯片提供的方案,比如高通,MTK,TI 等。芯片公司會提供一套可用的 Linux 板級開發板(BSP),其中包含了參考方案的 BOM、驅動程序和源代碼等。但通常研發產品的公司會替換參考設計的外圍器件,一是為了降低成本,二是讓產品差異化。比如攝像頭、屏幕和 WiFi 芯片等。因此,這類做產品開發的公司需要大量的 Linux 驅動工程師進行移植工作。

使用第三方芯片方案的公司還有一個特點,由於芯片公司提供的參考代碼僅僅是可用,並沒有經過工業產品級別的壓力測試和複雜環境的測試,而這方面工作恰好需要研發產品的公司獨立完成,因此他們還需要大量的 Linux 測試人員和研發人員。

最後還有一類公司值得一提,那就是芯片公司,比如高通、Intel、MTK、海思和展訊等,他們對 Linux 內核底層開發人員長期都有大量的需求。要知道開發一款 SoC 不僅僅是開發和 SoC 相關的 Linux 驅動,為爭取到客戶,芯片公司還需要開發一整套解決方案,即所謂的 Turnkey Solution,其中涉及到的工作需要大量 Linux 底層開發人員參與才能完成。

這部分 Linux 開發人員通常和 Linux 內核社區緊密接觸,而大公司也會優先把自己開發的驅動提交到 Linux 內核社區,以獲取更好的支持。

對於有志為 Linux 內核貢獻代碼的開發者,有什麼經驗分享或指引?

這是一個很好的目標。我的建議是,首先要熱愛這個工作。第二,不必抱著急於為 Linux 內核貢獻代碼的想法,而是採用循序漸進的方式實現目標:

  • 設備的驅動程序相對比較簡單,所以不妨先從自己熟悉或者感興趣的驅動程序開始著手,嘗試閱讀 Linux 社區最新的驅動代碼。
  • 閱讀代碼之後,可以嘗試對代碼進行調試,發掘能修改的地方,比如編譯警告、不合理的代碼等。
  • 針對有問題的代碼,可以向社區提交自己編寫的補丁,不過要注意提交補丁之前,應學習熟悉 Linux 社區的文化,以及 git 工具的使用等。相關內容在《奔跑吧Linux內核*入門篇》中有介紹。

如果從未接觸過 Linux,完完全全是小白狀態,不妨先從自己動手安裝 Linux 系統開始,比如 Ubuntu 等,並將其作為主力操作系統使用。

事實上,Linux 內核開發涉及到多領域的交叉,比如 C 語言、彙編語言、操作系統和架構。有興趣的同學可以逐點學習和提高。

Linux 內核的更新比較快,生產環境要保持和社區一致的進度是否有必要,升級的話有哪些考慮的因素?

上個月 Linux Kernel 5.0 正式發佈了。整體來看變化不大,從 Linux Kernel 4.20 到 5.0 也只是順延的版本升級。Linus 本人也表示之所以直接升級主版本是因為不喜歡非常大的子版本號,他覺得雙手雙腳都數不過來了。

至於是否應該保持和社區一致的版本節奏,我認為這和產品選型相關。拿雲服務器廠商來舉例,他們通常會使用 RHEL 或者 CentOS 系統,但現在最新的 CentOS 7.6 使用的還是 3.10 內核,這種情況不建議貿然升級到最新的 Linux 內核,因為風險太大。

要知道這些發行版所採用的 3.10 內核,是由紅帽大量的 Linux 內核工程師和測試人員經過嚴格測試再推出的,屬於比較可靠的版本,畢竟一般公司缺乏這種體量的實力。大家之所以選擇紅帽,也正是信任紅帽在 Linux 社區的實力和影響力。

因此,為穩定起見,最好跟著廠商的步伐進行升級。

另外,有的公司需要利用 Android 系統進行產品研發,此類公司一般會跟隨 Android 的版本,或利用芯片公司提供的 BSP 包的版本進行二次開發,他們也不會貿然升級到最新版的 Linux 內核。

如果是開發者出於個人的興趣愛好,希望折騰一把,把自己的個人開發環境升級到最新版內核,這自然沒問題。

除了桌面領域,Linux 已經是事實上的統治地位,你認為 2019 年 Linux 會如何發展?

雖然現在市場的關注熱點放在 5G 和 AI 等一些新興技術上,但不管 5G 還是人工智能,產品需要落地,都需要操作系統作為基礎硬件平臺。

除了桌面領域,現在 Linux 系統儼然已成為操作系統的絕對霸主。除了傳統的服務器領域和嵌入式領域,我們可以看到越來越多的產業都在使用 Linux,包括工業 4.0、人工智能和物聯網等。可以說,Linux 才是操作系統的第一,不僅是裝機量第一,而且參與開發的人數和公司數量也是第一,擁有最活躍的社區,人氣最高,還有眾多大公司的支持和資金投入,這是其他任何一個社區都無法比擬的。

此外 Linux 的生態相當完善,其支持的硬件也是最多的,很多硬件廠商新發布的產品,最先支持的操作系統就是 Linux 系統。

由此可見,圍繞 Linux 的產業生態會帶來更多的職位需求,而 Linux 內核開發在這些職位當中最有含金量,前景和發展未來可期

瞭解到笨叔已經出版過兩本書了,那最後請和我們分享一下寫書的心得和經驗吧

寫第一本《奔跑吧Linux內核》的初衷是希望把自己多年的工作經驗和總結用文字的方式記錄下來。

因為工作的關係,作為 FAE,常常需要面對客戶的“蹂躪”和白眼,他們常常會甩給你一些刁鑽的問題。對於這些問題,FAE 通常的做法是把它轉發給後端的研發同事,讓他們來回答,而我本人喜歡自己研究代碼,自己解決(當然不是所有的問題都能一個人解決),而且在與研發同事的討論和探討過程中,自己也有十分大的收穫。

另外,我有記筆記的習慣,這裡說的是手寫筆記,我會把一些思考的問題和思路記錄下來,經過多年的積累,我已經記錄了兩大本筆記。《奔跑吧Linux內核》這本書通過奔跑卷和思考題的方式把我這麼多年遇到的問題和思考都分享了出來,這些都是我作為 FAE 多年的吐血總結,對此我感到很開心,因為這本書體現了一個 FAE 應有的獨立思考和堅韌的品質。

《奔跑吧Linux內核》出版後,得到了很多 Linux 工程師的喜歡,我也倍感欣慰。但有不少小夥伴紛紛給我留言,說這本書起點比較高,完全看不懂。另外也有大學老師說,書太厚,不適合作為大學本科教材,希望我可以寫一本難度稍低,薄一點的書。

所以《奔跑吧Linux內核 *入門篇》這本書融入了很多老師給我的建議,特別是南昌大學的陳悅老師,大連理工的吳國偉老師,以及國防科大的餘傑老師。還有一點就是,國內學 Linux 的小夥伴中,有相當的一部分都從事與 Linux 運維相關的職業,但從 Linux 運維到 Linux 專家之間還有一個巨大的鴻溝。入門篇這本書希望讀者在閱讀完鳥哥私房菜之後,可以通過這本書進入 Linux 內核的世界,從而提升自己對 Linux 的理解,也為此後的職業發展增加實力。

第一次寫書的時候,完全沒有想到要出版,當時只是為了把自己的積累用電子檔案的方式記錄下來。第二次寫書,也就是這本入門篇,是帶著任務寫的,反而有點忐忑不安,生怕辜負了讀者和老師們的期望,所以在此也忠心希望各位讀者朋友可以毫不留情地給我批評和建議,以便後續修改再版的時候能做得更好。


分享到:


相關文章: