內置WSL 2的Windows 10可以完全取代桌面版Linux嗎?

不考慮價格因素。


目前(2020年5月)還不完善,WSL1是真實的本機,WSL2是個獨立虛擬機,因此而導致的獨立IP問題還沒有解決,部分情況下不如WSL1好用,部分情況下也不如WSL1的性能。

不過最新公告中,微軟依然還在不斷改進WSL2,添加GPU支持,添加原生GUI支持(內置xserver+rdp然後顯示為Windows窗口)等等。所以等這一波改進之後,大概慢慢就可以了吧。

理想替代Linux需要有 WSL1 的特性(等同於本機)以及WSL2的一些功能。大概是在做了在做了,Windows10這些年是真正的越來越好用了。


先說結論,WSL2目前部分功能無法取代桌面Linux,但是日常開發是完全足夠的,甚至可以直接跑docker。

尤其是考慮到Windows 2004版本更新之後,WSL2是一個完整功能的Linux內核且獨立更新。

很多人提的問題根本沒指出關鍵,我說兩點關鍵的。

  • 現版本的VirtualBox是可以和Hyper v共存的,Vmware也有計劃支持。
  • GUI程序可以通過X11轉發實現。

我目前觀察到的功能缺失(截至windows 10 2004版本):

  • IPv6
  • WSL2內部不可訪問Windows的localhost,但是反向是可以的。
  • systemd(當然很多人不喜歡這個)


個人覺得,以目前的實現程度評估,對於80%的開發者來說,是完全可以的(當然像一些深入系統底層,對os環境有特殊需求的,以及就是覺得虛擬機比wsl2好的除外)。

我的情況呢,是目前正在 wsl2 下面用 idea(沒錯,就是GUI應用),目前為止體驗很理想,已經用了一個多月了,暫時還沒有遇到踩不過去的坑。

不過,因為現在還是嘗鮮階段,所以有些坑是必須要踩的(比如要關虛擬網路的防火牆才能跟win正常通訊,比如升級2之後之前的軟鏈接會失效,還比如不能用snap,還比如待機再喚醒後跟win上x window服務的網路會斷連),但是踩完坑之後,用著還是很香。

至於為什麼要用 wsl 下面的 IDE 而不是用 Windows 版本的呢,主要是 Windows 版的 IDE 用不了 Linux 下的開發和編譯環境(主要是文件路徑不統一導致使用上有問題,倒不是因為可執行文件不兼容),而我又不想在電腦上維護兩套開發環境。

---------------------------------- 補充內容的分割線 ------------------------------------

發現很多吐槽WSL2的人挺多,感覺評價比較兩極分化,我覺得,這個可能跟使用方式有關,其實跨平台這事兒從來都不容易,從最早大家用的 mingw,msys 到 msys2 再到 wsl 再到 wsl2,其實哪個階段都是有坑的,至少路徑格式的問題短期內就看不到解決的希望,因為這個依賴生態的,得所有軟體在處理路徑參數的時候都做兼容才行。

所以,要用得舒服,就必須找到一個最佳實踐,而不能期望能完全無痛地跨系統互調,對於我而言,這個最佳實踐就是:

  1. 將開發環境完全控制在 WSL 里,堅持不在 Windows 下安裝任何開發軟體,這樣其實就不太會踩到諸如路徑格式不一致導致的問題。
  2. 如果你用IDE,那麼IDE也要想盡辦法用 WSL 上的那套編譯環境,有 remote 模式可以考慮用 remote 模式,remote 模式不給力的,像 idea 這種的,可以選擇直接裝 Linux 的版本,GUI 可以用 vcxsrv 之類的搞。
  3. 所有項目文件都放在 WSL 里,這樣其實就不會太依賴跨系統IO的速度。
  4. 所有需要用Git之類的工具管理的配置文件,全都放在 WSL 里,如果某些配置文件 Windows 軟體需要復用,那麼就軟鏈接過去,這種配置文件級別的小文件其實不關心IO的速度,能直接軟鏈接就已經很完美了。
  5. 只把現有的互調支持當作一個兜底方案,確實需要的時候,偶爾用一下,平時高頻使用的工作流中盡量不依賴這種互調。

