首頁 > 軟體

我的15年作業系統開源路——RT-Thread 創始人熊譜翔

2021-05-15 14:01:03

作者 | 熊譜翔

出品 | 《程式設計師》編輯部

放眼全球作業系統市場,從廣泛角度來看,可以將其分為三大板塊:其一,桌面/PC 端微軟打造的 Windows(桌面數字化);其二,手機移動端的蘋果和谷歌帶來的 iOS 和 Android(移動數字化);下一個時代的物聯網(或者未來物理世界的萬物數字化)。這裡存在一個有趣的現象——前一代的霸主基本上不會成為下一代的領導者,亦或者說其中有著他們原有的基因,如滑鼠、鍵盤操作的 Windows,不可能再帶入到手機;手機上廣泛且龐大的 Android 也不可能帶入到物聯網中。

之所以不能,也非常容易理解。因為每一代都會有自己的特點,一定會有一個非常適合它的絕加拍檔。對於物聯網時代而言,碎片化是其中的顯著特點。從超小的計算單元,到具備智慧、邊緣算力的高效能單元,都會涉及。物聯網時代需要一個適配性非常好的作業系統,這些需要創新,也是發力點所在。

始於 2006 年的 RT-Thread 是一款面向物聯網的開源作業系統。最初來自於做項目時對嵌入式作業系統的需求,但我對當時數種開源嵌入式作業系統並不滿意。我理想中的嵌入式作業系統是,類似 UNIX 系統擁有小寫命名方式的優雅程式碼風格,包括了作業系統核心及周邊必備並可裁剪的元件,同時這些又希望它是易於獲得、開放、POSIX 標準相容的。所以,一開始,RT-Thread 便以做一個開放、易用的作業系統為目標。

開放性

之所以選擇開放,也和自身受開源文化影響息息相關。1998 年,我首次接觸 Linux,知道了除 Windows 以外還有這樣一套開放的體系:源碼在手天下我有!2000 年,在開始接觸系列的商業封閉的實時作業系統(VxWorks、NucleusPLUS、ThreadX 等)後,我深刻體會了東西確實是好東西,穩定可靠,但並不開放:

想找人交流,缺乏相關的技術社群;想在 PC 上編寫相關程式,但並不能放到這些嵌入式實時系統上執行;想把 Linux 上的開原始碼移植過去,基本完全不可能,空坐寶山望洋興嘆。

能做的,只能是基於它自身的 API,完全從頭編寫。然而,編寫一部分還好,但是當要實現所有亦或任意東西時,只能無奈道一句「真是無底洞」!

因為這樣的緣由,所以在項目伊始便進行了開源。第一個開源的版本只有執行緒的部分:能夠實現多執行緒的優先順序排程,上下文切換。基於開源,希望它具備更多的開放性,讓大家隨意獲取,同時接受大家反饋,傾聽大家的需求。

早期時主要是放在一些論壇上,程式碼以 Google Code、SVN 的方式進行託管。後來,在論壇上看到大量電子工程師在用 ARM Cortex-M3 的晶片,所以也非常早期地支援了 Cortex-M 架構(這一點相較於誕生更早的 UCOS-ii、ECOS、RTEMS 等),也就迅速獲得了大家的關注、嘗試。

但是,開放的模式往往意味著發散,因為參與的群體來自各行各業,面臨的問題也各式各樣。最終,我們實現了支援眾多的晶片(有些是我們自己移植的,有些是社群貢獻者移植的,有些甚至是晶片廠商移植的)和眾多不同的工具,例如不同的工具鏈、不同的整合開發環境。

在這種情況下,一個社群就必不可少,讓大家在其中自由地進行交流,以 Issue、PR、程式碼的形式,通過線上/線下技術會友的方式進行交流。自 2009 年以來,我們就開始以 Git 的方式管理程式碼,在 GitHub 上進行協同開發。

圖1 RT-Thread Star 增長曆史

選擇 Git 方式已經成為開源軟體的必備:

