Windows將成為Linux最好的發(fā)行版?使用其4.19內核
時間:2019-05-17
一段時間以來,微軟一直試圖將全棧開發(fā)人員吸引到Windows。直接在Windows上運行Linux二進制代碼的Windows Subsystem for Linux(WSL)可以說開了個好頭,頗受歡迎。350萬活躍的開發(fā)人員在使用WSL,它因每六個月更新一次的Windows 10而得到改進,比如能夠同時安裝和使用多個Linux發(fā)行版,能夠從Windows編輯Linux文件而不損壞文件。但這還不足以提供全面兼容性。
因此針對6月份Windows Insiders將可以使用的下一個版本,微軟正轉向在Windows中運行正宗的Linux 4.19內核以支持Linux二進制代碼。
WSL 2承諾對文件IO性能進行亟需的改進,另外增添對Docker的原生支持,以簡化Linux容器的使用。但它也可以在Windows上實現全面的Linux兼容性,因此成為Windows所能實現的重大轉變。
Windows開發(fā)者平臺的企業(yè)副總裁Kevin Gallo對IT外媒The New Stack說:“WSL是許多Web開發(fā)人員在Windows中用時頗多的組件?,F在我們擁有了純粹的Linux內核,因此你獲得的兼容性高得多。”
Gallo說:“文件性能向來是開發(fā)人員抱怨的一大問題,我們在解決這個問題。我們正在對Windows上的Linux容器(LCOW)進行重大改進,性能和兼容性均有明顯提升。你不需要虛擬機就能運行Linux版本的Docker,因而可以減少占用的內存,提高執(zhí)行速度,并縮短啟動時間。LCOW過去有點笨拙,但一旦我們得到原生的Docker支持,它運行起來就變得很順暢。作為開發(fā)人員,你可以盡可能接近生產環(huán)境,在WSL上運行Docker,并直接在上面進行調試。”
WSL 2是如何工作的?
Windows容器和虛擬化的首席項目經理Taylor Brown向The New Stack解釋道:“從體驗和用戶的角度來看,顧名思義,WSL 2只是更好的WSL,”但它的工作方式截然不同。
“WSL將Linux系統調用轉換成相應的Windows API,而WSL 2運行非常輕量級的Hyper-V VM(與我們用于Hyper-V隔離容器的是同一種類型),它有正宗的Linux內核,因此不必進行系統調用轉換。它解決了許多頂級功能請求(文件系統性能和ABI兼容性),并使我們踏上一條便于以后解決更多請求的架構路徑。”
WSL 2有賴于微軟為了使Windows上的Linux容器(常常名為LCOW)在Azure上順暢運行而做的工作。“輕量級Hyper-V VM、9P文件系統橋甚至內核都是從我們與Azure中的LCOW一起使用的內核中大量借用過來的。9P是一種為Plan 9分布式操作系統開發(fā)的協議,用于為WSL橋接Windows文件系統和Linux文件系統。
如果你與WSL一起使用多個Linux發(fā)行版,每個發(fā)行版將在各自的虛擬機中運行。Brown說:“然而,這些虛擬機使用虛擬分配的內存,啟動不到一秒,而停止的速度更快,因此體驗和開銷是WSL級的(或甚至更好)。”
性能將優(yōu)于WSL,對文件而言更是如此。“Linux的IO模式與Windows完全不同,NTFS是針對Windows優(yōu)化的;NTFS在大文件IO方面非常出色,因此適合數據庫,而ETX4適合較小的IO。在WSL 2中,Linux文件系統現在只是直接在虛擬pmem設備上使用EXT4,因此我們在Linux端獲得Linux原生文件系統性能,在Windows端獲得Windows原生文件系統性能(集兩者之眾長)。通過9P橋,我們可以將兩者連接起來,獲得出色的集成體驗。”
使用WSL 2
盡管有這些變化,對于使用和bash及其他Linux工具的開發(fā)人員來說,體驗與今天的WSL一樣。Brown證實:“開發(fā)人員喜歡從WSL獲得的功能(比如共享文件/文件夾)通過使用9P協議的文件系統橋得到全面維護,因此WSL 2可以看到你的所有Windows文件和文件夾,你也可以從Windows看到Linux掛載的對象。”
計劃任務(cron job)和持久性守護進程的工作方式將與目前的WSL一樣,但網絡套接字會有一些變化,這方面仍處于開發(fā)之中。“由于我們使用虛擬機,現在WSL 2中有NIC(網卡)。我們使用NAT網絡模式,以便NIC由主機全面管理和協調,但它確實有自己的IP地址。我們現正在致力于自動映射套接字,以便體驗與WSL一樣;但我們認為,就預覽版而言,目前的體驗在情理之中,給了我們非常寶貴的反饋意見。”
WSL 2使Windows全面兼容Linux,至少在內核ABI層是這樣,不過微軟將目光投向開發(fā)者社區(qū),搞清楚WSL中應包含哪些內核模塊。Brown解釋道:“在WSL中用不了的iSCSI目標(target)在WSL 2中用得了,但需要添加適當的模塊。”
WSL 2最初通過Insider體驗計劃適用于Windows 10,因此開發(fā)人員可以嘗試一下,就內核模塊等功能方面給予反饋。Brown特別指出,準備推出正式版之前,除了網絡套接字的自動映射外,9P性能方面還有一些工作要做。
計劃是及時將WSL 2引入到Windows Server,這兩種操作系統上的Linux內核將像其他Windows組件一樣自動更新和維護。由于Hyper-V的嵌套虛擬化技術,你能夠在Azure上的虛擬機中使用WSL 2;雖然WSL 2本身基于為Azure所做的LCOW工作,但無法被Azure平臺使用。
Visual Studio Code和WSL 2
Docker等工具將能夠增強WSL 2。Brown說:“今天,Docker Desktop創(chuàng)建并管理自己的Linux虛擬機;由于這種體驗,它們將能夠直接使用WSL 2,以提升性能和可靠性。”
借助面向WSL和Docker容器的Visual Studio Code,原生Docker支持還將簡化遠程調試。新的遠程開發(fā)擴展包(RDEP)將在Visual Studio Code可以連接的目標環(huán)境中運行一套開發(fā)服務,那些服務負責安裝在遠程環(huán)境而不是在本地Windows環(huán)境中運行的工作區(qū)擴展,因此它們可以檢測什么語言和運行時環(huán)境可以使用,在IDE中提供適當的代碼完成和代碼檢查(linting)。
Gallo解釋道:“Visual Studio Code遠程調試讓你可以直接連接到現有容器,而今天Windows上的Visual Studio Code可以在Windows中針對node.js來運行,但不是針對WSL來運行。如果你在Linux環(huán)境中啟動Visual Studio Code,它將調試Linux環(huán)境;在啟動虛擬機之前,它現在直接連接到啟動它的環(huán)境。”Visual Studio Code命令和擴展直接在啟動它的Linux發(fā)行版中運行,因此開發(fā)人員不必擔心路徑問題,你在WSL和已掛載的對象中都可以編輯文件。
這是Visual Studio Code用戶一直要求的功能;Visual Studio Code存儲庫中評論第三多的問題是支持在WSL中從bash啟動IDE,它與目前版本的WSL和WSL 2兼容。
Windows桌面上的Linux
微軟最初想把Linux二進制支持功能引入到Windows時,WSL 2依賴的容器支持功能還沒有出現,因此團隊不得不先將Linux系統調用支持添加到面向WSL的Windows內核。Brown特別指出,這種方法始終存在一些缺點。
“我們在系統調用轉換方法方面遇到的問題之一是,要始終關注Linux內核來創(chuàng)建新的轉換機制;更具體地說,一些系統調用很難搞對,將來會出現不可能搞對的系統調用。由于我們現在直接運行Linux內核,這種架構不用擔心這個問題,但我們運用了當初為Hyper-V隔離容器采取的大量創(chuàng)新后才真正實現了這個概念。”
如果WSL 2的新方法提供了微軟承諾的全面兼容性和顯著的性能改進,它將使Windows成為對任何開發(fā)人員而言極具吸引力的平臺,無論他們在何種平臺上從事開發(fā)。
實際上,Gallo認為WSL 2將為開發(fā)人員提供比在Mac上更好的Docker支持,因為他們不需要考慮親自運行Linux虛擬機。他表示,WSL 2有望使Windows成為開發(fā)人員為需要構建的任何云工作負載而積極采用的操作系統,而不僅僅是針對Windows平臺編程時所使用的操作系統。
“除了新終端中的所有改進以及在新的Edge瀏覽器中開發(fā)基于Chromium的網站從而支持前端企業(yè)開發(fā)外,我們認為相比其他任何環(huán)境,端到端體驗對于開發(fā)人員來說將是最高效的環(huán)境。”