Windows 10 支援 bash:微軟 Linux 化之路的第一步?/傅瑞德

微軟宣布將在Windows系統中加入對GNU開源專案「Bash shell」的支援。Bash(Bourne Again SHell的縮寫)長久以來一直存在於Mac OS X上和許多Linux版本上,而Windows上給開發者使用的預設終端機工具則是微軟自己的「PowerShell」。 來源: Microsoft is bringing the Bash shell to Windows 10 | TechCrunch

(編按:如果您還不是很清楚shell的意思、以及對軟體開發者的用處,請參閱這篇〈認識與學習BASH〉。)

Windows支援bash的目的

從技術上的角度來說,Windows支援bash的基本目的,在於讓部分現有的.sh程序能在Windows上使用、或是往後讓軟體開發者也能在Windows上撰寫。而這一點有兩個意義:

  1. 將原本在Linux或Mac OS X上撰寫或使用的工具轉移過來,增加Windows上可以使用的程式工具;

  2. 讓更多軟體開發者願意在Windows上製作產品、或是將原本為其他平台開發的產品轉移過來;

  3. 藉由上述兩個效果,在戰略上設法遲滯其他平台的發展。

當然,以現在的市場情勢來說,第三個效果的成效可能有限;但是:

  • 開發商的時間是有限的,讓她多用一分鐘在Windows平台上,就少一分鐘在其他平台上;

  • 相信微軟的戰略動作不會只有「支援bash」這件事情上,大方向來看(不一定是所有的執行面)甚至可以說是「讓Windows往Linux化發展」。

如此一來,這個「小動作」對Windows未來的發展就有了很重要的意義。

Windows的棋局

目前的市場局勢是,以Windows、Linux、Mac OS X幾個主要作業系統,再加上還不是主流的ChromeOS、以及手機用的iOS和Android,除了Windows以外都屬於「*nix陣營」(衍生自Unix系統的各種版本)。

目前Windows挾著在PC市場的高佔有率、以及在企業市場還難以動搖的地位,在軟體市場還有尚稱穩固的產值;但隨著行動設備的興起、Android和iOS在行動市場的強勢地位、以及(很重要的)整個軟體產值市場往行動設備靠攏。

也就是說,如果這個趨勢沒有改變,Windows未來無論在整體作業系統市場(連同手機、平板等屬於「運算設備」計算)、以及應用軟體等等週邊生態系方面的獲利,都將會陸續受到「*nix」陣營的擠壓;之前在市場上舉步維艱的Windows Phone手機系統,就是最好的例子

一個Linux、各自表述

根據這篇報導,微軟支援bash的來源,是「透過與Canonical(編按:開發Ubuntu Linux的公司)公司合作、在Windows 10內部建立的Linux子系統」。根據Canonical公司創辦人Mark Shuttleworth的說法:

完整Ubuntu原生環境出現在Windows系統中,不需要經過虛擬或模擬的方式進行,不僅打破了過去的成見、也開啟了一道通往未知發展的大門。

在我們持續將自由軟體提供給更多潛在用戶的過程中,這個發展是連我們自己都沒有預期到的;但無論如何,我們很高興能作為Windows中Ubuntu應用環境的推手,將會努力協助對Linux環境有興趣的Windows開發者運用這個很棒的新工具,也期待這個新方向所帶來的可能性。

從上面這段話來看,Canonical幫微軟開發這個Windows中的Linux環境(原文中叫做「Linux for Windows」,照一般的解釋會有「Windows版Linux」的感覺),是為了「讓Windows開發者有更多嘗試Linux系統的機會」;但依我們從商業角度來看,其實是剛好相反。

或者說,這是一種互利的行為:微軟希望從*nix大軍的包圍中解套、而Canonical則希望有更多的Windows開發者過來充實Ubuntu系統下的軟體環境。

這種表面上「彼此讓利」、而且「一個Linux各自表述」的競合關係,其實是很值得觀察的。

Linux化是解開困境的答案?

根據引文中TechCrunch的說法,微軟除了已經透過Azure雲端平台提供對Linux的支援以外,也將旗下的一些技術納入開放原始碼專案,甚至打算不久之後將資料庫旗艦產品SQL Server搬到Linux平台上。