開源的本質是協同開發,不同於傳統開發模式,它需要/可以接受來自遠端線上各方的程式碼補丁;分散式的協同開發,只要希望合併到主幹中,就可以生成 PR 提交,然後經過 Review、溝通、合併,最終出現在開發主幹;而不需要自己手動的進行程式碼合併、比對。隨著 CI(Continuous integration,持續整合)的出現,可以在 CI 中加入程式碼的檢查,編譯甚至是自動化測試,降低程式碼合併上的人工;在 GitHub 這樣的開發者社群中,可以讓大家更好的參與進來,對程式碼進行 Review、確認、提交 Issue/溝通。

易用性

參與到開源社群的一般都是工程師個體,RT-Thread 也是從工程師角度出發,首先通過面向物件設計的模式構造了核心基石,然後再輔以統一化的程式碼風格,進而形成規範化的開發體驗。

對於使用者來說,一份好的文件是開發之路的明燈,從入門上手,到使用指南、注意事項。我們將文件中心按開源、協同開發的模式進行:

以 Markdown 方式進行文字管理;以 Git 倉庫方式接受社群小夥伴的提交;以Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) 許可協議釋出文件。

圖2 可以 fork 的 RT-Thread 文件中心

工具是把程式碼用好的另外一方面。RT-Thread 早期支援的 ARM Cortex-M 處理器,是基於 PC 上的交叉編譯方式,所以也就延伸出工具鏈的問題。GNU GCC 交叉編譯工具鏈,基於 Makefile 方式,免費但使用上缺乏偵錯程式、模擬器;而一些商業的工具鏈,還可以附帶整合開發環境,模擬器,基本上做到類似PC 上使用 VC++ 來編寫、開發程式這樣簡單。所以如何支援好它們也是降低門檻的重點,對此,我們通過深度定製 SCons 的方式把程式碼的定製、裁剪和這些不同整合開發環境工程檔案進行靈活的轉換,來實現編譯、偵錯效果。

因為物聯網場景碎片化,需要十分靈活的定製性緣故,也引入了開源中常用的 Kconfig 程式碼配置。字元介面下通過 menuconfig,可以對一些功能特性進行詳細的配置,但是這引發了爭議,甚至社群上還有反饋表示,「字元介面的配置?這個是科技的倒退吧。」在這樣的背景下,以及希望工具層面有更佳配合真正達到開箱即用的出發點,我們後期也開發了專屬 RT-Thread 的整合開發環境:RT-Thread Studio。

圖3 RT-Thread Studio 整合開發環境

這系列過程中核心點是使用者體驗,而對於開源作業系統來說,這個就是開發體驗:如何真正讓開發者用起來順、爽,真正讓開發者喜愛上它。要把開發體驗做好,用心傾聽社群小夥伴的反饋是必不可少的:

社群小夥伴有系列的吐槽。這時會去琢磨,怎麼樣才可以做得更好,然後加以改進;社群小夥伴有更好的點子,程式碼。這時會 Review 相關的程式碼/PR,琢磨這樣是否確實是一條更好的路。

開源在於過程

開源代表的是協同開發,最大限度的避免重複發明輪子,讓大家能夠站在巨人的肩膀上創造更大價值。

開源可以有無數的社群小夥伴參與進來,有組織者領導這個項目;有實現程式碼的開發者,有使用者(同時兼顧測試)進行反饋/提出自己的需求(也有可能轉換角色去實現它),還有文件貢獻者編寫文件或使用筆記;有社群運營,對項目進行運營、推廣等。大家都參與其中,作為社群一員,從 0 程式碼,到大家都使用它,並愛護它。

開源是一種過程的反映,而不是結果:

如果僅僅是一個公司拋出一個產品並開源它,這個並不是真正的開源。如果沒有文件,沒有後續的社群運營(支援、回覆反饋等),這個也僅僅是一堆的程式碼,開源世界並不缺乏程式碼;開源的軟體不在於它本身,而在於有多少人使用它。如 Apache 之道(Apache Way)的核心:「社群勝於程式碼」。程式碼是「死」的,人是活的,使用軟體、程式碼的是人。開源也不是一種商業模式,因為它不反饋結果(可以獲得多少收入利潤),或者可以說開源是一種商業手段。

