Linux下編程有什麼優勢?

本問題原標題「Linux有什麼好的?」,屬於題主概括能力不足造成的事故。如果你發現有些答案牛頭不對馬嘴,請不要急著點沒有幫助,畢竟這都是題主的鍋。

今天看了個新聞無人機要開源 Linux Foundation推Dronecode項目_IT新聞 我對無人機感興趣,但對Linux不了解,只知道它是個操作系統。

//其中有句:有很多無人機項目都是用 Linux 代碼編寫的。意思是Linux代碼能來編程嗎,和C語言有什麼不同哦。我上網查了下Linux代碼,好像和C語言差不多。請問用Linux代碼編程有什麼優勢嗎?

改進了一下格式,以防程序猿看不懂。


(如果你喜歡這個答案的話請移步完整版:為什麼要學習 Linux?原文:《自由談》http://mat.uc.pt/~zhang/blog.html#linux )

回答這個問題之前,我們先來看看 Linux 與 Windows 最本質的區別在哪裡。有人會說前者免費,後者需要買 (或)。這只是對 「free software」 的曲解。在我看來,二者最重要的區別乃是它們對自己的用戶所做的假設。對於 Linux,這個假設是:

用戶知道自己想要什麼,也明白自己在做什麼,並且會為自己的行為負責

而 Windows 則恰好相反:

用戶不知道自己想要什麼,也不明白自己在做什麼,更不打算為自己的行為負責

說得更直接一些,前者假定用戶是負責任的聰明人,後者反之。Linux 用戶不必沾沾自喜,Windows 用戶先把刀放下。這些只是假設,它們的 (不是我的) 假設。

這麼滴吧,我講個故事,緩和一下尷尬的氣氛。聽好,可招笑了。說,要把大象裝冰箱 … 呃,不,故事是這樣的:

一位雕刻家愛上了自己創作的女神雕像。他每天對著雕像說話。最後,那座雕像真的變成了一位女神。

這個故事還有另一個版本,你肯定聽過:

在一所小學裡,心理學家隨機選擇 20% 的學生,告訴老師他們比別人更聰明。一年之後,這些學生的 IQ 測驗果然 (在統計意義上) 更佳。

這個故事流傳甚廣,但很少有人給出參考文獻。這是歷史上真實存在的一個試驗,1963 年由羅勝道與賈步升在美國加州南舊金山市橡樹小學實施。羅是加州大學心理學家教授,而賈時任橡樹小學校長。二人於 1968 年就此試驗發表了《課堂上的畢馬隆效應》。

畢馬隆是希臘神話里的一位雕刻家,就是愛上自己作品的那位。這 (兩) 個故事告訴我們:第一,只要功夫深,不怕女神不動心;第二,如果有心理學家來你們學校做試驗,躲得越遠越安全 —— 80% 和 20%,你覺得哪個幾率更大一些?

細心的人可能注意到,上面的故事還告訴我們,他人的期望會在一定程度上影響我們的行為。這就是羅勝道與賈步升所說的 「畢馬隆效應」。

Windows 如何影響用戶的行為我不清楚,而 Linux 對用戶的影響倒是十分有意思。既然假定 「用戶知道自己想要什麼,也明白自己在做什麼,並且會為自己的行為負責」, 如果發生畢馬隆效應,那麼相當一部分用戶會慢慢學會用自己的腦袋思考,按自己的意志行事,並為自己的行為負責。這就是自由,也是 「free software」 之 「free」 的本意。

其實,操作系統各有短長,無論是 Linux,Windows,還是 Mac OS。對我而言,一個值得使用的操作系統應該滿足以下基本條件:

1. 用戶自主。用戶決定系統如何工作,而不是反之。任何提示用戶 「正在安裝更新,請不要關機」 的行為都跟不以結婚為目的的戀愛是一個性質。用戶是機器的主人,操作系統只是用戶請來的助手;用戶知道自己想要什麼,明白自己在做什麼,也會為自己的行為負責;操作系統盡量少說話,更不要下命令。用戶自主還蘊含系統的可定製性:用戶可以對系統做任何配置或改造。

2. 用戶知情。如有必要,用戶可以獲知系統工作的任何細節,而不是僅僅被告知 「正在處理一些事情」 —— 這比不以結婚為目的的戀愛還讓人無法接受。

3. 系統高效。在此系統下用戶可以很方便地獲得各種工具,並且不同工具能很容易地組裝在一起完成複雜的工作。機器更多是用來幹活的,所以這一點很重要。

以此為標準,Linux 目前是個不錯的選擇,而 Windows 不滿足任何一條。


windows 和 linux 各有各的用處,兩者所以並存著。

windows 的好處人人皆知,因為正是它承擔了 普及 pc 的使命。他是一個親民的用戶友善的系統,沒有學習成本。所以,君不見,甚至還沒上小學的小孩也可以玩的飛起,它強調易用性,猶如 ipad 的理念。讓每個人都可以用電腦愉快的玩耍,而且絕大多數人用 windows 用於大眾化娛樂,比如說聽歌,看電影,上網,編輯 office 文檔。這也許是覆蓋了 99 % 的人群使用電腦的方式。所以 windows 就強勢在 pc 上,這也是很多人研究 windows 從事 windows 上的開發的原因,專門深入研究 windows 系統的人和書也頗有一些。

相對的 linux 就只能是一個內核的名稱,它通過各種發行版體現為最終的操作系統。好處在於,它有一套自己的軟體包管理,大量免費大量開源的軟體,基本上沒有流氓軟體,惡意軟體的困擾。然而由於國內 windows 盜版站統治地位,所以 linux 沒有版權問題的優點,在最終用戶那裡體現的不明顯。而 linux 需要反覆學習,長期使用才能駕馭的系統,學習成本很高,所以在大多數人的最終用戶那裡,它一定不如 windows 。就好像 vim 一樣,不學習一段時間就簡直沒法用。


0. Linux 是用 C 寫的,你讀的就是 C 語言寫成的代碼,這些代碼編譯之後成了 Linux 內核。不過因為內核幾乎得自己靠自己,你多半是看不到什麼外部的函數了(當然,有種科技叫做靜態編譯,不保證 Linux 內核沒去用,我可懶得讀 Makefile)。

1. Linux 一方面好改(驅動就是比 BSD 多),另一方面允許狂改(GPL v2),還比較耐艹。不用 Linux 用別的有時候還真難,更別說 Linux 不要錢了。

2. Linux 只是個平台,理論上說和別的系統沒什麼兩樣,只不過和 Windows 比少了反斜杠路徑又多了 UNIX 的美味,和 OS X 比少了各種簽名的痛苦又多了幾個會叫你 Google 一下就知道了的程序員……(題主要的是優點我就只說優點吧)C 的話的確是 UNIX 和類 UNIX 世界的傳統主力,不過什麼 Java C# nodejs PHP Python 也都有人用在 Linux 上用得很爽啊……(因為 Linux 某些方面好開發,新語言也很多都是 Linux 優先支持的。類似地,一些內核支持讓某些程序/語言在 Linux 上有特殊優勢。)

3. 你要給 Linux 寫東西,看內核是不夠或者沒用的(源代碼什麼的還總是要特別去看的話某些平台的程序員早就…)你需要摸清自己需要什麼,然後去找對應的庫,接下來學會拼起來(看你妹的源碼,有庫文檔看還是看文檔啊)……你要修改 Linux,在內核的編譯選項菜單裡面那一堆基本夠用,並且外圍軟體你更可以自己裁剪啊……當然要是題主是內核裁減巨巨那當我沒說。

// GNU 狂魔模式

Linux 只是個內核,一個特性多到處用的內核,而它上面的程序和程序需要的庫,又要從別的代碼編譯。這些代碼裡面有個來源是大頭,它就是 GNU,類 UNIX 世界自由的燈塔……

GNU 的信徒(啊呸)們讓 GNU 和不少其他人智慧的代碼(包括我們的 Linux)一同工作,好讓這些代碼顯示出他們各自的名字:Redhat, Debian, OpenSUSE, ArchLinux, Fedora, Gentoo, Ubuntu…

你問我 GNU 有沒有自己的內核,我只能說有個 HURD,但是至於好用不好用……

另:沒能成功理解你們為什麼點沒有幫助,我可是認真按照題主問題描述回答的啊…

又:問題標題按照描述改了,嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿。

* * *

聽信了我評論區裡面說 mono 對 WinForms 支持好的各位,我對不起你們啊。mono 這坑爹玩意兒,你去查系統默認字體給你返回的是 MSDN 文檔上的 Windows 字體(Xamarin#40791)還不算,這玩意 libgdiplus 乾脆不支持字體回落(Xamarin#39418)。更不要說 UTF-16 支持了。這貨能用?Bug List


好吧,我調皮一下。

我就問問你不用Linux你用啥?BSD啥的就不說了,畢竟小眾而且其實也是通的。Nuttx啥的就更不用說了,跟Linux也差不多少。還是你打算用安卓?說白了也是Linux啊。

你說說吧,你還想用啥?Windows?哈哈哈哈哈哈哈哈哈哈哈,別逗了

你用X86架構的版本?一個Win10 Home版都要100刀,這錢你干點啥不好?更何況這樣一個龐然大物你打算怎麼裝到無人機上?讓無人機帶個筆記本上天?

還是你打算試試Windows Mobile/Windows Embedded?據我所知這玩意不賣個人,而且你找不到合適的開發KIT,當然你可以掛了WindowsPhone上天,至於WindowsPhone多少錢我也不說了,不是RTOS你真放心它來管無人機?

你還有什麼選擇?Windows IOT?哈哈哈哈哈,此處省略1萬字。

少年,除了Linux你真的沒有第二個選項了。讓你體驗一下Linux的兇殘

這個叫做Edsion,運行Linux如行雲流水一般,單體45刀,100刀你就能湊個開發全套。軟體神馬都是免費的哦。

這個更誇張,叫Raspberry Pi Zero。算是概念產品目前有價無市,1G的CPU外帶512MB內存,跑個Linux自然不在話下,最重要的是這個僅售5刀!!沒有開發板,你買回來插個TF卡就可以開始了。怎麼樣?放棄Windows這種戰5渣,趕快加入我們大Linux神教吧。


為什麼感覺贊成最多的卻是打非所問呢... 大學的時候對linux很嚮往,總覺得windows是萬惡的,那個時候還不是程序員,後來改行程序員之後,反而更加理性,所有東西都是工具,效率不高也罷,如果你更改工具使用的成本大於你為用戶提升帶來的成本,就沒有應用市場,如果你更改工具使用的成本大於給你帶來的利潤,就沒有贏利點,很多企業和人都沒有時間和動力來為linux創造另一套工具了,但是如果是不得不從頭開始造輪子,linux倒是一個合適的工具。


你不能籠統地說linux下面編程有什麼優勢。假定你的程序是相同時運行在Windows和Linux上面的(因為如果你不開發Windows程序那還談什麼優勢呢),那麼如果你選擇的語言是C++或者.net,那麼Windows的優勢是絕對的——只要你不要試圖在Windows使用Linux的那一套「哲學」,就像非要在Linux使用Windows的「哲學」來開發一樣。

像我做這些跨平台的代碼的時候,不同的OS用不同的庫簡直是家常便飯。但是總的來講,在Windows上用Windows特有的庫開發Windows程序,比起在Linux上用Linux特有的庫開發Linux程序,debug起來輕鬆好多。最終90%以上的共同代碼,加上10%平台相關的代碼,通過各種方法結合起來,就是一個跨平台程序了。

妄圖使用同一份代碼來跨平台,經常會出翔。

有一些在Windows上有更好的替代品、但是大家喜愛的腳本語言,譬如說python,在linux上寫起來會舒服一點。但是你仍然需要vscode。但是如果你為了跨平台而在Windows上用python,就犯了上面提到的哲學錯誤,因為python在Windows根本就算不上一個靠譜的解決方案。

但是,有一點需要提起的是:

Visual C++ 可以debug和部署一個運行在linux裡面的程序

,從此告別各種蹩腳編輯器和人工操作gdb的悲傷歷史(逃

你看,所以如果你的程序需要跨平台,那你可以只在Windows上干,但是反過來是不行的。這就是巨大的優勢。


不支持3A大作,不容易分心


看Linux內核的:

開放性 版權(注意這裡不是GPLV2這麼簡單) 驅動包括體系結構支持量 開發活躍程度 支持其的軟體的數量和活躍程度 開發者數量

也許有個操作系統內核在其他的幾個點上超過LINUX 但是應該沒有能在三點或者以上超過Linux的

所以問題不是LINUX有什麼好 而是哪個操作系統比LINUX好 我的答案是 從現在的角度說 沒有


作為伺服器,我自己更習慣用Linux。就是覺得方便,做啥都順手。


我看到的問題描述是這樣的

我覺得這個記者要麼是語文不過關,要麼是瞎jb抄…「用linux代碼編寫的」是什麼鬼?


上H網不中毒

嗯,當年師兄安利Ubuntu時就這麼說的。那會兒的Ubuntu引導菜單都漢化不全,若無師兄醍醐灌頂,我才不費勁去申請free ship呢!

捂臉!


一句話,Linux是自由的!

相比Windows以及其他系統,比如OS X,類Unix的操作系統更自由,你可以比較容易地(前提是有一定操作系統基礎和技術能力)玩弄它們。

可以把它們裝載一個小小樹莓派上,也可以安裝在多個大台式機上組建集群;可以安裝用它做滲透測試(Kali Linux),也可以用它大家便捷的服務(比如Samba文件共享);總之,你可以隨意玩弄它們。

而且在玩弄的過程中,它們會爆出各種小問題,在解決這些問題的過程中,可以了解各種計算機方面的知識。所以玩弄,不只是玩弄,而且是學習,是研究!

舉個例子,使用類Unix的操作系統,可以了解到不同的給硬碟分區的方式;如果只在Windows上,估計一輩子都不會知道還有別的玩法。

類Unix的系統上,可以嘗試各種新鮮的技術,因為很多新技術都首先開源在Github上,Windows上玩弄起來不太容易,Linux上嘗試一下立刻馬上就有效果。

類Unix的操作系統,除了Linux,還有FreeBSD(最穩定)、OpenBSD(最安全)、NetBSD、Solaris、AIX等等,只不過Linux越來越強大,所以使用越來越廣泛。

總之,一句話,Linux就是高大上!


那晚,想重啟一下伺服器,uptime了一下,發現這台機器已經四年沒有重啟了,比我入職時間都長,最後想想還是算了…

ps:windows伺服器都要每月重啟一次,不然會出現各種各樣莫名的問題~


工資高和工作崗位多,就這兩點優勢夠不夠?


windows就像小時候你媽媽送你的變形金剛,linux就像小時候你媽媽送你的積木。


你玩的知乎,就是跑在Linux上的,你玩的貼吧,也是跑到Linux上的。


這問題被改過,目前題面是:Linux下編程有什麼優勢?

如果把「編程」理解為「在Linux環境下編寫代碼」,而不是理解為「編寫在Linux上運行的代碼」,那似乎優勢真不大,畢竟Linux各種桌面作為工作環境再強也強不過Window和MacOS,當然,有的人會因為熱愛Linux而崇尚在Linux環境下編程,但是,真要說體驗的話,還是Window射MacOS方便。

不一定非要在Linux環境下編寫在Linux上運行的代碼的,可以在本地寫代碼,同步到遠程Linux機器上調試運行;也可以用虛擬機運行Linux,現在有了Docker就更輕量更方便了。

總之,即使寫在Linux上運行的代碼,也沒必要在Linux環境下寫,哪個環境你最喜歡用得順手就用哪個環境。


真是受不了知乎了。

題主不懂情有可原,本來人家就是不懂,但下面回答的都是什麼鬼?

首先,題主,「用linux代碼編寫」這在程序員眼中就是個病句,根本不知道在說什麼。我知道它來自你引用的那個鏈接,但那個編輯什麼都不懂,你當他是個文盲就好了。

Dronecode Project項目和LINUX幾乎沒有直接關係,它是linux foundation基金會的項目,但不表示它和linux有關係。他包含多個控制飛行器的子項目,這些項目有些基於linux os,有些基於windows,但無論如何,不是linux代碼寫的,linux代碼是個什麼鬼?

題主完全不懂程序,建議這部分就不要自己弄了。


(1)開源,可裁剪定製開發,做你一切想做的事情。

(2)高效,代碼用C實現,效率極高。

(3)大量開源項目和高手,易於二次開發,易於交流。

(4)很多情況下無須付費。

C和Linux的 開發視頻


wget -r -np -l0 -nd 1024網址

你懂的。


推薦閱讀:

設計一個全新的計算機操作系統需要哪些知識?
Minix 操作系統有什麼發展潛力嗎?
2G內存的筆記本電腦,更適合裝win7還是win8?
如何完整純正地將裝有應用的win7/8/10系統移植到另一台機器上?
Windows的回收站設定有什麼存在的必要性?

TAG:操作系統 | Linux | Linux系統管理 |