用100W+行代碼貢獻經驗,帶你瞭解如何參與OpenHarmony開源

語言: CN / TW / HK
摘要:截至2022年11月,深開鴻共計參與共建OpenAtom OpenHarmony(以下簡稱OpenHarmony)社區16個SIG,其中4個為深開鴻主導,並累計貢獻代碼量超過百萬行。

本文分享自華為雲社區《用100W+行代碼貢獻經驗,帶你瞭解如何參與OpenHarmony開源》,作者:華為雲社區精選。

截至2022年11月,深開鴻共計參與共建OpenAtom OpenHarmony(以下簡稱OpenHarmony)社區16個SIG,其中4個為深開鴻主導,並累計貢獻代碼量超過百萬行。巴延興作為開源共建團隊成員,深度參與開源共建,並將在本次分享中介紹深開鴻的共建經驗,在根技術、垂直領域、生態擴展等多方位參與開源貢獻的實踐與思考,以及輔助工具SIG和內核SIG兩大板塊的貢獻方式、價值與用途,希望帶動更多開發者參與開源共建,為OpenHarmony生態建設貢獻力量。

如何通過SIG進行開源貢獻

什麼是SIG?

SIG全稱Special Interest Group,即特別興趣小組,專注一個特定的技術領域,負責該領域技術競爭力分析和關鍵技術識別及決策,引領技術演進的方向,也是共建單位及個人開發者進行開源貢獻的基本單位。

通過SIG組參與開源共建的兩種方式

一、參與到已有SIG的共建

參與者需要註冊自己的官方賬號,簽訂協議後,才能通過認領SIG leader發佈的需求來承接共建任務。領完需求後是標準的開發過程,包括需求分析、功能設計、代碼開發、功能測試、功能交付等步驟;任務開發完成後,需要提交PR,將代碼、文檔等提交到社區,完成最終的開源貢獻。

二、主導SIG組

1、成立SIG

選取共建技術領域並給出規劃 → 向PMC例會提交議題並通過評審 → 通過架構SIG例會評估後建立新的代碼倉。

2、孵化SIG

啟動需求澄清、特性梳理方案設計、代碼開發、單元測試、功能測試等流程,完成SIG項目開發 → 對照Check List,完成法務、門禁、OAT等問題自檢。

3、畢業SIG

向架構SIG申請新SIG畢業 → 向QA SIG會申請新SIG準出 → 倉庫owner移倉。

輔助工具SIG實踐經驗分享

成立輔助工具SIG組的宗旨是“降低重複勞動,提高工作效率,讓專業的人做專業的事”。 NAPI框架代碼生成工具、IDL轉換工具和開機動畫工具都是圍繞着這個宗旨開發而成的。

一、NAPI框架代碼生成工具

NAPI是標準設備上的JS API實現方式,實現了JS語言到框架C++層的調用,在OpenHarmony系統中,APP調用是調用JS語言的接口函數,最終具體功能是用C++語言來實現。

NAPI存在三個開發痛點需要解決:

  1. NAPI框架代碼的重複率高:面對不同的JS接口,開發者要實現相似度高的框架代碼。
  2. NAPI框架的學習成本高:框架機制涉及JavaScript、C++語言,以及編譯腳本工具。
  3. NAPI 需求量大:OpenHarmony系統功能均是通過NAPI接口體現,目前已經支持1萬多個NAPI接口。

針對以上三個痛點,NAPI框架代碼生成工具將C++ 、JavaScript接口類型轉換等代碼抽取公共模塊,並且自動生成編譯腳本。開發者使用工具自動生成NAPI框架代碼,只需實現業務代碼調用即可,避免了大量重複的工作。

二、IDL轉換工具

OpenHarmony使用的是HDF驅動框架,驅動相應的硬件信息需要IDL文件來描述。

IDL存在兩大開發痛點需要解決:

  1. HDI開發難度大:HDI開發者比較熟悉C語言,習慣在.h文件中定義HDI接口,而對於IDL文件結構、語法並不是很熟悉,學習曲線相對較長。
  2. HDI工作量大:HDI接口是驅動對外提供服務的必要條件,各個子系統均涉及,故HDI工作量較大。

針對以上痛點,深開鴻設計的IDL轉換工具將開發者熟悉的.h文件自動轉換為idl文件,開發者只需要在頭文件中定義自己的接口即可,工具自動實現.h頭文件到IDL文件轉換,開發者不需要關心IDL語法,大大降低工作量。

三、開機動畫工具

開機動畫工具是我們最早針對OpenHarmony 2.0版本存在的問題做的一個輔助工具。

OpenHarmony 2.0版本在開機動畫方面有兩個問題:

  1. OpenHarmony 2.0版本開機動畫只支持raw文件,不利於開發者在發行版和定製版進行直接展現。
  2. 因為產品的形態不一,對於不同的產品,其開機動畫的需求也是不同。

通過開機動畫輔助工具使以上兩個問題得到了更好地解決:

  1. 開機動畫工具支持圖片集或者 mp4等多種文件生成開機動畫,且支持設置開機動畫的分辨率等操作,更加方便開機動畫的製作。
  2. 做到一鍵生成開機動畫文件,並且支持在 windows平台上查看其效果,不需要每次都去燒錄到開發板上,大大降低了演示的工作量。

四、輔助工具SIG共建方向

目前深開鴻主導的輔助工具SIG組主要提供給開發者文檔資料、測試用例和工具開發3個共建方向。

