課程資訊
課程名稱
開源系統軟體概論與實務
Open-Source System Software and Practice 
開課學期
104-2 
授課對象
電機資訊學院  資訊工程學研究所  
授課教師
洪士灝 
課號
CSIE5316 
課程識別碼
922 U4300 
班次
 
學分
全/半年
半年 
必/選修
選修 
上課時間
星期二2,3,4(9:10~12:10) 
上課地點
資104 
備註
總人數上限:80人 
Ceiba 課程網頁
http://ceiba.ntu.edu.tw/1042CSIE5316_OSSSP 
課程簡介影片
 
核心能力關聯
本課程尚未建立核心能力關連
課程大綱
為確保您我的權利,請尊重智慧財產權及不得非法影印
課程概述

開源軟體 (open-source software)對於資訊世界的發展極其重要,尤其是系統軟體與中介軟體。在1990年代快速發展的GNU/Linux,1990年代末期進入互連網時代,世界上最多伺服器使用的開源碼網頁伺服器Apache HTTP Server應運而生,之後更衍生出傳奇性的開源碼Apache Project。迄今,各個開源碼社群持續改進、優化既有的軟體,並且不斷地開發出有巨大影響力的新計畫,包括廣泛用於建構雲端服務與巨量資料運算的 OpenStack、Hadoop和Spark,世界上最多人使用在智慧手機和平板的Android作業環境。

時至今日,開源系統軟體與中介軟體更成為物聯網和巨量資料分析時代的重要基礎,高效率、即時性、機器與機器之間良好的溝通與合作是這個時代應用開發的關鍵,除了需要有高效率、穩定、安全的作業系統之外,還需要更多高品質、優化度高的系統軟體與中介軟體。對於台灣傳統以硬體設計與生產為主的產業結構而言,如何跟上開源硬體的潮流,在第一時間運用現有硬體設計的基礎,打造出兼具創意與設計實力的系統,以及與應用面接軌呢?我們認為,與硬體接軌的系統軟體、將系統功能提供給應用開發者的中介軟體、先進的效能優化技術與工具、提升系統穩定維運 的容錯與資安技術等,都是與硬體設計息息相關,而且能夠縝密整合後產生高價值,即可能是台灣資訊產業轉型的契機。以下是與硬體密切相關的開源碼系統軟體:
- 作業系統:Linux, Android, OpenStack
- 虛擬化軟體:QEMU, KVM, Docker
- 編譯器:LLVM, Aparapi, C++ Amp
- 異質計算: OpenCL, HSA Runtime
- 網路與資安: OpenFlow, OpenSSL
- 效能分析:Perf, Oprofile, Valgrind, HSAemu

廣義的系統還包括中介軟體層,當前許多巨量資料分析系統所使用的軟體幾乎全部都是開源碼軟體,包括:
- Apache Hadoop:處理磁碟為主的大量資料(in-disk computation)
- Apache HBase:建構大型資料庫的NoSQL資料庫系統
- Cloudera Impala:介接傳統SQL資料庫系統到NoSQL大型資料庫軟體
- Apache Accumulo:儲存key-value所構成的非結構性大型資料
- Cloudera Search:搜尋巨量資料
- Apache Spark:將常用的巨量資料放置在記憶體中加速運算
- Apache Kafka: 高吞吐量的分散式大型的訊息傳遞系統
- R: 普遍使用來分析巨量資料的統計軟體

甚至於在硬體架構上,近年也逐漸開源化,例如:
- 硬體平台:Arduino, Raspberry Pi
- CPU/GPU: OpenRISC, RISC-V, MIAOW

因此,學會善用開源碼系統軟體,是新時代系統與應用的開發者,應該具備的素養以及必須掌握的趨勢。本課程將透過教學與實驗,帶學生進入開源碼系統軟體的世界、認識重要的開源系統軟體,並且藉由期末專題,引導學生思索如何綜合運用、客製化、優化各類開源計畫來打造優質的系統並且支援重要的應用。

