如何評價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 &

#include &

#include &

#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..
");

sleep(signum);

printf("done,leaving the handler.
");

}

突然想起來,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)

Shell 的用 Cmder 按自己需求高度定製一遍


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 |