Try   HackMD

2024 年開放原始碼專案協作

講解錄影

緣起

  • 2005 年 Debian Taiwan 社群有項名為「夢幻軟體計畫」,嘗試將現有的概念化為更具體的提案,徵求更多人的參與,從而讓投身實作的人得以互相溝通與合作。
  • 2015 年決定「封麥
    • 連續在 COSCUP 演講 10 年、合計 18 場演講,擔任訪談人、議程委員、贊助商等不同角色
    • 把發表的機會留給學生
  • 2014 到 2017 年,jserv 在交大資工所開設「自由開源軟體與專案協作」課程,嘗試引導大學生貢獻於開放原始碼專案。
  • 莊偉赳博士發起的源來適你,引導有心人投入 Apache Software Foundation 的眾多專案
  • 2019 年起,jserv 在成大資訊系/所開設「Linux 核心」系列課程,至今已有超過 17 位學生的程式碼貢獻獲得 Linux 核心收錄

近期國際研討會發表狀況

請考慮 資助學生旅費

  • 2022 年
  • 2023 年

開發策略和模式

  • 選定若干有潛力、有特色的主題,建構對應的開放原始碼專案
  • 擬定切入貢獻大型開放原始碼專案 (如 Linux 核心) 的策略,以「投石問路」的手段逐步推進
  • 聯繫對學生友好的開放原始碼專案主持人,建議程式碼貢獻的方案
  • 不再是 side project,直接成為課程作業/畢業專題/研究論文主體

2024 年聚焦的開放原始碼專案

虛擬機器/編譯器

RISC-V 處理器實作

Linux 核心模組

eBPF/XDP

XDP (eXpress Data Path) 自 Linux 核心 4.8 版本起作為以 eBPF 為基礎的高效資料處理路徑,一旦網路中斷觸發後,XDP 允許將特定的操作提前在 TCP/IP 堆疊之前就處理,不僅反應更快而且省下寶貴的記憶體分配的成本。

Linux 核心的 lib/ 目錄

  • 解釋 Linux 核心的 lib/{list_}sort.c 現有的 bottom-up merge/heap sort 實作,並尋求效能改進,例如 hybrid sort 的引入
  • Linux 核心的 include/asm-generic/bitops 存在若干實作不一致的狀況,本任務嘗試追蹤 git log 和 LKML,以理解發展脈絡,並嘗試用精簡有效的方式改寫,最後嘗試貢獻程式碼到 Linux 核心。
  • 針對 min_heap 的效率改進
    • 第一個 patch 將 array 建立成 heap 的時候我們可以從 n / 2 - 1 (根節點位於 index 0 的位置) 開始做 heapify 而不是從 n / 2 開始,減少了一次不必要的 heapify。
    • 教科書版本的 heapify 操作是從根節點開始向下進行,每個 level 與兩個子節點比較,除非當前節點已經是最小的,否則就與兩個子節點中的最小者進行交換。一般情況下,像是 min_heap_pop 在移除根節點元素後,會將最後一個元素放到根節點再進行 heapify。這樣的比較與交換過程通常會一直進行到接近葉節點的位置,因此總共需要大約 2×log2(n) 次的比較操作。為了減少比較次數,第二個 patch 改成每個 level 只比較兩個子節點中的最小者,直到遇到葉節點為止。在遇到葉節點後,我們再從葉節點向上尋找根節點應該被交換至的正確位置。由於這個位置會很接近葉節點,所以只需大約 log2(n) 次的比較操作。
    • 這樣一來,我們可以節省大約 50% 的比較次數,同時保持相同的交換次數。

Linux 排程器

探討 Linux 排程器內部設計,改進《Demystifying the Linux CPU Scheduler》,並尋求貢獻程式碼到 Linux 核心的機會

Linux 系統虛擬機器

KVM 可將 Linux 核心轉為 type-2 hypervisor,結合硬體的虛擬化支援,使得 host machine 上可以執行多個獨立的虛擬環境,稱為 guest 或者 virtual machine。由於 KVM 直接提供 CPU 和記憶體的虛擬化,guest os 的 CPU 指令不需要額外經過軟體的 decode,而是直接交給硬體進行處理,因此可以有效的提高運行速度。而結合軟體 (例如 KVM 搭配 QEMU) 模擬 CPU 和記憶體以外的裝置後,guest OS 便可以被完整地支援在 host OS 上載入並執行。

全向量視窗系統

mado 是個向量圖形 (vector graphics) 視窗系統,不僅展現相關 rect clipping 相關演算法及 fixed point 的操作,還能利用 Linux framebuffer 和 input 子系統來展現整個視窗系統。打造類似 Cairo API 風格的向量繪圖函式庫。

mado 是達悟 (雅美) 族語「窗」的意思。

電子書編輯

作業系統核心

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

  • Mazu: 亦即 Mazu's Not UNIX,公開釋出的版本會支援 RISC-V 處理器架構。Mazu 的實作參考 MINIX 的許多設計理念,又提供部分 Linux 核心系統呼叫的相容,連同工具程式在內大約僅一萬行,其中微核心的部分則在三千行的規模,很適合作為探索作業系統的教具,一旦熟悉 Mazu 後,再去學習 Linux 核心的內部,掌握度就會很高。設計理念:
    • 媽祖是海上守護神,Mazu 則是應用程式的守護神 (daemon)
    • 媽祖也稱默娘,Mazu 默默守護著電腦硬體,分配硬體資源給特定的應用程式
    • 從命名來說,MazuNIX 顯然是向 UNIX 作業系統致敬,但全部的程式碼針對現代硬體特性重寫,又保有經典系統呼叫
    • 媽祖可以鼓勵企業家勇於參選總統,那媽祖更可鼓勵廣大的學子去挑戰高難度的題目,例如開發作業系統核心

    小故事

針對無人飛行器和機器人系統的軟體基礎建設

頂級研討會