姑且先不論微軟的這些產品,在*nix陣營(或者說開放原始碼領域)原本就有許多(容易免費取得的)競爭對手,上述的這些動作在短期的商業運作中似乎沒有太多的實際效益,但就長遠的戰略來說,卻是在難以突圍的棋局之中「先塞死自己一塊換取海闊天空」的一手(雖然聽說這種下法在現代圍棋中是禁止的)。

回過頭來說,Windows系統在現今作業系統中的「獨特性」,曾經是多年以來保護自身利益的萬靈丹(只要我不出Office的Linux版,你們就非得用Windows不可),但在前面提過的兩個重要因素影響之下,反而成了自己的絆腳石:

  • 行動設備的普及,而微軟又不是市場主力;

  • *nix陣營的擠壓。

而且在往後看得到的幾年之中,這個狀況並沒有回頭的跡象;因此微軟勢必得從幾件事情入手,作為大幅突圍的準備:

  • 將作業系統以外的服務跨平台化、雲端化,解除作業系統本身的限制;

  • 改變作業系統相關的架構或商業模式,例如(這些都是比較極端的想法,但在這範圍之內都有可能):

  • 將Windows逐步改變為*nix架構;

  • 將Windows改為開放原始碼(而且最好免費)的作業系統。

  • 或是將Linux支援廣泛納入Windows中(也就是「Linux成為Windows的子系統」)。

然而別忘了,如同Canonical公司說的,他們也會「引導對Linux環境有興趣的Windows開發者(去試試Linux)」。

除非Canonical跟微軟之間已經簽了互不侵犯條約、或是微軟已經有完整的「Linux化地圖」,否則這一點也會是微軟的隱憂:Windows會往Linux跑,就會往Mac OS X、Android、iOS跑,哪裡有錢哪裡去,何況還可以一套功夫闖天下?

當然,實際上的狀況是,能跨平台的開發者早就跨了、能跑過來(或是跑過去)的開發者也早跑了,並不差微軟的這些動作;所以我們現在談的,是微軟作為一家企業的戰略動作、以及對於自身困境的解法。

或許,哪天我們就會看到微軟併購Canonical的新聞?


補記:

在ZDnet的〈Ubuntu (not Linux) on Windows: How it works〉這篇文章中,進一步說明了「Linux for Windows」的細節:

(Linux for Windows)並不是 Cygwin 的衍生產品;各種開源工具都經過重新編譯,以原生方式在 Windows 上執行。……也就是說,Ubuntu ELF 是以細緻到每個位元、每個檢查碼都相容的形式在 Windows 上直接執行。

……微軟的工程師所做的是讓 Linux 系統呼叫以「即時翻譯」的方式轉換為 Windows 的系統呼叫指令。熟悉 Linux 的人可以把它想成是反過來執行的「WINE」,也就是讓 Ubuntu 系統二進位碼以原生方式在 Windows 上執行的工具。微軟則稱之為「Windows Subsystem for Linux」(但這個部分還沒有開放原始碼」。

……微軟發現,許多開發者在使用 Windows、Mac、或是 Ubuntu 系統的時候,都會花許多時間在 Linux shell 上;過去 Windows 用戶必須使用耗費大量系統資源的虛擬機器、以 ssh 方式透過網路連線到雲端系統、或是使用速度緩慢的 Cygwin。

以後則只要按下 Start 鈕、輸入「bash」或「ubuntu」,就可以不經過虛擬機器或重新編譯,使用所有的 Ubuntu 或大多數的 apt 工具。


主文中才剛提到微軟會不會哪天就買了Canonical,今天(4月1日)新聞就出來了:〈Microsoft Buys Canonical And Shuts Down Ubuntu Linux OS〉。

ms-bought-ubuntu

不過(到目前為止)當然是假的。 :)


為了瞭解這個新聞與開發人員的關係,我們訪問了幾位多半也是本站作者的業界人士,看看他們有什麼想法(這些都是真的): C9S

現在因為企業市場已經逐漸飽和,微軟主要是想拉攏開發者,因為現在不用 MS 家族工具的開發者太多了;此外,主要也是為了推他們的 Azure 雲端平台服務。

以前多數企業不懂 IT 技術,所以全部會採用微軟的 Total Solution;現在做外包的人太多了,加上 Linux Server 逐漸成為大宗,企業開始尋求低成本的解決方案,逐漸放棄微軟的解決方案。

