編寫作業系統的平台之爭:Windows還是*nix

來源:互聯網
上載者:User

平台之爭:Windows還是*nix

本文摘自於淵編寫的《orange's:一個作業系統的實現》一書

    讀到這裡,讀者可能發現書中經常出現“如果你用的是Windows”或者“如果你用的是Linux”這樣的字眼。有時這樣的字眼甚至可能影響到你的閱讀,如果真的這樣請你原諒。我試圖照顧盡量多的讀者,但是對每一個人來講,卻必須面臨一個選擇──在什麼平台下開發。本書第一版使用的是Windows平台,而在第二版中,我投誠了。接下來你會發現,雖然以後的行文會最大限度地兼顧Windows,但總體是以Linux為預設平台的。
    其實在什麼平台下開發,有時純粹是口味問題,或者是環境問題──你開始接觸電腦時使用什麼,很大程度上取決於你周圍的人使用什麼,而這往往對你的口味產生巨大而深遠的影響。然而最早接觸的未必是最適合的,在我親身體會和比較之後,我決定從Windows徹底換到Linux,我想在這裡說說為什麼。請注意這不是佈道會,更不是你開發自己的作業系統必須閱讀的章節,我僅僅是談談我個人的體會,希望能對你有所啟發,同時解釋一下為什麼第二版會有這樣的改動。
    在第一版成書的時候,我已經在使用Linux,但是用得並不多,主要是覺得用不習慣,而現在過了兩三年,我已經基本不用Windows,在Windows下我會覺得很不習慣。我的這一經曆至少有兩點啟示:第一是Linux不好用是個誤解(有一種說法是Windows的案頭更好用,這是個複雜的誤解),好不好用是習慣問題;第二是如果你有興趣使用一樣你不熟悉的東西,不要因為剛開始的不習慣而放棄。
    其實對於Linux和Windows的誤解有很多,我把這種誤解歸結為作業系統文化上的差異。其實在提起兩種系統時,人們往往拿一些具體的事情來做比較。比如比較它們的安裝過程、使用方法,甚至是介面。但實際上隱藏在表面背後的是兩種完全不同類型的文化,或者稱之為不同的理念。
    對於Windows而言,它的文化植根於微軟公司的願景,“讓每個家庭的每個案頭上都有一台電腦”,當然他們希望此電腦內啟動並執行是Windows作業系統。這個理想加上Windows作為商業軟體的性質,決定了Windows具有相當程度的親和力,使用者介面顯得相當友好。豈止友好,它簡直友好到每個人──無論兒童還是老人,受過高等教育還是只念過小學──都能比較容易地開始使用電腦,這無疑是微軟對這個社會的巨大貢獻。但是介面友好並不一定就完美了,這一點暫且按下不表,我們先來說說Linux。
    Linux的文化很大程度上來源於UNIX,UNIX所倡導和遵循的文化也被稱為UNIX哲學[8],其中很重要的一條原則叫做“做一件事並做好”[9],這聽上去跟Windows的介面友好說的不是一碼事,但其實仔細分析起來大有關聯。做一件事並做好意味著兩件事情,第一件事就是工具之間可以協同作戰,不然各人做各人的,無法完成複雜應用;第二件事就是介面要統一,不然無法做到協同。這個統一的介面就是文字資料流(text stream),這也就意味著,命令列是UNIX文化的核心。而Windows的做法大有不同,因為要介面友好,於是不能指望使用者開始就知道怎麼把工具串接在一起,所以Windows選擇任何應用都自己完成所有功能──至少讓使用者看起來如此,這使得每個工具都各自為戰,從而增加了每個程式的複雜性和開發成本。不僅如此,由於功能都是軟體開發人員定好的,所以你基本上不能指望大部分的程式具備可擴充性,而在UNIX下,大部分的程式都可以跟其他程式協同起來完成程式不曾“設計”的功能。這也是上文我說“介面友好並不一定完美”的原因,友好是有代價的。
    那麼UNIX是一個“不友好”的系統嗎。這個問題其實沒有看起來那麼簡單。首先是UNIX下流行的案頭環境正在越來越“友好”,你甚至可以將其配置得看上去跟Windows別無二致,不過關鍵點不在於此,而在於長期來看,UNIX的學習成本並不比Windows要高,但收益卻要高得多。我們剛剛提到,友好是有代價的,而且代價比想像中要高。對於一個初學者,開始的簡單容易使他產生錯覺,認為電腦是個簡單器械,但實際情況並非如此,一旦遇到麻煩,使用者很容易陷入束手無策的境地,一旦有一件事情沒有現成的軟體可以解決,你馬上一籌莫展。而UNIX不同,它的學習曲線比較陡峭,但是你一旦入門,就會發現自己的工作可以變得如此輕鬆而且有趣。在Windows中,雖然使用一個工具第一步往往很容易,但很快你就容易迷失在一堆嵌套很深名字晦澀的菜單裡面,學習這些菜單可不是一件容易的事情,而且在一個工具裡學會的東西到了另一個工具裡可能就變了樣。如果你想看看程式的協助,有時也是件困難的事情,因為為了達到“友好”的效果,協助經常也是一層一層的,很難找到自己需要的內容。而在UNIX中,所有的工具都有個手冊(Manual),可以通過統一的命令“man”來查看,而且這些手冊都是平坦的,你可以一口氣從頭看到尾,可以隨時查看你所要的關鍵字。此外,除了少數極其複雜的工具,手冊基本上是夠用的。簡而言之,在UNIX中,軟體使用看起來複雜了,實際上如果你想真正掌握一個東西,用的時間不會比Windows中更多。況且,在Windows中你很難真正掌握一個東西。
    我並非故意貶低Windows,我說過它對社會的貢獻巨大。對於一個平常只用電腦來收收郵件看看電影的使用者,它的易用性絕對是巨大的優點,但你我不是這樣的使用者。我相信閱讀本書的人都是程式員,而且都是像我一樣喜歡探索的程式員──不喜歡探索的程式員很難有心思寫自己的作業系統做消遣。一個程式員的要求和普通使用者是不同的,程式員需要瞭解他的電腦,掌握它,並且可以熟練地讓它協助自己完成工作,從這個角度上講,UNIX無疑具有巨大的優勢。它裡面的每個工具都很鋒利,你可以組合著使用,持久地使用,而且許多年都不會過時。
    在這裡我可以舉一個我自己遇到過的例子。在我編寫作業系統的檔案系統時,需要多次查看某幾個扇區的內容,並對其中的資料進行分析。在Linux中,我可以很容易地將od、grep、sed和awk等工具[10]}串在一起完成這項工作,我也可以編寫一個簡單的指令碼,將命令放在指令碼中方便取用。而在Windows中,我通常只能在視窗間反覆地單擊滑鼠,費時費力而且效率低下。類似的例子不勝枚舉,你一旦熟悉了這些工具,就會發現通過組合它們,你能得到比任何圖形介面工具都多的功能。而在Windows下就不得不看具體菜單的眼色了。不僅如此,UNIX下的工具往往學習一次就能長久使用,很少過時。比如剛才提到的幾個工具大部分有20年以上的曆史,到現在它們依然被廣泛使用,即便它們學起來會稍微難一點,平攤在20年裡面,成本也是極低的。這就是UNIX哲學,你不需要重複學習,每個工具都好用,而且可以因為跟其他工具結合而發揮多種作用。
    大多數Windows下的軟體都有個毛病,它經常試圖隱藏一些東西。它的本意是好的,就是讓介面更“友好”,但這對程式員有時是件壞事,因為它讓人難以透徹地理解軟體的所作所為。或許你會說,如果你想理解,你總能理解的。沒錯,這跟“在UNIX下能做的事情在Windows下都能做”是相似的命題,甚至於,只要安裝一些額外的軟體(比如Cygwin),你可以在Windows下使用UNIX的命令。問題是即便能做,你也未必去做,這就是所謂文化的力量。理論上你在任何地方都能讀書學習,但效率最高的地方還是教室和書房,在客廳舒服的沙發上,你不自主地就拿起了電視遙控器。
    所以以我自己的體會而言,一個程式員最好還是使用類UNIX的作業系統。它能在日常生活中幫你提高自己的水平和工作效率。這一點與攝影有點類似,市面上數量最多的是傻瓜相機,但一個專業的攝影師總是會選擇功能複雜的專業級裝置,不是傻瓜相機不好,而是適應的人群不同,如果你想成為好的攝影師,那麼上手容易的傻瓜相機一定不是你的最終選擇。不是好不好的問題,是適不適合的問題。
    上面論及的是兩類作業系統文化上的差異,其實即便是純粹應用程式層的,也有諸多誤解,比如以下幾條:
    誤解一. Linux難安裝。如果你曾被Linux的安裝難倒過,我建議你下次試試Ubuntu。在本書第一版開始寫作之時,Ubuntu的第一個版本還沒有發布[11],但短短几年時間,它已經變成全世界最流行的發行版[12],這與它的易裝和易用性是分不開的。筆者本人大規模地使用Linux也是從Ubuntu開始的,它的安裝過程一點也不比Windows的難,而且中文資料也相當豐富,很容易找到志同道合的人。Ubuntu的另一特點是它的驅動程式很豐富,支援很多的硬體,大部分情況下驅動程式都能自動安裝好,甚至不需要使用者參與,在這一點上它甚至比Windows更“友好”。
    誤解二. Linux難學。希望你永遠記住,電腦不是個簡單器械,無論是硬體、作業系統還是應用軟體,都經常比看上去複雜得多。所以易用未必是好事,它肯定向你隱瞞了些什麼,花一點時間絕對是值得的,尤其是當你想做一個程式員的時候。況且Linux也沒那麼難學,且不說它的圖形介面越來越好用,就是完全用命令列的話,入門也相當容易。而且Linux世界的文檔齊全且易於檢索,更有高度發達的社區文化,在這裡你學到的往往比預期的還要多。
    誤解三. Linux難用。再強調一下,Linux的學習曲線是陡峭的,然而一旦你度過了開始的適應期,就會發現原來命令列可以這麼好用,原來有這麼豐富的工具來提高效率,而且這些好用的工具居然都是自由的[13]。你不需要向作者付費,甚至他們鼓勵你使用和傳播,你甚至可以隨便修改這些工具的原始碼,遇到問題可以發一封郵件反饋給作者。這在Windows下都是很難做到的,在那片土地上你很難體會什麼叫“自由”。不僅如此,當你熟悉之後會發現,同樣一件事情,其實Linux下的解決方案往往比Windows下要簡單。就比如我們提到過的安裝Bochs一例吧,在Windows下你通常需要先到Bochs網站,在數次單擊之後找到下載連結,然後下載,再然後是雙擊安裝程式來安裝。在Linux下呢,你看到了,只需要一個命令列就可以了,即便你打字的速度再慢,也比那些按一下滑鼠操作要快。
    我在此並非貶低滑鼠的好處,我每天都使用滑鼠,它絕對是個偉大的發明。但是我們應該只在需要它的時候使用它,而不是試圖用它來解決所有事情。這就好比圖形介面是個好東西,如果你的工作是圖形影像處理,很難想像沒有圖形介面該怎麼做,但並不是圖形介面在任何時候都是好的。我們應該分辨每一類工作最適合的工具是什麼,而不是用一種思維解決所有問題。這也是我說“Windows案頭好用是個複雜的誤解”的原因,圖形介面是個好東西,Windows把它用得極端了。
    誤解四. Linux下軟體少。這是最大的一個誤區,事實上很少有事情你在Linux下是做不到的。而且Linux的發行版通常都有發達的包管理工具,無論是關鍵字尋找、安裝、更新還是卸載都可以用一組統一的命令來完成。這使得你在需要某種軟體時,使用簡單的命令就可以找到它,很多時候你能找到不止一種。如果你想看看除了od之外還有哪些二進位查看器,在Ubuntu或者Debian下通過一個apt-cache search 'hex.*(view|edit)'[14]命令就能找到十幾種,這些都是自由軟體,有命令列的也有圖形介面的,而在Windows下,怕是又要在浩瀚的互連網中搜尋了。
    在Linux中找一些Windows下軟體的替代品是很容易的,雖然這種對應有時並非必要。比如文書處理軟體就有OpenOffice.org、KOffice、AbiWord等選擇;影像處理軟體有GIMP;多媒體播放軟體有MPlayer、Totem等。如果你喜歡玩遊戲,Linux下的遊戲數量也會讓你大吃一驚,不信你可以來這裡看一看。
    其實Linux的好處還遠不止這些,眾所周知的一個優點是它基本沒有病毒的煩惱。不是Linux中開發不出病毒來[15],而是因為Linux系統有自身的許可權機製作保障,加上軟體來源都可信賴,且大部分都是原始碼開放的(其中相當一部分都是自由軟體),所以說Linux下沒有病毒煩惱並非誇張。想想你在與病毒做鬥爭的過程中浪費了多少時間吧,我已經很久沒有這種煩惱了。Windows或許正變得越來越穩定,但Linux一直都很穩定,而且你不需要整天重啟你的電腦,筆者的電腦就有時幾十天不重啟。除非你要升級核心,否則沒有很多關機和重啟的理由(不管是安裝還是卸載,或是對系統內的包進行升級,都不需要重啟電腦)。
    作為一個作業系統愛好者,使用Linux的理由還有一條,那就是Linux的核心是“自由”的,注意它不僅僅是“開放原始碼”的,你不僅可以擷取其原始碼,而且可以自由地複製、修改、傳播它,當然也包括學習它。如果你也想加入到核心駭客[16]的隊伍,那麼就先從使用它開始吧。Linux不是完美的,它的問題有很多,但每個問題都是你參與的機會,而這種參與可能是你成為頂尖高手的開始。
    筆者本人完全使用Linux來工作的時間其實很短,幾年而已,但我已經深深體會到它給我帶來的好處。我並非想說服你,人不能被說服,除非他自己願意相信。我只是希望你能嘗試著去用一用Linux,或者UNIX的其他變種,然後用自己的判斷去選擇。
    如果你堅持使用Windows,沒問題,兩者之中都可以很容易地搭建起開發環境,本章後面的部分將會就Linux和Windows分別來做介紹。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.