你可以說,這麼用的話,不就是一個融合體驗好一點的虛擬機了么? 沒錯,其實可以說,對於日常開發工作來說,我需要的就是這麼一個融合體驗足夠好的虛擬機,你以虛擬機的要求去看它,它融合體驗已經非常好了,這就夠了


試了一把,WSL2不能替代Linux。

問題主要集中在網路部分和Hyper-V部分:

  • WSL2是基於Hyper-V,這意味著你跑了一個WSL2之後,就沒法啟動VirtualBox了。

現在據說vmware和VirtualBox可以用Hyper-V跑虛擬機了。但是問題還是很多,比如我原來一大堆和具體的虛擬機引擎綁定的工具,比如Guest tools,CPU的一些設置,外設的一些設置等等,都要變動。

比如要在不同平台下編譯jdk,我原來用vmware分別跑一個linux和macOS就能編譯,現在你告訴我怎麼基於Hyper-V啟動macOS?

說到底,一個內核提供兩套syscall非常酷,但是你起一個VM+周邊工具來搞,會有很多問題的。

另外,vagrant啟動Linux虛擬機作為開發環境的同學,現在Hyper-V一開,默認的VirtualBox就沒法跑了。

  • 在連接VPN的情況下,WSL2內無法訪問外網。

L2TP VPN和Motion Pro均有不同程度的問題

  • WSL2實例和Win10訪問,那個IP地址是變化的,這點非常不便。
  • 還有,Linux下所有進程都是init進程的子進程,但WSL2不是這樣

如果你在WSL2下用過htop應該知道,以樹狀方式顯示進程會有bug。


所以切換回WSL(1)了。

但是,WSL1的缺陷也是有的,WSL1的系統調用和Linux原生的系統調用還是有細節上的不同,尤其是很多時候測試不同版本系統調用的表現,很不方便。

然後VPN DNS的問題,可以通過generateResolvConf = false來解決。


總而言之,普通用戶態程序用WSL1;特殊API或者涉及到具體的內核行為的地方用虛擬機;涉及到內核性能的,直接上物理機。沒WSL2啥事。


wsl2重度使用者來回答,結論:完全可以。

前段時間想換macbook,得知wsl2的消息後立馬給我的現役筆記本換上了,理由有:1.wsl2使用的是linux內核,這比wsl1的api翻譯強多了,我曾經在wsl1跑一個多線程程序出現過問題。 2. wsl2的進程信息不會出現在win10的任務管理器里,只有一個大大的vm進程,不在任務管理里就不會被win的安全中心跟蹤,wsl1里gcc編譯慢就是因為被安全中心監控了,這沒必要關了安全中心又得不償失。3. 和win10高度整合,直接在linux終端輸入code就自動用vscode wsl插件打來當前目錄,和本地開發體驗一致。win的exe程序如notepad++、win的文件管理器直接在終端輸入就能打開,linux的原生gui用x11轉發就可以。4. wsl2使用的是原生的ext4文件系統,io速度和原生linux一致,這點太棒了。

目前已經用在生產環境中,網路方面,win10的localhost可以訪問wsl2的所有埠,wsl2的localhost不能訪問win10埠,這內部其實是做了一個埠轉發的,個人覺得這麼設計一定程度上能起到環境隔離作用,如果非要在wsl2上訪問win10埠如使用socket代理給終端等操作,用一條命令解析出wsl2的虛擬網卡網關即可(wsl2的虛擬網卡網關是動態的),通過該網關可以訪問win10在0.0.0.0上的埠。用了wsl2後把vmare卸載了,使用StarWind V2V Image Converter這個工具將vmare虛擬機的vmdk磁碟文件轉換成hyperv能識別的vdk文件,目前已將原來工作用的幾個虛擬系統全部轉換成hyperv虛擬機,沒發現任何問題,我用的都是server版本的系統,帶桌面gui環境的linux系統這麼轉換過來能不能用沒測試過。