如果你擅長文檔編撰,那麼可以參與到社區的文檔貢獻,撰寫文檔可以不需要有很強的開發能力。

如果你是測試人員,擅長自動化測試,那麼通過測試用例也可以參與到社區的建設。

另外也歡迎各位開發者參與到各種工具的建設中來。SIG組的工具可以是獨立的工具,也可以通過插件的方式集成到IDE開發軟件中。

五、參與輔助工具SIG貢獻的具體方式

1、提交問題單。無論是文檔的bug、測試用例的bug、還是代碼的bug,提交了問題單就是對社區做了貢獻,那麼輔助工具SIG組如何提交問題單呢?

首先找到對應的倉庫並登錄,例如https://gitee.com/openharmony/napi_generator/issues。

提交過程中要注意格式要求,必須寫清楚提單過程中問題出現的條件,預期的結果和錯誤的結果,問題的定位信息等,有了這些信息後,領取這個問題單的開發也方便定位問題。

登錄找到想要認領的問題單的頁面,在評論中表達出想要承接這個需求的意願,SIG的負責人會定期跟蹤這些問題單並做出答覆。

2、認領需求後進行開發流程

領到一個需求後要進行正常的開發,核心分為以下6步:

  1. 通常開發者已經配置好配置碼雲賬號、個人郵箱和簽署DCO(簽署DCO主要是保證貢獻者原創),有了這些前置工作以後,我們可以操作代碼倉庫進行需求的開發。
  2. Fork代碼到私倉。
  3. 克隆fork出來的倉庫到自己的主機上。
  4. 在本地開發代碼開發和功能驗證。
  5. 開發完畢後向官方原始倉提交Pull Request,提交代碼後會觸發門禁等常規檢查。
  6. 如果這個sig組是你自己主導的,那麼作為Committer,需要評審別人提交的代碼,如果只是參與共建,提交完代碼通過門禁就完成任務。

內核SIG參與共建經驗

關於深開鴻內核SIG共建經驗,下面將以文件系統的優化為實例向大家分享具體的貢獻過程。

內核共建的方向比較多,體系架構有各個硬件平台的移植,內核模塊中功耗管理、時間管理、任務調度、中斷管理、文件系統、三方庫相關的內核shell命令移植,目前深開鴻主要在文件系統和第三方庫方面做社區共建。深開鴻希望將來展開更多方向的優化工作,並向外提供具體場景下內核系統移植方案。

littlefs文件系統的共建過程:

  1. 瞭解社區需求,社區目前對littlefs文件系統隨機讀寫的速度不滿意。
  2. 瞭解到社區文件系統對隨機讀寫需求的前提下,對littlefs隨機讀寫IO性能瓶頸進行分析,找到能優化的代碼點,採用了“以空間換時間”的思路。
  3. 採用逐步優化的思路,明確方案後和社區負責人溝通,得到了社區負責人認可後,展開具體的代碼工作。

由於文件系統優化是一個比較複雜的過程,下面分享了一套社區共建流程。

  1. 從社區認領需求後,通過微信羣的方式和社區負責人溝通並澄清需求。
  2. 從技術上分析需求並制定優化方案,再次和社區負責人溝通,做方案討論並得到認可。
  3. 具體任務開發,包括任務拆解、編碼實現、測試,最後提交PR。

針對littlefs文件系統優化過程中修改涉及的相關文件,包括littlefs文件代碼,也就是點c和點h文件;也有編譯相關的文件,即.gn文件gni文件,之所以修改編譯相關的文件是為了測試littlefs的優化後的代碼,我們團隊增加了相關的測試用例,這些測試用例會調用內核文件系統的API,涉及到這些編譯相關的文件。

littlefs第三方庫代碼完成後提交到社區的過程

  1. littlefs第三方庫repository路徑,並fork到用户倉庫。
  2. git clone用户倉到本地。
  3. 提交修改到用户倉。
  4. 點擊提交PR。
  5. 填寫PR單,PR單頁需要按照既定模板填寫,寫清楚原始需求,如何解決這個問題,怎麼解決這個問題以及具體修改點。
  6. 在評論中添加“start build”點亮PR。這裏有一個特別注意的點,需要在評論中是手動填寫“start build”這2個英文單詞,目的是觸發後續的門禁檢測。這是OpenHarmony社區比較特別的一點,其它開源項目中所沒有的。

歡迎感興趣的開發者多方位參與OpenHarmony開源貢獻,成為OpenHarmony Contributor,也歡迎各位提出寶貴的意見,為OpenHarmony貢獻一份力量。

附:文章中涉及的鏈接彙總:

 NAPI框架代碼生成工具代碼倉地址:https://gitee.com/openharmony/napi_generator

 IDL轉換工具代碼倉地址:https://gitee.com/openharmony/drivers_hdf_core/tree/master/framework/tools/idl-gen

 開機動畫工具代碼倉地址https://gitee.com/openharmony/graphic_graphic_2d/tree/master/frameworks/bootanimation/data/bootanimation_tool

本期直播(觀看地址:https://bbs.huaweicloud.com/live/DevRun_live/202211011700.html)深圳開鴻數字產業發展有限公司(以下簡稱“深開鴻”)資深OS框架開發工程師巴延興帶來《如何多方位參與OpenHarmony開源貢獻》主題分享。

 

點擊關注,第一時間瞭解華為雲新鮮技術~