如何評價Win10的Linux子系統?可否因此替代Mac OS X?它會不會成為開發者首選系統?
原題:「如何評價Win10的Linux子系統?Win10可否因此替代Mac OS X成為開發者首選系統?」好吧!很多人糾結「開發者首選系統」這事。我本意不是說「Mac OS X」是首選系統。我已經修改過題目了
用了一個多星期,評價一下:
優點:(1)居然支持ELF文件格式,這個是質的飛躍,原因當你看《程序員的自我修養》就懂了;(2)apt-get,man, stty, vim, .bashrc, clang,spf, tmux,gcc,gdb,readelf, objdump, g++,glibc的版本是2.19,各種命令各種軟體沒有不支持的,而且原生原味~~~;(3)各個windows分區盤都在/mnt下,如c盤就是/mnt/c/;(4)文件許可權ok,雖然umask是000但是可以改嘛~,/tmp的other屬性被標了sticky位也沒錯;(5)三個時間間隔運行正常(唔,至少測過TIMER_REAL是正常的),說明時鐘脈衝信號這塊沒問題;(6)重定向方面,dup2是沒問題啦,close後新打開的是最小的fd也沒問題,pipe也能用;(7)多進程方面,fork-exec-wait沒問題缺點:
(1)who命令,結果是空的,原因是/var/run/utmp文件被閹割了。
(2)/dev下面被大精簡了,也就是各種設備如cpu,dsp,loop就沒有了,比如說pts本來應該有多個的,但是/dev/pts下還是空的,當然我開啟tmux的時候pts就自己被複制多份出來的,所以也不影響使用。(3)iptables控制防火牆規則的文件,貌似也被閹割了。舉個例子,sudo iptable -L這條命令不行。當然,自己寫一個filter文件應該就可以解決此問題。接下來這個第四點非常坑爹,浪費了我大半天的時間才發現原來,此ubuntu還是不同於正版的ubuntu。(4)信號被中斷時的策略不正確!!!現在的linux系統的信號處理是BSD模式的,也就是說,如果中斷信號發生在read這種低速系統調用下,read系統調用是會自動重啟的。read系統調用是會自動重啟的。read系統調用是會自動重啟的。 然而,不知道是windows下的信號處理行為不一樣還是咋地,反正我測試過了,用signal函數定義一個ctrl-c的鍵盤中斷信號,read系統調用直接出錯,返回-1,並置errno為EINTR。就是說,它可能是SYSTEM-V風格的。這是不對的,早期unix系統才是SYSTEM V風格。 可能你要說幹嘛還用吊軌的signal函數,用sigaciton啊。好,經測試(下面代碼A直接用),sigaction函數下,我把sa_flags設置成SA_RESTAR,read系統調用被中斷時還是直接出錯返回,而非重啟。無奈之下我切換回雙系統的ubuntu,只是運行了一下代碼A,就發現read系統調用會自己重啟。總結: 雖然它還是beta版本,但是其實已經做的很好了,雖有缺點,但是巨硬官方應該都能搞定。其實能夠做到原汁原味(一定要修正signal這裡的問題!!!發現這個之後我挺不爽的,不知道還有多少系統調用也是這樣「行為不端」:-D),我寧願買個surfacebook而不是macbook,尤其是當下macbook加了個我覺得超級雞肋的觸摸條,留下只有一個usb介面。。。代碼A:
/** * test for sigaction() */#include &#define INPUTLEN 1024
void inthandler(int);
int main()
{ struct sigaction newhandler; char buf[INPUTLEN];newhandler.sa_handler = inthandler;
newhandler.sa_flags = 0; newhandler.sa_flags |= SA_RESTART; sigaction(SIGINT, newhandler, NULL);int count = 0;
if( (count = read(0, buf, (INPUTLEN-1))) &< 0)perror("read");
else { buf[count] = ; printf("ok, the input is %s", buf); } return 0;}
void inthandler(int signum)
{ printf("waiting..
");
");}突然想起來,CTRL+不能發出SIGQUIT信號???(??? ??? )????????
脫離用戶場景談工具是耍流氓。工具換個場景能不能用都成問題,談什麼首選?
比如對於蘋果開發者來說,xcode只支持mac,談別的操作系統沒意義。bash for Windows對純Windows開發者沒意義,對於純Linux開發者也沒意義,只在程序員跨平台的時候有意義。至於mac os——有人調試Windows程序的時候用這玩意?StackOverFlow統計里OS X跟Win7的份額差不多,都是30%多點,然後Win10和Linux差不多,是20%左右
不管是OS X還是WSL都只是一個權宜之計,替代不了真正的Linux環境——WSL的意義在於,如果你使用的工具鏈比較簡單(比如只用到Python或者g++),那麼很多工作都可以在本地Windows桌面下非常方便地直接完成,配合Windows強大的桌面功能,一個熟練的Windows用戶可以實現遠遠高於OS X和Linux的工作效率
現在我是同時使用遠程VPS主機+HyperV+WSL——事實證明Windows用來做Linux開發也可以比OS X效率更高我用git bash(mingw)
Mac OS什麼時候就成為了「開發者首選系統」,我又被代表了?還是我非主流了。還是經常能看到的那句話,不問是什麼而問為什麼都是那啥來著?
ubuntu 這個好
與其說是子系統,我更願意將其看作類似Cortana 深嵌底層的程序,方便開發者方便自己,何樂而不為。
OSX是開發者首選?VS2015都能運行IOS模擬器,題主是來搞笑的?有些人強行裝逼也是可笑,你要反駁 Mac 不是首選,那你能不能給出點數據?就像前面有人給出 30% 的佔有和 Win7 一樣多的調查。
當然,Win 的市場佔有,決定了很多開發者必須使用 win 系統的機器來開發調試程序。所以 Win 開發者首選當然是 Win,iOS / Mac OS X 的開發者當然是 Mac 。這裡面 Win 開發者占更多。
除了這兩個因為環境因素,沒什麼很好選擇的首選,我們可以看看其他不那麼依賴 OS 的開發職位,*nix / Mac 好像是大多數。
如果是在職的軟體開發從業人員,我想或多或少都會了解國內的現狀,iOS / Android / 前端 / 後端 這幾個比較熱門的崗位,都是 Mac 偏多。當然,國內不是全球。
之前不是有人提到 知乎 都是標配 Mac 嗎?
這個 Ubuntu bash for win 並不靈活,個人認為 Windows 下正確的 *nix 開發工具棧應該是:
- Win10(或 Win Server 2016)
- HyperV
- Tiny Core Linux (VM, autostart, used for Gateway/DNS/firewall/fuckgfw and more)
- AnyLinux(VM)
- MobyLinux(VM / Docker for Windows)
- Docker for Windows
- RemoteLinux(VPS / your public server)
Mac OSX什麼時候又成為了 「開發者首選系統」 ?
有這麼想的人就說明微軟的3E戰略成功了。然而我知道有這麼個東西之後,以後維護跨平台的軟體都不用考慮Windows了,反正Windows可以跑Linux版本的程序,我為什麼還要再為Windows編譯一次?
試用了一下linux子系統,進步太大了,如果不是開發ios,完全可以把mac機器扔掉了。我是做java開發的,一個字:爽!
開發者歷來首選windows,蘋果算個
題主可能是想當開發者?用了os x就會告別這個行業。
推薦閱讀:
※win10的離線密碼忘了,沒聯網還不讓進了,怎麼辦?
※win10值得升級嘛?
※Windows 10 Pro更換主板後無法重激活?
※如何判斷 Windows 10 專業版是正版還是盜版?
※如何評價微軟發布的 Windows 10 正式版?
TAG:微軟Microsoft | 蘋果公司AppleInc | 操作系統 | Linux | Windows10 |