因為 Apple 在多年前就開始支持 POSIX 標準,現在微軟雖然走這步,個人認為雖慢了,但不嫌晚,對開發者來說算是好事。

TonyQ

新聞裡面寫是子系統、而且是跟 Ubuntu 合作,我對這塊到底是怎麼整合覺得有點疑慮;我直覺會想到的是 Cygwin 模式。

微軟去年就有向 Linux 靠攏的意圖了,這我不懷疑;但能整合到什麼程度,只能說觀望了。很多人都試過這個題目。

我覺得考慮到過去多年在 Windows 上使用 DOS、Cygwin、PowerShell 的經驗,兩個 OS 的差異是根深蒂固的。簡單從舉凡 Linux 體系的設定檔、cronjob、init.d service 等等,再到各開發工具對於 OS 的支援,實在是很難相信 Windows 能做到無縫整合。

如 VM 一般在作業系統內開子系統,以 Samba 或之類的方式聯繫是可能沒問題,但兩個系統之間的差異跟界線,如 port mapping 等等又要怎麼處理?太多 OS 層面的事情了。

更不用說一個我們很熟悉的老朋友:「rn vs. n」 之類根深蒂固的文化問題。

微軟真的有興趣,好好處理這些題目全面靠攏 Linux 嗎?作為去年才終於在開發上主要專案都不再能良好支援 Windows,終於死心轉到 Mac 上的開發者,如果能讓我有在 Linux 一樣的自由度跟開發環境,我很樂意回歸。

怕只怕總是永遠的掛羊頭賣狗肉。

食夢黑貘

平台互相學習本來就是必然的。

當然這對本來就熟命令列介面(command line interface,CLI)的人是一大福音,但對於只會圖形介面(graphical user interface,GUI)的 Windows 管理者來說,能有多少幫助就不知道了……(尤其 Windows 管理者都不喜歡 CLI)。

若是開發者原本就跨雙平台,應該會很高興吧;但只習慣 Windows 的人變成要多學一個系統(?),但有了 bash,的確是讓 Windows 有更多「data flow」(資料流)的空間。

原本 GUI 很多的問題,來自系統事件要用滑鼠觸發,所以資料流會被卡住,但用 CLI 的話,這類問題就可以減少。

Ascent Yeh

我的看法是,這個改變無法引發開發者從 Unix/Linux/Mac OS X 跳過來 Windows 的動能,甚至可能為 Windows 造成更多的病毒溫床。

唯一的正面能量,可能是微軟繼 IE 後,開始對於正規(最大)程式或網頁語言的屈服吧。例如 IE 之前不願意支援 W3C 制訂的 CSS/HTML,但現在如果往大多數人的方向移動,這一點上就很難不妥協。

因為 Windows 已經有太多工具、甚至用虛擬化都比原生支援 bash 來得好;會在 Windows 中用 bash 的人,還是會繼續用 Windows。

林君憲

因為課業的關係,我常常在 Mac OS X 下抓一堆 open source 或是 GNU 的軟體來用。只要編譯器環境設定好,編譯流程幾乎都是直接打開包裝後,就可以編譯安裝和執行。

反觀以前要在 Windows 上 跑 GNU 或 open source 軟體時,得花上不少功夫修改、或是安裝 Cygwin 之後,才能模擬一個 Unix 環境來用,用起來不是很順手。

因此,現在Windows 10直接採用bash,想必未來會有一堆豐富的 open source 專案被移植到 Windows 10 上頭;這可以讓 Windows 10 軟體生態圈更為多樣化,所以是一件好事。

藍永倫

Windows 10 之前的 cmd.exe 不是很好用,因此支援 Linux 的純文字程式,對開發者來說是個好消息:可以直接執行大部分熟悉的工具,例如 grep、diff、awk 等,維護系統 script 的成本也降低,不用特別去學 Windows 專用的語法。

除了宣示對開發者釋出善意之外,由於在現在的伺服器市場中,虛擬化是滿重要的技術,而微軟除了擁有作業系統,研發掌握虛擬化技術也是一種「底蘊」。現在跑的 Unix 工具也許只是早期測試和火力展示,說不定將來微軟會宣佈超高效、輕量的其他平台相容層。


您的看法呢?歡迎一起來觀察微軟的這個轉變。