在開源的過程中,可能很多時候大家也會擔心,程式碼都開源了,有人抄襲了怎麼辦?有人在這個基礎上開新的分支怎麼辦?同樣,不能以靜態的方式看這個問題,關鍵看後續的發展上,誰可以發展得更好(也包括誰的社群會更好)。比較典型的案例有 FreeBSD/DragonFly BSD,NetBSD/OpenBSD,主幹在持續推進,融入新功能,產品、社群都做得更棒時,Fork 分支完全不需要擔心太多。當然另外一點,商標品牌也十分重要。

在我看來,開源過程持久化,也是 RT-Thread 得以成為常青樹的核心:在十多年的時間中,持續地吸收現代化的技術,不斷地向前迭代版本。從 MCU 上小巧的完備作業系統(核心、檔案系統、網路協議棧),到智慧手錶上的炫酷人機互動介面(同時低功耗長待機),到現在最新版本,面向帶 MMU 處理器架構,全程序版本的 RT-Thread Smart 微核心架構系統。RT-Thread 希望能夠像一個火車頭,駛向未來。

圖4 RT-Thread 路線圖,最新的 v5.0 版本將融合 smart 分支

開源與商業化

開源的商業化,這是近些年來大家提及,關注比較多的方面。目前提及的開源下的商業模式普遍來說有三種:

提供服務的模式。類似 Red Hat 這樣,程式碼都是全開源的,提供基於開原始碼上的服務,任何相關的都可以算做服務中,例如培訓、實施、技術支援等;Open Core 的模式。即核心是開源的,並讓更多人使用起來,而在這個核心基礎之上是收費的,例如插件(WordPress),增值中介軟體等。Hosting 模式。這也是和雲興起相關,程式碼是開源的,同時提供雲的服務,雲空間雲服務是收費的。

這其中也出現過 GPL、商業雙許可模式,這類通常來說在一定空間範圍內也可以行得通,不過整體規模要鋪大會比較難,這類最大的案例是 MySQL。而對於 Open-Core 模式來說,也會有個開源 vs 商業的邊界:

結語

這篇文章主要是圍繞著 10 多年來 RT-Thread 的歷程談及自己的一些想法。這個過程中也和自身的心態相起伏,從興趣愛好,到創業的艱辛,及看到了開源的大方向及自身優勢。在未來幾年中,中國工程師的紅利也必將推升中國在全球開源界的影響力,也會有更多來自中國的偉大開源項目,形成新時代的根。

熊譜翔,RT-Thread創始人,2000年畢業於重慶郵電學院,先後任職上海貝爾阿爾卡特、宇夢通訊、Marvell,擁有豐富的嵌入式實時系統和3G/4G手機基帶系統軟體開發經驗。於2006年創立了RT-Thread開源作業系統,並以開源社群的形式,帶領中國國內優秀的工程師,融入實時面向物件設計開發了RT-Thread自主作業系統核心、微核心架構作業系統RT-Thread Smart及大量周邊成熟、穩定軟體元件,如檔案系統,圖形使用者介面等。

從 Unix 開發者 Brian W. Kernighan 到 OpenCV 創始人 Gary Bradski,再到國內 PingCAP 聯合創始人&CTO 黃東旭、Vue.js 作者尤雨溪……《程式設計師》2.0第一期以「開發者的黃金十年」為主題,與多位國內外知名的技術領袖和新銳代表進行了深度對話,希望為中國開發者開啟新時代的「機遇之窗」。除了技術引領,我們也希望透過技術對行業進行深入洞察。因此,《程式設計師》2.0 第一期也邀請到了來自快手、滴滴、貝殼找房、作業幫等知名企業的技術負責人,用案例實踐為讀者闡述直播、出行、居住、線上教育等多個行業變革背後的技術架構和技術引擎。


IT145.com E-mail:sddin#qq.com