如何評價 Windows 版「bash」(及其相關 *nix 子系統)?
Scott Hanselman 在他的博客裡面提供了更多關於這個的細節 http://www.hanselman.com/blog/DevelopersCanRunBashShellAndUsermodeUbuntuLinuxBinariesOnWindows10.aspx
這個並不是通過Hyper-V啟動一個Ubuntu的虛擬機的方式來弄的。而是Windows有個子系統把Linux的調用都轉成Native的API,直接運行Ubuntu鏡像裡面的二進位執行文件。所以能使用各種Linux命令(包括Ubuntu的apt-get安裝軟體)。就像Linux上的wine通過翻譯Windows API來運行Windows程序一樣,Windows的那個子系統就是Windows上的wine。Dustin Kirkland 是Ubuntu Team的人,
http://blog.dustinkirkland.com/2016/03/ubuntu-on-windows.html 他的博客裡面也講到這個Here, we"re talking about bit-for-bit, checksum-for-checksum Ubuntu ELF binaries running directly in Windows.
...Linux geeks can think of it sort of the inverse of "wine" -- Ubuntu binaries running natively in Windows. Microsoft calls it their "Windows Subsystem for Linux". (No, it"s not open source at this time.)
更新:微軟發布了一個blog post,詳述相關的Linux子系統設計。基本上可以看成是對POSIX子系統的擴展,一個對Linux API的翻譯層加上對應的文件系統實現。
Windows Subsystem for Linux Overview
------------------------------------------------------------------------------------------與其說這是Bash on windows, 不如說這是Ubuntu on Windows.
1. 這個subsystem從用戶的角度是什麼樣子的?
Here"s let"s break it down slowly...
- Windows 10 users
- Can open the Windows Start menu
- And type "bash" [enter]
- Which opens a cmd.exe console
- Running Ubuntu"s /bin/bash
- With full access to all of Ubuntu user space
- Yes, that means apt, ssh, rsync, find, grep, awk,sed, sort, xargs, md5sum, gpg, curl, wget, apache,mysql, python, perl, ruby, php, gcc, tar, vim, emacs,diff, patch...
- And most of the tens of thousands binary packages available in the Ubuntu archives!
http://blog.dustinkirkland.com/2016/03/ubuntu-on-windows.html?m=1
2. 我本來就可以在windows下運行VM/Cygwin/mingw。這個系統和以往的方案區別在哪?
1) 不是vm,也不是container,所以性能不受太大的影響。根據上文中Krikland的文章, sysbench的運行結果幾乎相同。
2) 它比cygwin更像Linux,或者說,這本來就是一個完整的user-space Ubuntu,通過類似wine的原理實時把system call翻譯成native windows API。這意味著你可以直接用apt-get管理軟體包,直接運行Ubuntu的binary,不再需要單獨為Windows重新打包和編譯。3) 此外,微軟為此改進了cmd.exe這個console,增加了更多vt100的支持。也就意味著Powershell和Native命令行程序也能獲得更好的支持。3. 這個系統是設計給誰的?如何評價?
應該很少有人會在這個系統上跑server。微軟明確指出那種情況應該考慮虛擬化。此外,Linux子系統和Windows應用無法交互 - 你無法用bash運行notepad,反過來也無法從PowerShell運行Ubuntu的Ruby。
Run Bash on Ubuntu on Windows
這個特性更多的針對的是需要使用Linux開源工具鏈的Windows開發者。現在你無需虛擬機就可以很方便的獲得和Ubuntu幾乎相同的軟體環境——而Ubuntu是今天雲端Linux系統的事實標準。同時享受Windows方便廣泛的硬體軟體支持。
假如整個系統工作正常——看下一個insider版本了;這對於每一方應該都是好事:開源生態進一步跨平台,Windows開發者的選擇進一步增多,Linux, Microsoft和Canonical也擴大了影響力。
至於到底有多好用,是不是PowerShell+chocolatey就比bash+apt-get難用,讓用戶去判斷吧。又不是說從此Windows就只能用bash。
有選擇總比沒選擇好,不是嗎?反編譯lxcore.sys得到的一些結論(猜想(?))
1. 做了一個subsystem(pico?)的驅動用來處理linux下的syscall,叫做lxcore.sys
用elf loader(比如bash)創建進程的時候,會通過這個驅動來創建(準確的說是pico給出的介面來創建?),擁有其他正常windows進程的特性(?)2. 用了一套新的API,PsRegisterPicoProvider 3. 直接執行elf4. 擼了一套fs,看起來把linux下的一堆fs下的東西都擼出來了5. --fork是多線程實現-- 看錯了6. epoll是事件做的
7. 現在的(14295)下的mount syscall並沒有實現8. 為啥這裡還有app container的理論……9. 看起來exec有點偏差?----10. 似乎刪除(硬碟上)文件是調用ZwSetInformationFile的FileRenameInformationBypassAccessCheck移動文件……----刪除文件:ZwSetInformationFile對DrvFs會刪掉文件(似乎是給Windows的文件用的(?))對VolFs、RootFs、LibraryFs什麼的似乎是Rename……(給Linux的文件系統用(?))VolFs有chmod什麼的理論,DrvFs大概沒有……(就算有也是在vfs上的吧……)Linux文件系統和NT的文件系統下的差異似乎是通過VFS的inode來解決的……至於許可權似乎只在Linux里生效(這個我明天再看看)
11. 支持cgroup (?) 至少看起來在支持12. 看起來TmpFs不是memdisk
13. 能(有限度地)通過傳統的Linux手段訪問一些硬體比如mouse0啥的……14. pipe通過一個特殊的fs實現,在內存里開一段空間交換數據
15. 對了,我個人認為這不算是API的翻譯,因為win32和linux的進程空間是相對隔離的。。他們共享的層次相對是比較低。
待更新……再也不用吧Git Bash的bin目錄加到PATH里去了。
====
強勢插入硬廣!!!!!招聘搜索引擎開發! java, 分散式文檔索引. 熟悉Lucene,Solr,ElasticSearch,懂NLP優先! 外企, 傳統軟體公司(非互聯網公司), 有期權. 坐標北京知春里! 經歷符合且有興趣投崗的私信我! 記者就免了... 回答不過來這麼多問題, 問我技術類問題我也不懂, 上面的幾個名詞我都不懂, 我只是抄我收到的郵件而已! 我就是個獵頭而已, 不要對我要求太高哇!====終於有時間看看這個玩意了. (我沒看發布會, 我就是來胡說的.)我記得之前知乎上有大v軟粉說微軟刻意把命令行做的又丑又難用, 是因為他們不希望用戶繼續用命令行. 我表示贊同, 顯然這次引入一個bash也是為了讓用戶都不用bash.講真我也是從媒體上看到這個的. 然後公司內部發了一封郵件, 裡面有個FAQ, 但是郵件中同時說到裡面有些內容還是不能公開的, 所以我也無可奉告.
然而我說無可奉告你們又不開心, 那我還是胡扯幾句好了:1. 這是拉攏開發者. 普通用戶想要bash嘛? 我妹子都不知道bash是啥.
2. 這貨野心蠻大, 第一步是要通過LTP. LTP是啥? 是SuSE啊, redhat啊用來測試他們的企業級發行版的測試套件. LTP的測試結果大家都蠻重視的. LTP裡面有一個syscall的testset, 基本涵蓋了linux下重要的syscall. 如果說LTP都通過了, 那麼蠻多應用都應該是能跑起來了(不要GUI的那些).3. 微軟想要一個ubuntu還是蠻容易理解的. 畢竟azure上跑著眾多的ubuntu虛擬機, 虛擬機裡面得跑程序啊. 程序得有人開發啊. 為了給azure上寫程序得開個ubuntu虛擬機顯然不合理啊. 4. 啥時候支持一下gnome或者kde啊? : 沒戲至於對ubuntu來說是不是損害自身利益了:
並沒有啊... Canonical是最沒有"黨性"的發行版公司. (Redhat也好, SuSE也好, 都是黨性比較濃的, 你們看那個瑪麗蘇每次噴ubuntu的時候的憤怒的口吻也能感覺到...)給我的感覺是, Canonical希望的是讓更多的人用上更趁手的工具. 而不是盲目的遵守unix哲學或者盲目的追隨GNU社區. (你們看最近阻礙emacs發展的毒瘤是誰就知道了啊...)桌面是個很難競爭的領域, 比移動端還難競爭, 為什麼呢? 大家用了那麼多年windows了, 盜版windows和正版windows分別佔據桌面os的前兩名, 其他廠商想插針還是很難的. 所以老闆們現在要布局的是雲和IoT. 無論是有錢精明的大公司巨硬/Intel/18摸也好, 還是渣渣弱爆的窮鬼公司Canonical也好, 都在部署這些東西. 在以前, 如果一個windows的開發者需要開發程序並最終跑到雲端的linux上, 那麼他可能需要從眾多linux distro裡面選擇一個裝到虛擬機里作為開發環境. 而現在, 不用選了, 直接用windows上原生的ubuntu就好. 看, ubuntu避免了跟其他distro競爭, 直接獲取了用戶. 既然開發者開發的時候都選擇的是ubuntu, 那麼在雲端系統的選擇上當然也是要選最熟悉的ubuntu了. 這一點是大果子做不到的, 畢竟哪個雲端的虛擬機里跑得是大果子的系統呢? 開發者還是要在mac下給linux/win開發軟體.至於上層工具下面的內核是NT還是Linux, 講真, 這些留給黨性發行版去考慮吧.
;; 早知道我就不看FAQ了, 不看的時候什麼都敢說, 看完了之後這也不敢說那也不敢說的...如果過兩天心情好, 我更新以下內容(不過估計也沒人願意看我胡扯吧...):
1. 如果要用ruby, 是用ruby for windows呢, 還是要在ubuntu on windows下跑ruby呢?2. 如果想跑redis呢?3. 如果以後想給妹子修電腦, 可不可以扔個bash script腳本給妹子, 妹子執行一下就解決了呢? - 這個問題我現在就要回答!!! 理論上是這樣的, 如果問題是通過對文件的操作就能解決的話, 那麼一個bash script就能輕鬆解決了!!!! - 那麼, 今天的重頭戲出來了!!! 我要學某當開始收徒教受基本的shell編程入門技術. 不要1萬快, 不要拜師禮, 只要5毛錢!!! 五毛錢你買不了吃虧也買不了上當! 4. 性能如何?-- 硬廣時間到, 招c/c++開發, 外企, 快上市(某大型外企的全資子公司). 30 - 40w可談, 有期權, 不加班, 不打卡. 工作地點北京, 要求演算法好, 基礎知識紮實, 懂分散式加分, 懂資料庫常見演算法加分. 如果人不在北京可以遠程面試. 歡迎自薦. (想來的再聯繫我啊, 不要一上來問這問那等我都回答了就不說話了啊... 我當個獵頭也不容易啊...)Hi Linux, hi Cygwin, Live long and suck it.
很顯然,這不是虛擬機,也不是container,是原生跑ELF。我在這個答案里提到過 Windows10中的包含Linux子系統是否違反了GPL? - 叛逆者的回答; 這用的是clean room實現的linux內核。
Astoria的遺產放光芒。
又想到了另一個好處。每個程序是個窗口,所以當你不知道怎麼關掉vim的時候,關窗口就行了。。。@vczh 以後Office就不用發布Windows版的了,只發Mac/iOS和Linux/Android就好(逃
我是不是有點過分, 想要oh-my-zsh
更新日誌
5:42:00 8/8/2016: 添加標點
windows平台ocaml開發者的福音!
等了好久,個人覺得微軟早就該這麼幹了,Powershell太難用了。現在為了兼顧bash shell和依賴win的一些開發程序,用的是MacBook+PD11,非常佔資源。
剛才在台式機上安裝了win10的insider preview版本然後從商店下載了bash beta,試了下apt-get命令和LaTeX編譯功能。值得一提的是,這個bash是自帶Python 2.76和Python 3.43的。
這個所謂的subsystem雖然不是虛擬機,但是用起來跟虛擬機上面跑Linux沒有太大區別,就相當於win下面跑了一個獨立的Ubuntu。雖然win下面的程序都不能直接調用,但是完全可以當做一個完整的bash shell來用,大部分的開發需求都可以滿足。
我相信等正式版發布之後,很多人都不會再用虛擬機,很多因為bash shell想要買Mac的人也會猶豫一下了。終於可以不需要裝OSX來移植GacUI到OSX上了,好方便
1) 沒有用戶就沒有開發者,2) 沒有開發者就沒有App, 3) 沒有App就不會有用戶願意買你的系統。這個雞生蛋蛋生 的問題已經在WP上出現並至今無法解決。微軟最害怕的就是同樣的情況出現在Windows上,如果是這樣,整個微軟帝國會轟然倒塌的。而從最近幾年開發者的趨勢來看,這個已經出現,所以,微軟希望通過各種方式來扭轉目前的形式。為解決#1, 微軟的策略是Win10免費,微軟希望3年內把Win10變成一個10億用戶的平台,目前8個月2.8億用戶,只能算一般,應該比當初期望的要差,需要繼續推進。為解決#2, 微軟開始擁抱開源,大力發展雲計算,收購Xamarin, 包括在Windows平台上兼容Linux,都是希望開發者能夠留著Windows平台上,畢竟微軟還有Visual Studio的優勢在這裡我始終認為這麼做是對的,現在需要的是執行力,加快迭代速度,盡量不要像以前那樣反覆,或者提供一個半成品。如果這些能成的話,微軟未來還是很看好的。
差點高潮,差點暈倒。Microsoft is bringing the Bash shell to Windows 10
"Microsoft noted that this will work through a new Linux subsystem in Windows 10"
"The native availability of a full Ubuntu environment on Windows"
如果能直接從 windows 上調用這一部分 app 就好了。。。僅僅只是 command line 我覺得是極好的,如果能從 windows 上直接調用這些,真的就是要爆了。。。再支持個 gui。。。啊啊啊啊啊啊啊(畢竟我更喜歡用 gvim = =,相信用 emacs 的也是沒有人用 command line 的 emacs 的吧。。。其實不過想想 macvim 也是原生的 mac app。。。whatever。。。
想想之後我可以直接從 gvim 裡面用 Linux command,就不用到處找各種 「windows user please click here」 了。。。然後 clion 也不會到處讓我找 Cygwin home,然後缺了這個 binary,缺了那個 binary 的,挺煩人的 = =。
僅僅有一個 command line 也是極好的,尤其是對於我這種 Linux 轉到 windows 的人。。。之前一直想寫一個 powershell 的 tab completion plugin,現在也可以省省勁了。真是太好了
說實話,我覺得 powershell 比起一個 shell 來說更適合做 scripting tool,因為可讀性強,然後語法清晰,但是真的很慢,作為一個 script,你本來就是要做一堆事情的,開始慢個兩秒沒人在乎,但是如果我每次 cd,每次 ll(我習慣用 ll 替代 ls)都要慢兩秒真的很煩人。。。(加上 posh-git 更慢了= =)
總的來說是一件好事,但是可以更好,就是如果能夠完全和 windows 環境交互就好了,比如在 zsh 中打開 notepad,gvim 之類的,然後可以從 clion 中調用 Linux 環境就好了。。現在想起來 gui 支持完全沒有必要,(畢竟 Linux 上的 gui 天天不停 crash= =不說了,這次立刻升級Win10
嗯,以後再看到有人因為*nix shell吹OS X的可以上去正面幹了
我整理一下自己用WSL的幾點體會和看法
1)windows下的IDE無法整合WSL
我覺得作為開發環境很重要的一點就是win下的IDE們不能「方便」地直接調用WSL下的程序,比如在vscode下面不能調用WSL里的git,而非得裝個git-bash。更別說IDE里直接調用WSL裡面的python,node,go了。根據微軟最新build中(https://blogs.msdn.microsoft.com/commandline/)提出的互操作,重點似乎在WSL側調用windows程序,他們已經把win下的path都append到WSL的path了,但在windows側則不可見WSL的path,只能通過蹩腳的bash -c 去調用。在微軟自己都沒有搞清楚兩者互操作關係的前提下,就會有各種類似於這樣的問題:用xxx-for-win還是用xxx-on-WSL?
若只在WSL側裝工具鏈,windows側的IDE就是殘廢成只能做編輯器了,你用的win下的工具鏈怎麼測linux下的bug,怎麼加斷點調試?2)WSL閹割GUI硬傷導致不具備高效的開發環境
不僅互操作不行,在WSL裡面開發體驗也是很糟糕的。之前盛傳的在windows下用xserver運行Ubuntu桌面程序的視頻也是反映了開發者對缺乏GUI支持的訴求。3)WSL定位究竟是開發環境or生產環境?
甚至我覺得微軟的表述是自相矛盾的,他說WSL是面向開發,但無論怎麼看沒有GUI的Ubuntu更像是一個部署環境,而不是開發環境,沒有IDE的支持怎麼調試怎麼開發呢?而且按照現在的完成度,只是個玩具。4)關於WSL未來的一點想法1.微軟絕對不會放棄windows下工具鏈的支持2.WSL短期內不能取代windows下工具鏈,至少從IDE支持度上差距很大3.微軟的目前的所有動作看起來都似乎表明WSL的真實目的是讓linux開發者用dotnet和SQLserver,也就是把linux的開發者拉過去,而不是把windows的開發者推出去。一大波開著虛擬機做交叉編譯的人會把虛擬機刪掉,一大波優雅地用著macbook寫web程序的人也會悄悄裝個win10看看
話說,google在下個月的google io 2016上發布一個桌面android,自帶原生linux環境,可運行android studio也說不定哦期待後續的相關評測。
不過給了我又一個從Mac換到Windows的理由。(曾經用過Cygwin…… It sucks!)話說我聞到了vim/emacs大戰的味道啊…IDE(VS/Jetbrains)+Sublime Text黨表示默默圍觀(滑稽)看不懂那些說打os X和 linux臉的,巨硬自己往類unix身上靠,怎麼反成打人家臉了。打臉也要按基本法的
推薦閱讀:
TAG:MicrosoftWindows | Linux | Shell編程開發 | Bash | Build2016 |