我做C艹開發,偶爾寫點js,wsl2足夠我的需求還是很香的,萬惡的巨硬又一次成功阻止我換到睾貴的mac系統


現在還有幾個問題

/mnt/下的性能問題。WSL2下對Linux文件系統訪問當然是快了好幾倍,但是Linux訪問Windows文件,以及Windows訪問Linux文件,速度都非常慢,比WSL1慢一個數量級。幾千個文件的小git repo,git status能卡一分鐘。完全葬送了拿WSL當Windows命令行的任何想法,只能當Linux環境來用

USB設備轉發。RDP協議是支持USB轉發的,既然WSL2這次為了GPU支持,把WDDM驅動搞進Linux內核 (GPU-PV在宿主和虛擬機內使用同一個WDDM驅動,這也是為什麼WSL2里莫名奇妙給了DX12的介面),那USB支持應該也不是不可能。

最好能再允許個掛載本地的Linux分區(這個就有點難度了,特別是在WSL2是VM的情況下)


難道就我一個人喜歡 linux desktop 嗎?

難道就我一個人喜歡 gnome3,plasma 嗎?

wsl 可以替換 terminal 和 gui,但不能替換 linux的窗口管理、快捷鍵和文件管理,更不能替代 linux 的定製化,比如我深愛的多工作空間,win10的工作空間我現在都不知道怎麼用。

當然代價也有:

1、偶爾更新不穩定

2、釘釘(網頁版,wine版都是垃圾)

3、圖形性能不好(獨顯殺手,看視頻負載升高)

4、續航降低

5、不能玩遊戲(參考3)

win10 好處:

1、穩定

2、常用軟體(開發、開源軟體除外)

3、遊戲

win10 + wsl2 我的痛點:

1、win10 文件路徑寫起來比Linux麻煩

2、工作空間、快捷鍵、窗口管理

3、wsl2 性能肯定比不上原生的Linux

4、Linux終端是核心,win10終端只能是個輔助工具

5、開發用的軟體安裝沒有Linux方便,當然有了docker以後就不是太大的問題了

6、定製、可控、國產流氓軟體

綜上對於我wsl不能替代Linux desktop


不能


不能。到頭來微軟放棄了1的API兼容模式,用一個殘廢的虛擬機跑一個殘廢的Linux,實在是沒意思。同樣是殘廢的Linux我還是覺得wsl1對系統整體影響更小。對Linux需求更高的場合還是得有不殘廢的Linux虛擬機和Linux物理機。


WSL2其實就是一個官方的虛擬機。我記得Virture PC還是別的啥被微軟收購了很久了吧,大概就是那套東西吧。

WSL(1)其實就是一個微軟版的cygwin,或者msys。

也就是說這些東西其實早就有了,只不過這次被ms集成到了系統裡面。

WSL(1)的IO速度感人。在裡面編譯llvm就是一種折磨。WSL2這方面好很多,但是目前對顯卡的支持還很爛,需要在windows下跑XSERVER才行。但是遠程的X鏈接對渲染支持很爛,所以對我來說沒啥用。

最近看到ms說馬上WSL2要支持DX12了,到時候再看一下吧。

總的來說對於學生等,偶爾用一下linux學習學習的,WSL2是個不錯的免費虛擬機。真的要派用場的地方還是算了。

P.S. windows下裝了vs code和WSL2的話,有驚喜。


我覺得完全不能

我摘一個其他人的回答

如何看待微軟 Build 2019 上發布的新 WSL2??

www.zhihu.com圖標

裡面翻譯了部分微軟社區的QA

舉例其中一點

