少年黑客對自由軟體的自由漫談 | Linux 中國

語言: CN / TW / HK

編者按:本文作者是一位初一學生,是我們的“公開投稿計劃”的第一位投稿者(calvinlin)的同齡人,這篇文章是他對 Unix/Linux、自由開源軟體的一些觀點。

(本文字數:5706,閱讀時長大約:9 分鐘)

編者按:本文作者是一位初一學生,是我們的“公開投稿計劃”的第一位投稿者(calvinlin)的同齡人,這篇文章是他對 Unix/Linux、自由開源軟體的一些觀點。

導讀

“天下沒有免費的午餐。”

這句話只說對了一半。對於軟體業,或者更準確一點,對於 自由軟體業 ,這並不一直是對的。

商業軟體公司正在控制著我們 —— 普通計算機使用者甚至專業的程式設計師 —— 的大腦,在我們的潛意識裡面,似乎只有大公司的東西才質量好。下面是幾個場景:

  • 我傾向通過 收費 的網課、系列影片或者文章來學習技術,而不是閱讀軟體自帶的 免費 文件或者是 免費 的外語甚至中文標準,因為前者更容易。
  • 免費的東西都是 劣質 的。只有收費的東西才可以保證質量高。
  • 才不會有人將優質資源公開免費,除非他們有著特殊目的。
  • 大公司的軟體比一群只因為興趣愛好的人寫的軟體更穩定、更值得信賴。

絕大多數普通使用者都會認為這幾條全都是正確的,甚至一些 有著幾年經驗 的“高階”程式設計師也是。他們寧願買某公司的 IDE 來開發,而不是使用輕量級的、 免費 的 Vim,後者毫無疑問是大多數 UNIX/Linux 程式設計師的必備。

這一切的一切,都是因為:

一、奇妙的商業軟體

自從 Windows 系統成功,成功商人比爾•蓋茨就被各種各樣的人放在各種各樣的地方“膜拜”。一方面可能是因為他太有錢,一方面可能是因為他做了這麼個系統(網路上還有很多人宣稱比爾•蓋茨設計並實現了 Windows 系統)。

然而,在這個“偉大”的視窗系統宕機、藍屏之時,大多數人罵的卻是他們的電腦:“什麼破電腦!見鬼!”,而不是系統(順便說一句,還有人將 “Windows” 稱作電腦)。真奇妙。

轉觀無數的 Linux 開發者(哪怕是林納斯•託瓦茲),都沒有受到這樣的待遇。

軟體是值得付錢的,連自由軟體領袖理查德•斯托曼都沒有否認這一點。但是,你真的確定那些糟糕的、動不動就“該應用程式無響應”的東西值得這麼多錢嗎?我反正覺得不是。

“某視窗系統”還有一個十分神奇之處,它好像是支援 POSIX 的,畢竟設計某新 32 位系統的時候這不就是其中一個目標嗎?(當然有的人會跟我說那應該是 ISO C)

實際上呢,好像它只支援了為數不多的幾個系統呼叫,剩下的幾乎都是標準庫函式( strlen 那樣的),就連基本的 POSIX 風格的 open 都沒有……

與之對比的是對各種標準都支援的 Linux。它支援全套的 POSIX (streams 除外),效能測試也不錯(當然,“某視窗系統”的裸機測試也不錯。注意,是裸機),更令人驕傲的是,優秀的程序建立以及檔案系統。與此相比,視窗系統的檔案系統以及程序建立就不盡人意。

  • 關於對 POSIX 的支援,參見《UNIX 環境高階程式設計》第二章
  • 關於程序建立以及 Windows 系統的相關情況,參見《作業系統概念》 第十六(Linux)以及十七章 (Windows) 以及 《Linux 核心設計與實現》第一章

我知道有些人又要說啥了:我們的安全認證等級(A1 那樣的玩意兒)比你們高!

  • 關於安全等級參見《作業系統概念》 第十四章
  • 這裡安全認證單單是指對檔案的訪問許可權的豐富,某系統可以設定 XXX 沒法訪問之類的

這是無法避免的,傳統 UNIX 的設計就從來沒想過這一點,使用者被抽象成了 同組擁有者 以及 其他 (當然, root 總是有許可權)。但就我個人的觀點來說,這就足夠了,畢竟我沒見過有多少使用者會建立兩個使用者,他們甚至還在用 Administrator 或者是以一些愚蠢的字元為名字,例如 “abc123”。

再來看看軟體。

