久違的技術教學系列!隨著電腦達人養成計畫第四章的完結,在第五章開始之前有一段時間會以其他主題的文章為主 (畢竟已經好一陣子都是更新連載系列文了嘛),這篇要談的是當初宣布時讓站長的幾個同學感到很興奮 (雖然我不太懂為什麼) 的 Bash on Ubuntu on Windows (很拗口吧?這是微軟宣布時用的名稱,其實真正的重點是「適用於 Linux 的 Windows 子系統」,在 Windows 上能夠原生執行 Ubuntu 的 Bash 就是這功能的傑作,能跑的當然不只是 Bash)。
這項功能是幹嘛用的?
簡單來說,微軟與 Canonical (就是發展 Ubuntu 的公司) 合作在 Windows 核心深處植入了一套符合 Linux 系統規範的 System Call (系統呼叫),並且以 Ubuntu 為基礎修改了一套可以運作在 Windows 中的 Linux 「子系統」(實際上是一套簡化版本的 Ubuntu 14.04 LTS),由於是直接深植在 Windows 作業系統核心裏頭的,因此比起我們平常使用的 Virtualization (虛擬化) 還要更加接近硬體本身直接執行 (微軟的說法是,跟直接用硬體執行幾乎是一樣的)。
至於這東西的由來呢,微軟的說法是因為在 Windows 10 公眾預覽計畫中有不少人反映希望微軟能改進命令提示字元的功能甚至是引入在 Linux 上的命令列工具。
另一方面大概是受新 CEO 政策的影響吧?微軟最近似乎變得挺傾向於跟其他陣營融合與進行一些以往我們認為不可能發生的嘗試 (不過這樣做效果好不好就見仁見智了),加上有許多開源計畫都是奠基於 Linux/Unix 上,又加上自家先前搞了個已經被擱置的 Project Astoria (本來是打算把 Android App 用原生的方式移植到自家的 Windows 10 Mobile 上以解決當前 Windows 市集上 App 數量不多的問題),這計畫或許有留下一些遺產吧?(雖然未經證實,但挺合理的,畢竟 Android 本質上也是 Linux)。
微軟本身非常強調這項技術與傳統我們認知的虛擬機器是一點關係也沒有的,如果你看不太懂甚麼子系統、System Call 之類的東西的話,下面這張示意圖或許能夠幫助你理解,你可以將 System Call 想像為作業系統核心 (Kernel) 所提供的功能,而核心之外的程式都是在作業系統核心的基礎上執行的,它們會去使用 (呼叫) 作業系統核心提供的 System Call 來命令電腦的硬體元件做事。
而 Windows Subsystem for Linux 的原理就是在 Windows 的作業系統核心裡面設計一個叫做 WSL 的模組,這個模組會向 Linux 程式提供它們會需要的 System Call (與 Windows 程式所使用的 System Call 格式不同,無法直接相容,這也是雖然都基於 x86 架構,但 Linux 程式並無法在 Windows 系統下執行的主因),因此 Linux 程式就可以靠著這個模組 (由 Windows 系統核心代理) 來直接向硬體元件下達指示了,此外,由於這個模組是設計在原生執行中的 Windows 作業系統核心裡,因此運作於其上的 Linux 看起來就也像是原生執行般,理論上性能會比 VM 好很多。
如果要說得更簡單一些的話,就是 Windows 系統核心這層之上與 Linux 應用程式這層之下之間,多了一層像是翻譯機的東西,讓 Linux 應用程式發出的訊號能夠轉介給 Windows 系統核心再直接交給硬體處理,硬體處理完畢的訊號也能透過這層翻譯機來將結果翻譯成 Linux 應用程式看得懂的格式。
而除了程式本身的執行能力之外,另一個需要考慮的問題是檔案系統的相容性。我們知道 NTFS 與 Linux 慣用的 ext 系列檔案系統是不相容的,因此微軟為此生出了兩款「模擬」檔案系統,其中第一套是 VolFS,使用與標準 Linux 完全相容的檔案系統,用來存放 Linux 子系統本身的檔案以確保系統正常運作,權限管理也是使用 Linux 的那套 chmod 跟 chown 來處理 (值得注意的是,每個使用者存取 WSL 的時候,設定與 VolFS 內容的變更、Linux 子系統的帳號密碼系統都是獨立且互不影響的);第二套則是 DriveFS,用於讓 Linux 子系統能夠直接存取以 NTFS 或其他 Windows 檔案系統為基礎的磁碟區,權限管理則以 Windows 系統為準,僅支援一部分的 Linux 檔案系統功能。
在上面能跑的東西其實已經不少了,而且除去一些還沒完成的部分以外,用起來真的幾乎跟直接裝一套 Ubuntu 沒兩樣,微軟發佈這份投影片時 top 還不能用,但實際上在 Build 14393 中已經沒問題了!
看完介紹了解這項功能的基本操作之後,請轉往下一頁閱讀安裝教學哦!