「在WSL 2的初始版本中,硬體訪問支持將受到限制,例如:您將無法訪問GPU,串列或USB。增加設備支持的工作具有高優先順序。在此期間,您始終可以使用具有串列埠和USB訪問許可權的WSL 1。」

也就是說即使據說wsl2相較於wsl來說完善了不少dbus相關,但是因為在hyperv下虛擬環境運行,IO變得更殘廢。跑運算都不得。

現在看來唯一方便的是有交叉編譯需求的用戶了。

PS:但這並不影響我這個只在windows下玩遊戲,ArchLinux完全工作的人…等聖誕節後換了顯卡,windows玩遊戲估計都要成為歷史。steam的proton太香了,DXVK太香了。

PPS: arch信徒必然是要安利一波信仰的


為啥要在windows內用一個不如windows的桌面系統?你用wsl確定不是饞它的終端么?所以要桌面幹啥?如果用linux桌面為什麼不用hyper-v或vmware?這塊我真的是不理解。

補一下:我可能理解錯了題主。但我認為不能完全取代,本來就是兩套東西。除非微軟把內核換成linux,否則無論wsl怎麼優化也是一個虛擬的內核,只是你使用起來方便些,但不會如linux那樣方便。


不行。就個人體驗來說,有兩那麼兩件事就搞不定了。

第一個就是被大多數人所詬病的POSIX路徑問題;

第二個就是網路介面,用的是一個172的B類子網介面。

怎麼說呢,我更希望能夠自己選,是使用NAT還是bridge模式。

再還有一件事,確實有點奇怪,就是這玩意兒明明是個虛擬機,為什麼在Hyper-V管理器里找不到


說說我上個周末的經歷


為了嘗試WSL2,折騰了一小會兒把Windows 10 升級到了build 2004。高高興興地把Ubuntu 20.04和node環境配好了,IDEA-U也配置了WSL版的node解釋器。

一運行Node項目,發現半天沒反應。過了比較長的啟動時間,程序起來了,打開瀏覽器確訪問不到程序。然後切換到PowerShell運行程序,程序馬上就異常退出了,提示3030埠因為許可權拒絕訪問。

一檢查,發現一大堆埠(port range)被系統預留了,我常用的基本都在裡面。於是想著用netsh去刪除掉這些預留配置。有些可以刪掉,比如我解開了常用的1080。但是有些刪除不掉,會提示拒絕訪問。

當然因為系統預留埠導致程序無法使用這些埠不是重點,重點是在WSL2下node根本不知道這些埠無法使用。


悔恨無比地浪費了一個寶貴的休息日。


謝邀請!微軟.窗口系統.windows12.不在開發!


其實我覺得,微軟給windows系統調用做一層posix的封裝,再有個像樣的包管理器配合ps,就可以留下大多數程序員了。


桌面版的Llinux需要被取代么?


我在使用WSL 2,用windows 版本goland做開發,WSL2上裝了golang,但是goland中goroot無法選擇wsl 2中的go環境。

請問大佬們有解決方案嗎?


目前還不行,下個版本可以直接運行gui程序估計就差不多了。

現在的wsl2網路其實還會經常出各種問題,比如無法設置static IP,每次啟動的時候都會變。雖然可以通過hostname映射來解決,但體驗始終是不好。

跟host之間的127.0.0.1埠映射偶爾會出現無法訪問的現象。最近一次slow ring的更新之後,連直接使用IP都無法訪問了,更別說通過127.0.0.1了。

不過wsl2確實好用,期待慢慢改進吧。


The WSL2 is far far from convenient to make some serious work. Waiting for WSL9.


推薦閱讀:

Win10系統WLAN被禁用啟用不了?
賣電腦的建議我裝win7系統,可是我覺得win10很合心意!我要不要聽從他的建議?
Win10的ctrl鍵自動按下?
pc端什麼瀏覽器最快最省內存?
筆記本如何有效關閉核顯(Windows10)?

TAG:MicrosoftWindows | 操作系統 | Linux | Windows10 | WSLWindowsSubsystemforLinux |