二、設計哲學 (當然不是

“某視窗系統”的軟體挺多,包括 IE 這樣的令人頭疼的瀏覽器(哦不,它已經被放棄了)、各種沒人碰過的遊戲以及一大堆更沒人碰過的 附件 。這些是隨著系統一塊安裝上去的,想解除安裝必須手動,十分的麻煩。還有類似 Power Point 這樣的有用的“高階軟體”,單個軟體就包含了數不盡的功能,當然,它十分的貴。

瞭解 Linux 的同學大概已經知道我會說什麼了。沒錯,我要說的就是不同系統下的設計哲學。

這更是一個差距,Linux 下面的每一個軟體都平均不足 10 MB,並且都有著自己獨特的分工。 wc 就是統計文字檔案的、 cat 就是顯示檔案內容的(就是這麼簡單)、 grep 就是在檔案裡頭查詢的,類似這樣的軟體數不勝數。利用 UNIX 的設計哲學之一 —— 管道 —— 就可以很方便的統計一個檔案中含 Linux 這個詞的行數(bash 不算很精通,見諒):

$ grep "Linux" foo | wc -l

而在那個作業系統呢?你應該需要用記事本先開啟那個檔案,複製到另一個 .doc 文件裡頭,然後再找一找“查詢”鍵,然後按一下。或許你還需要劃到最底下看一看有多少行……

那來個更難一點的呢,看一看當前目錄下所有後綴名為 .txt 的檔案裡頭有多少行包含 Linux?

對 UNIX 來說小菜一碟:

$ find ./ -name "*.txt" | xargs grep "Linux" | wc -l

在另一個“偉大的系統”上呢?

我想不需要多舉例,大家就能看出來這兩個系統誰設計的更好了。

還是會有人說,這個系統本來就是給程式設計師用的,那個系統本來就是給普通使用者用的。的確,那為什麼你這個程式設計師還在用“某視窗系統”呢?

三、“真幼稚”

曾經在一個復古的群聊中,有這樣一個大佬,引用我對他的評價:

此人身高八(劃掉,七)尺,自詡風度翩翩,常以“京中美男子”而自擬。愛為人師,嘗以“全棧大佬”自號,實則不知彙編、C 為何物者也。 其曰:“僅學可令吾發家之事”。因不習 C。遇人求問,常為省流量,略回 “..” 二字,甚含深意也。 吾不與其為友,另有它故:其人曰:“C 者,垃圾也”,吾對之曰:“爾乃垃圾之中上等者也”,羞怒之下移吾出群,回看,其語已撤回也。

他還有一個口頭禪,“真幼稚”。如同高雅的文言文裡寫的一樣,他只是為了發家才學程式設計。所以對於開源、自由之類的…… 你可以想象到他的反應。

開源幼稚嗎?

我想不是的。

正如理查德•斯托曼在演講中說的:

軟體好像是菜譜。最開始,你從朋友家裡拿到了一份,回到家你就開始琢磨了:是放點糖還是放點辣椒呢?都可以。願意研究的人,可以將菜變得更好吃,更符合一部分人的口味,然後傳給別人。所有人都能吃上美味的飯菜。(非原文,演講的具體內容參見《若為自由故》)

商業軟體做了什麼?

軟體還是菜譜。一個大廚對你說:“菜譜保密”,你就只能吃他做的菜,而不能自己料理。飯店的菜好吃,沒錯。但是沒人知道菜裡頭還有什麼。如果你想要把菜譜給別人,他們就把你扔到監獄裡把你叫做“賊”。這是現實。

更過分的呢?

大廚把菜譜給你了,裡面還塞著一個計時器。你能照著菜譜做 30 遍,滿了限額之後,他們就要求你付錢。不付?那菜譜就會自動銷燬,甚至在上面寫上幾個大字:這人是個窮光蛋。

軟體是值得付錢的,我再三強調,一個優秀好用的軟體是值得我們高興地為它付錢的,甚至更優秀的軟體會讓我們為它的作者塞錢、捐款。然而,我從沒見過有值得五千塊錢的軟體,沒有理由為一個設計落後的微核心,整個系統靠著毫秒級速度的 IPC 來工作的系統付上這麼多錢。如果說 UNIX 值得 5000,我覺得無可厚非,因為 UNIX 是這個星球上設計最好的系統之一。

“最好的系統”不是亂說的。拿 UNIX 其中一個衍生品 —— Linux 來比較,就比較日常使用者的體驗。啟動最慢、記憶體佔用最大的 Firefox 也只需要幾秒鐘時間,按一下滑鼠就可以。對於那個系統,就應該不需要多說了吧……

四、這到底是系統的原因嗎

前面的所有內容都在說 Linux 和“某視窗系統”。拋開金錢,這兩個都可以算得上地球上十分優秀的作業系統。Linux 以及 UNIX 注重簡潔,而“某視窗系統”注重使用者體驗和美觀,裸機效能測試也十分不錯。但這裡,我們要討論的是,到底是什麼使得視窗系統在日常使用中如此的慢?

設計

首先我要說的就是設計。

微核心設計是十分優雅的,這一點我們無法反駁。然而,它卻好像並沒有為核心減輕多少開銷,毫秒級的 IPC 到處都是。它的核心太小了,就連繫統呼叫都放在了 動態庫 裡,導致正常應用的啟動要進行多次重連結。

它的視窗框架也不盡人意。回撥一直是 POSIX 所極力避免的東西,該標準中幾乎沒有關於回撥的內容,而是非同步、 pollselect 這樣更符合人類邏輯的東西。

而它呢,視窗框架的所有訊息(就是那個 Msg )都靠回撥來處理,正這樣導致了響應速度的不盡人意。一個小小的視窗點選、移動都成為了事件。

轉過來看 UNIX/Linux,與其視窗框架類似的是訊號。傳統訊號通過 signal() 設定,而現代的則通過 sigaction() ,無論介面怎麼不一樣,都有著“預設操作”,即 SIG_DFL 。所以如果讓我給視窗系統提一個修改意見,我首先會說:“請加一個 RegisterMsgs 呼叫,為每一個 msg 都提供一個 handler,並支援設定預設以及忽略操作吧!”

有關 signal 的詳細內容參見《UNIX 環境高階程式設計》

自作聰明的使用者

你可以看到一系列“某某安全管家”的應用程式。在 XP 時代,這是必不可少的,他可以防止你的系統被人闖入。然而,現在都…… 2202 年了,還是有數不勝數的自作聰明的使用者(甚至程式設計師)嘗試安裝他們,安裝七八個同時燒電腦的情況也很正常。

我曾經在我的 8.1 以及 10 上重灌系統並且不安裝任何電腦管家,結果效能提升了至少兩倍,和 Linux 並沒有相差太多。

當然,我沒有說“某某管家”沒有用。實際上它們是非常有用的,無數的安全人員編寫了他們,但是現代核心不再需要如此嚴格的保護了,所以說到底,這還是早期系統太差勁的原因。

然而 “某某安全極速瀏覽器”的性質就截然不同了,從來沒有人需要過這種應用,而實際上它們就是個套殼。編寫這種應用的人和詐騙完全一樣,將他們閉源並且加上幾個廣告,就變成了自己的“國產”瀏覽器。

五、自封后路的視窗系統

綜上所述,那個商業系統就是被各種糟糕的後臺程式攪黃了,而它們總是喜歡位於後臺的原因,根本上就是商業原因 —— 看看你右下角那一個個小圖示,它們應該比桌面上顯眼吧!

同時,計時並且催促你趕緊交錢的軟體,也肯定需要放在後臺吧。

也就是說,可憐的商業視窗系統,自己告別了原來屬於自己的 —— 無窮盡的自由軟體開發人員。

六、未來

隨著電腦科學的發展,越來越多的大佬從小學五年級、六年級就開始學習程式設計(calvinlin 哥甚至三四年級開始玩 shell,那時候我還在玩 cmd.exe)。

隨著他們技術的成長,一部分人會毫不猶豫地選擇換到 Linux,而另一部分則繼續選擇使用有著很多 IDE 的“某視窗系統”。但是無論是哪個系統,我都相信,這些少年黑客會毫不猶豫地投入到開源軟體之列中,為世界貢獻一批又一批的人類高質量開源軟體。追求自由,是孩子們的天性,不是嗎?

那時,GNU 計劃、Linux 核心都將會卓越成長,向世界展現開源的魅力!

世界將屬於開源!

作者簡介:intirain (或者 rain 也行),喜歡 UNIX、x86、RISC-V 上的 C。

via: http:// github.com/LCTT/Article s/pull/7

作者:intirain 編輯: wxy

本文由貢獻者投稿至 Linux 中國公開投稿計劃 ,採用CC-BY-SA 協議 釋出,Linux中國 榮譽推出