編輯|云昭
就很突然,今天凌晨,微軟其實做了一件讓整個 IT 界興奮到“抖三抖”的大事!
起初,先是微軟 WSL 產品經理 Craig Loewen 在 X 賬號發了一則開源帖子:Windows Linux 子系統 WSL 已經徹底開源!
圖片
緊接著,一個小時后,微軟正式官宣:Windows Subsystem for Linux(WSL)開源了!
圖片
是的,你沒看錯,WSL!就是那個曾讓你在 Windows 上絲滑跑 Linux 的神器!
微軟真的是磨磨嘰嘰了 9 年,今天終于咬牙把核心代碼放到了 GitHub 上了!
這也就意味著,以后各位不僅能用,還能參與開發、提 PR、添新功能!
而且,這也是 WSL 官方倉庫自2016 年誕生以來,最早提出的那個 Issue(Will this be open source?)的完美收官。
圖片
這個消息出來,迅速吸引了上百萬 X 用戶的的圍觀,同時在 HackerNews上高達900多條評論。
圖片
可以說一下點燃了數不勝數的朋友的回憶情懷!甚至有網友發生了錯覺:
“我靠,之前居然不是開源的嗎?不過現在開源了,也不錯!”
許多網友對于微軟的開源傳統可以說相當的自信:“開源開得徹底、又肯花時間和成本去持續維護。反正我沒意見!”
圖片
個別網友表示擔心:我感覺是不是開源之后,微軟反而會更少更新了?很快得到了另一名網友的回應:不會!像 C# 從 2014 年開源以來,微軟照樣在維護和更新,甚至文檔和代碼清理得更好了。可能更新節奏會稍慢一點,畢竟要兼顧社區,但完全談不上‘放棄’。”
圖片
1.歷時 9 年,為什么現在才開源?微軟的 WSL 奮斗史!
由于年代久遠,先來簡單科普下,WSL 究竟是個什么“催人回憶殺”的東西。
其實,WSL 就是一組分布式組件,部分跑在 Windows 里,部分跑在虛擬機中的 Linux 子系統里。至于 WSL 為什么這么有感召力?那是因為:可以這樣說,要是沒有 WSL,相信 Linux 生態至少還要在黑暗中前行 50 年!
沒錯,WSL 就是引導無數前輩大牛從 Windows 轉向 Linux 開發的良藥!不妨看下 WSL & Windows 子系統的小歷史~
首先是遠古時期:NT 多人格系統。1993年,微軟搞了個 Windows NT,牛逼之處在于內核本身跟 Win95/98 完全不一樣,它是個類UNIX的多子系統內核。設計理念:一個內核跑多個“人格層(Personality Subsystem)”,比如:
- Win32 子系統 ?? 給 Windows 程序跑
- POSIX 子系統 ?? 給 UNIX 程序跑
- OS/2 子系統 ?? 給 OS/2 程序跑
結果是,Win32 一統江湖,POSIX子系統基本沒人用。
然后就到了 Interix/SUA 時代:第一代 UNIX 兼容層。彼時,微軟搞了個 Interix,整合進 Windows 2000 和 Server 里,提供相對好一點的 UNIX 環境,但體驗依然很殘缺,開發者用得少。
緊接著,高光時刻來了!2016年,微軟在當年的 Build 大會上推出 WSL 1,直接把 Linux 系統調用轉譯成 Windows NT 系統調用,不用虛擬機,性能還行,但兼容性差。其中,開發者反饋的最大痛點是:
- git、gcc 跑著慢
- mmap 行為和 Linux 差別太大,導致大量程序崩潰
不快不慢,微軟繼續發力,順勢推出了 WSL 2。2019年,微軟推 WSL 2,徹底改方案:直接用 Linux 內核——核心是Hyper-V 虛擬機,運行一個精簡版 Linux 內核。
這樣的好在于,啟動快,兼容性好,Docker / Kubernetes 都能跑。但缺點也很明顯:
- 文件系統 IO 較慢
- 網絡橋接麻煩
再然后的故事線可以說就來到了現代,可以說是微軟瘋狂將 WSL瘋狂剝離 Windows鏡像的 4 年。
- 2021 年:WSL 從 Windows 鏡像里剝離,發布 Store 獨立版,首個版本 0.47.1,支持 Windows 11
- 2022 年 11 月:WSL 1.0.0 發布,正式支持 Windows 10/11
- 2023-2024:不斷更新,加入 GPU 加速、GUI 支持、systemd,遷移至新版包,在迭代過程中,WSL 迎來了又一個重要版本 —— WSL 2.0.0,帶來了鏡像網絡、DNS 隧道、Session 0、代理、防火墻支持等重大改進。(這里就連官方人員都做了有趣的調侃:“計算機科學三大難題: off-by-one 錯誤、命名、還有緩存失效。”)
- 2024 年 Windows 11 24H2:全面默認使用新 WSL 包,wsl.exe 變成啟動下載器
目前 WSL 已更新到 2.5.7,四年時間,GitHub release 頁都翻了 9 頁。
而今天的這次開源,意味著微軟旗下的開發節奏將演變成全球開發者的加速度!更多社區開發者能參與到核心代碼里來。
2.網友:歷史總是押韻的!從“真·Linux Shell”到被遺忘、再到繼續對抗Unix陣營
為什么說會是“回憶殺”呢?不妨看看那些“大叔感”超標的老大哥是如何描述自己的“爺青回”的——
一位名為 jjcm 的網友曾把 WSL 奉為引導自己從 Windows 轉向 Linux 開發的“救世主”:
當年 WSL 剛出來的時候我簡直激動壞了!終于能在 Windows 上搞個“真·Linux Shell”了!我平時用 Windows 打游戲,正好想把開發和游戲都放在同一臺機子上,感覺這玩意就是救世主。
不過用著用著,發現小毛病越來越多:有些包不太好用,系統和 WSL 之間各種邊界問題,操作起來總覺得哪哪有點別扭。
jjcm 表示,現在索性甩開了 Windows + WSL 的游戲開發模式,直接用 Linux 了!“ Valve 那邊瘋狂推進 Proton,再加上 Linux 玩游戲的體驗越來越像樣,我索性直接換成 Ubuntu 和 NixOS 了。雖說現在玩游戲的那一端開始有點小問題,但開發那邊舒服太多。
Linux 上的東西進步飛快,現在開發環境好用到讓我呼吸順暢,甚至我覺得整體體驗已經甩開 Windows + WSL 了——雖然有些 3A 大作還是跑不了,但瑕不掩瑜。
”還有一位情懷黨的大牛,對此表示興奮不已:“我太懂了,當年 WSL1 剛出來我超級激動!還記得 NT 剛發布那會,主打的是能跑各種‘人格層’(Personality),什么 OS/2 啊、POSIX 啊、Win32 啊,一個系統打天下。
”另一網友 dbdoskey 則總結得非常有代表性:
其實如果當年 WSL1 真搞定了,那絕對能算是微軟歷史上最離譜又牛逼的操作之一。
想想看,NT 內核里那個早就被人遺忘、當年 90 年代為了打天下硬塞進去的小功能,結果近 30 年后突然被翻出來,繼續跟 Unix 陣營杠,簡直像《星戰》里盧卡斯說的:“歷史總是押韻的”。
那為什么 WSL 的氣候最后沒有大成呢?
網友 pjmlp 著實來了一波“點醒夢中人”的回憶殺:子系統的思路很長江,但實在是性能太感人了!
“其實那個年代,搞子系統的設計思路在微型計算機和大型機上挺常見的,微軟這事兒也不是原創。
我敢說啊,要是當年 Windows NT 里的 POSIX 子系統能靠譜點,我當年根本不會折騰 Slackware 2.0 的安裝盤。”
為什么這個思路很常見?另一位網友解釋道:其實 WSL 1 當初的設計思路,跟“Windows on NT”差不多,想靠模擬內核的方式讓 Linux 跑在 NT 內核上。但功能砍了太多,最后干脆放棄了,直接上了個基于容器的虛擬機(WSL 2)。
“我本來還挺希望 NT 版的能成事的,但說實話,這事確實太復雜了。”
時來天地皆同力,運去英雄不自由。WSL 當時誕生的目的就是在操作系統競爭時代分得一杯羹,但微軟謀了事,功成卻在天!
正如一位網友所總結的:用 Windows 跑 Unix 那套,實在不搭,遠不如 直接用 Linux!
“說到底,WSL1 最大的問題是,Windows 的核心 API,比如 CreateProcess 之類,和 NTFS 的文件系統,跑 Unix 那套玩法實在太慢了。你要是在 WSL1 里用 git,或者編譯點啥,那速度感人,遠不如直接用 Linux 本機或者開虛擬機。”
3.寫在最后:WSL 鐵甲猶在!
雖然大家現在都已經用慣了 Linux,但 WSL 的內核開源也許正在重新攪動開源系統的“一池春水”。
眾所周知,沒有社區,就沒有今天的 Linux。同理,開源后的 WSL,或許即將被更多社區開發者賦予第二次生命。
正如微軟在官方博文中所披露的:要知道,這幾年來,社區大神們不僅在沒有源碼的情況下,硬是靠逆向分析、Bug 跟蹤、功能建議,幫 WSL 變成了現在這個樣子。
而現在,源碼放出來了,未來的可能性就更多了。
歷時總是押韻的,如今的 Linux 也在遭遇“中年甚至老年”危機,而 WSL 的開源則種下了一顆逆襲的種子。其實 Windows 的鐵甲依然在:
首先,Windows 現在有兩個很大的優勢,一個是不強制設備廠商 GPL,另一個是驅動 API 一直穩定,更新內核不用改驅動。就這兩點穩住了硬件廠商和開發者。
其次,常年不懈地維護迭代在個人開發者中的影響不容小覷。這一點可以從Hackernews上一位“死忠黨”的用戶評論得以印證:
“說實話 WSL2 現在也超級棒,我真希望整個 Windows 都改用 Linux 內核,直接全家桶 bash 起飛。我一直對 PowerShell 無感,bash/sh/dash/ash 這種就很好用了。”
寫到這里,文章就結束了。最后,留給各位讀者發揮:你認為微軟這波的開源操作,是為什么呢?是否也有過WSL開發的“當年”呢?