這麼多要怎麼學? 重點在於舉一反三。我們找各領域第一流的教授、業師,帶領大家入門,指導同學如何快速吸收知識,但修行靠自己,這堂課需要同學花時間研究這些開源程式碼,否則只是走馬看花,收穫不大。

由於重要的開源系統軟體很多,我們將選擇IoT與Big Data應用為當前的重點,挑選具代表性的系統軟體。每一單元針對特定領域,教導學生學會使用該領域的代表性軟體,同時鼓勵學生深入探索該領域其他的開源系統軟體。學習使用、舉一反三、研究改進,是成為高手的三部曲。我們希望以這門課程帶領學生入門,也希望藉此建構強而有力的開源系統軟體社群,吸引更多高手來教與學,共同來提升臺灣的開源系統軟體的水準。 

課程目標
本課程的目標在於讓修課同學:
.瞭解開源系統軟體的背景技術知識
.學習使用開源系統軟體開發應用
.探索相關的開源系統軟體
.探討如何改進開源系統軟體 
課程要求
懂得C語言,對於作業系統、計算機結構有足夠的認識 
預期每週課後學習時數
 
Office Hours
 
指定閱讀
待補 
參考書目
待補 
評量方式
(僅供參考)
 
No.
項目
百分比
說明
1. 
作業 
50% 
 
2. 
課堂表現 
10% 
 
3. 
期末專題 
40% 
 
 
課程進度
週次
日期
單元主題
第1週
2/23  Shih-Hao Hung: Course Overview;
黃敬群 (jserv, Jim Huang):
Free Software and Open Source Ecosystem, see Hackpad: https://ntuoss.hackpad.com/ 
第2週
3/01  黃敬群 (jserv, Jim Huang):
GNU Toolchain & Linux-based Development
Week # 2 (Mar 1, 2016) 課程共筆,請見:
https://ntuoss.hackpad.com/Mar-1-2016-iKQ1n7mjqeR
重點提示:
* 編譯器技術的重要性
* GNU Toolchain 運作原理
* 簡述 GNU/Linux 開發工具 
第3週
3/08  黃敬群 (jserv, Jim Huang):
Business Model & How the World Works 
第4週
3/15  黃敬群 (jserv, Jim Huang):
OS Evolution: Multics, Unix, BSD, Linux, Plan 9, L4, Android, mbed
Why Open Source matters 
第5週
3/22  梁文耀博士:
Linux 與軟硬整合 -- 由下而上認識 Kernel
* 作業系統的基本分類與定位
* Linux 核心與驅動程式架構
* UNIX 的檔案系統與裝置檔概念
* Linux 記憶體管理基礎
* 共時執行與同步機制
* 行程控制與等待佇列控制
* 中斷處理與後半常式概念
* 連動本文與進階同步議題 
第6週
3/29  梁文耀博士:
Android 架構 -- 由上而下的系統整合
* Android 架構與應用框架簡介
* Android 框架服務與行程間通訊機制
* Android 裝置控制模型與服務導向式裝置管理
* Android 跨階層軟硬整合方式
* Android 啟動流程
* Android 核心系統服務及服務管理方式
* Android 使用者空間硬體抽象層架構 
第7週
4/05  (假日) 
第8週
4/12  王耀聰:大數據與Hadoop開源系統軟體  
第9週
4/19  徐慰中教授:LLVM開源碼編譯器 
第10週
4/26  Spark.tw社群Erica Li:
善用記憶體加速大數據處理的SPARK開源碼系統軟體 
第11週
5/03  施吉昇教授:如何自行開發開源物聯網中介軟體? 
第12週
5/10  陳柏儒+Fred Chien:物聯網x開源系統軟體:LinkIt™ Smart 7688 與 Node.js 的邂逅  
第13週
5/17  期末專題討論 + 開源硬體的趨勢(RISC-V) 
第14週
5/24  鄭振牟教授:資訊安全與開源碼 
第15週
5/31  洪士灝:
如何基於開源系統軟體進行差異化?效能分析與優化 
第16週
6/07  教師出國,停課一週 
第17週
6/14  洪士灝:
如何基於開源系統軟體進行差異化?系統架構與異質運算 
第18週
2016/06/21  期末專題展示