Linux的發展,是文化的發展
近來看一篇“hacking是藝術還是科學”的文章,由此產生了一系列的聯想。由藝術聯系到文化是再自然不過的事,人類的歷史既是科技的發展史,也是藝術的發展史。藝術(廣義上包括文學)和科技構成了文化。而當今似乎科技被從文化中分離開來,於是我們不得不重談文化。因為同商業主導的其他產物不同,Linux更是一種文化的象征。
第一在linux的媒體上看到馬克思的頭像覺得很可笑,但是思索一番後方才醒悟:資訊難道不是一種生產資料嗎?開源與私有,恰恰就是資訊的分配方式的區別。
軟件同貨幣聯系起來時,資訊的圈地運動正式開始。並在幾年的你爭我奪中拼殺下來。同社會的發展不同的是,軟件業是直接從“原始的共產”跳向“資本”形式的。以貨幣來交換軟件的確在一定的時期對經濟起到很大的促進的作用。但是卻限制了更多的人生產形式更加多樣化的軟件的能力。長遠角度看這是對發展不利的。於是,共有的分配資訊的方式又被一些人重新重視起來。
這種共有資訊的復蘇代表這軟件的文藝復興,也就是文化的復興。開源的意義在於,首先是傳播文化,文化產生軟件。如同藝術中很難找到兩部及其相似油畫一樣,社區中很難找到兩部概念過分接近的軟件。這就是開源社區的精神:知識的高度分享,而且高效的利用,最大限度地避免重復浪費。
初期的開源作者也是理想主義者。同早期的無產者一樣,資訊無產者也是理想主義者。理想主義者感染理想主義者,卻拒絕了更多的實用主義者。一定程度上限制的自身的發展。Eric不是理想主義者,所以當他提出開源作為商業模式時,就同人們第一次聽到中國改革開發一樣!事實證明這種決定是正確的!不同的文化中都有優秀特點、優秀的人。優秀的特點借鑒過來,優秀的人吸引過來,文化群體才能由此而壯大!相反,如果我們不能同其他群體的人和睦相處,對這些人進行人身攻擊和冷言嘲諷,認為linux具有高高在上的優越感。這樣非但不能為我們的群體吸引更多的優秀的支持者。也會使其他的群體產生我們本身的群體數字偏低的印象。
Linux同Windows,文化於市場的差別
我個人認為Linux同Windows不存在討論技術的差別的意義。因為很難指定出一種適普的標准來衡量它們。但是,他們身上一些特點的卻十分明顯地分別體現出文化與市場的特征:
分發機制
最初的linux用戶真正的是from scratch。因為發布的內核同各類的GNU軟件分不在網絡的各個角落。包括為了擁有圖形界面,也要在安裝X之後編譯大量的其他軟件。而為上市而開發的windows卻是一個超大的軟件包。因為要做到真正的“友好”,不可能讓用戶用一個月的時間來安裝應用軟件,何況入門用戶還根本無法安裝應用軟件。大家記得身邊有些人是花多長時間理解“添加刪除程序的”。
同樣,普及或者商業化必然就要走集成的道路。從最早期的紅帽子,到GNOME,KDE的問世。社區已經盡力提供了各種手段來促進Linux的市場和普及。當然也越來越類似windows,一些操作方式開始向windows兼容。而近年來國內一個Linux廠商的發行本將這種趨勢推至極限,因此相當的受國際社區的反感。
第三方軟件的管理機制
除了歷史遺留問題和向DOS兼容問題。一些Windows的機制我認為不是一個Linux愛好者們所說的缺陷,而是最大限度的面向市場的結果。下面一一舉例說明:
1)目錄的管理方式和注冊表
windows使用相互獨立的第三方軟件目錄組織方式,並且盡量避免不必要的軟件安裝到系統的目錄下。這樣的組織正是市場最大化的結果。由於商業競爭,封閉源代碼的原因。每個廠商在開發軟件時的命名相互之間經常產生沖突,即使是共享庫之間也互不兼容。唯一的辦法就是放在各自的目錄下。但這樣運行程序的時候的路徑又成了問題,於是目錄的方式必然導致了注冊表的誕生,讓程序員通過注冊表解決路徑問題。同樣也捎帶解決了配置文件的路徑問題,可以盡量少的避免使用配置文件了。
linux向來就沒有第三方的軟件的概念,從unix被發明時起就是這樣。所有的軟件都裝在標准的幾個目錄下,而信息的高度共享是避免沖突的最有效的方式。這種方式可以把腳本的作用發揮到極限,以我個人的觀點:同樣是腳本,對windows和linux的意義有本質的區別。二者區別的根本原因就是目錄的組織。而由於是信息的透明,如存在操作系統對第三方軟件的保密問題,也不存在沖突問題。但是,也注定起不到windows那樣的商業效果。
2)病毒的肆虐,歷史遺留和市場綜合作用的結果
我個人不同意*nix上鮮有病毒是因為用戶數量過少的說法。我認為windows上的病毒肆虐主要有兩個因素:
首先是歷史遺留問題。unix從一開始就是多用戶多人的操作系統,所以首先從一開始就要為權限等安全問題考慮,並且制定了一套在相當長一段時期行之有效的安全機制。而DOS的目標是在一個性能十分有限的微型計算機上提供一個簡單的系統。這是十分合理的!但是卻為後來的系統設計安全機制帶來了兼容的問題。這是作為一個廠商和封閉源代碼的軟件必須考慮的。也導致了早期windows的16位代碼等等。而且這些問題一直延伸到最新的操作系統和文件系統。最新的NT內核的系統也從unix身上借鑒了一些特性。但受兼容性的束縛很多問題的解決幾乎是不可能的。很多問題不是微軟造成的,包括第三方的廠商甚至是用戶本身造成的。
具體來說現在裝機用戶很多都是用在零售商那裡的ghost的系統。不論多大的硬盤會被等分4-6個分區。而且全都FAT32的文件系統。而且大多數用戶在重新安裝系統時也不會將系統分區改成NTFS,更不會改動其他的分區。這樣就帶來了更多的病毒隱患,而很多病毒是在機制上早就解決了的。
另外,幾乎全部的XP的桌面用戶每天都在以超級用戶身份使用系統。一種原因是因為XP上默認的用戶權限就是超級用戶。而令一個原因也迫使用戶不得不每天使用超級用戶,應該是廠商的水平和遺留問題。絕大部分的應用軟件,尤其是國產軟件在其他低權限的用戶的登錄上是無法正常使用的。通常情況廠商限於水平無法同系統的安全機制達成一致。比如國產殺毒軟件很多,但注冊系統服務的不多。我所見的同windows的安全機制結合的最好的恐怕是諾頓的軟件。注冊系統服務。而且用戶數據保存在用戶的主目錄下(Do*****ents and Settings下的用戶名的文件夾下)等等措施保證了無論以任何身份運行登錄,殺毒軟件都能夠正常的起作用。而大多數的國產軟件以一個管理員的身份安裝之後,在另一個管理員的桌面和菜單上都找不到圖標!一些軟件將數據包存在安裝目錄下,這本來就是單用戶系統下的習慣。比如QQ,默認情況下低權限用戶根本沒辦法使用正常,要設置Tencent文件夾的權限才行,這樣這個文件夾又成了對所有用戶可寫的了!如果把用戶數據保存到Do*****ents and Settings下,每個用戶相互獨立有什麼困難?恐怕是照顧一些使用98的用戶或者自己的程序員吧!大家都使用超級用戶,好啊!病毒什麼的都懶得研究什麼權限提升了!想改什麼就改什麼!記得一個同學叫我去殺毒!我一看現在的病毒真的是簡單了!直接把文件名一改省得感染文件了。然後在autorun.ini裡加上一條就可以保證運行傳播了!而這個病毒據說還是大名鼎鼎的流行!如果大家平時不用管理員的話,這個病毒恐怕根本沒有傳播的可能!所以IE和firefox都用漏洞,但IE可能就回感染系統,而firefox只能感染用戶。這不是系統的問題,只是用戶自身的問題,當然系統要對用戶養成這些毛病負責!
然後就是市場問題,記得*nix出現病毒或者蠕蟲的話。都是有人發布補丁的。蠕蟲這裡不談,因為蠕蟲主要是通過服務傳播的,是服務的缺陷。*nix的每個病毒都象征這一些機制的問題。於是這些機制一旦修正,所有同類的病毒就不會感染了!於是*nix下的殺毒軟件其實是查殺通過samba monnt的目錄上的windows病毒。但作為windows來講,病毒意味著意想不到的市場!而且這麼大的經濟效益也能推動全球的經濟增長!用三個代表判斷也是對人民有利的!
3)IDE
我覺得不同意那些對linux下IDE環境的看法。對優秀的程序員來說,整個Linux就是一個IDE,只不過你同他打交道不是用鼠標點擊,而是用命令和腳本程序。由於上面談到的目錄的優勢,所有的程序都被組織在一起了!其實是一個傳統IDE的不同功能模塊被在不同的幾個程序中實現了,而且合作起來也更加靈活。而這個IDE除了軟件開發還可辦公和娛樂,集成度顯然更高了!有些人甚至網頁之類的都用腳本來處理寫好的帶標記的文本來發行出去。如果說哪種IDE更加高效的話,理所當然是這種全自動的方式。
Linux在中國,文化和市場
Linux在中國達到今天的規模完全是市場的作用,說實話教育界起到的微弱的作用讓人十分遺憾。人們透過媒體知道了Linux。不管是否處於宣傳者的本意,linux被扣上了“高深”的光環。“CLI”、“用於服務器”之類的說法嚇走了一批觀望者,也有吸引了一批喜歡挑戰難度的人眼球。應該說這批人都是優秀的人,但不是全部優秀的人都會對Linux產生興趣。因為宣傳中透露出linux一個特點“不成熟”,“不成熟”意味著沒錢途。
人才的缺乏卻給了勇敢的人“錢途”。他們成了優秀的程序員或者系統管理員,開發了很多優秀的軟件。然而絕大多數為了公司,卻很少為了社區。也有人成為了商業unix系統的管理員。
客觀地講,Linux的文化向國內的傳播相對於市場向國內擴展是十分緩慢的。大陸的Linux廠商和產品比港台多,但是幾乎所有擁有中文化信息的國際開源社區中香港和台灣的參與者都比大陸的活躍,你可以看到支持GB的軟件遠少於BIG5,zh_CN的文檔遠少於zh_TW。成熟的程序員們也不願意些入門的文檔。只有少數人以論壇版主的身份整理文章和搜集資料。文檔的缺乏和語言的隔閡使我們遲遲不能真正的了解到國際社區的文化,更談不上回報社區。媒體上的報道全部以市場為中心……國際社區疑惑了,中國人到底對linux感不感興趣?
關於市場格局的報道太多,我手頭沒數據沒辦法評論。但是與一些報道不符的是,作為一種特殊的商業產品。linux的市場不能單單的拿訂單來衡量,也不能看政府的笑臉分析。在中國RedHat/Fedora的用戶數量占絕對的優勢(程序員背景的用戶較偏向debian和gentoo),只要到幾個中文的Linux社區看看就知道了。這些目前的用戶將來一旦成了技術人員就是潛在的訂單。這種規模的用戶份額除了和國際市場的規模之外,主要和RedHat苦心經營的社區效應有關,通過fedora社區RedHat的開發人員幾乎同用戶和貢獻者們無縫地交流。相比之下急於開拓市場的紅旗卻沒有意識到這一點。多數用戶對紅旗的了解少得可憐。已經成為制約公司發展的瓶頸。以中國目前的現狀來看,社區的意義不僅在於潛在的市場和用戶,也是為公司自己培養人才。
個人雖然不贊成制作和發行帶有民族氣質性的linux發行版本,但還是希望國內誕生越來越多的基於社區發展起來的發行版本的開發團隊以及其他的開發人員社區。同市場的昙花一現相比社區的發展壯大才跟家的持久和有力。
文化角度的Linux未來展望
觀望這幾年國際linux和其他開源系統的發展。社區的發展遠遠比市場的發展要明顯得多,從文化的傳播的角度看來這是一種巨大的成功。為了保持和發揚這種成果,我們需要為社區吸引更多的用戶和開發人員。讓更多的軟件使用開源的許可協議。
在國內linux的用戶可能會從學校開始逐漸的擴大。但在市場上可能還是體現在更多的商業的Unix的優秀人才的增多。這些人才普遍是在linux社區成長起來的。另外國內的用戶會對國際的開源社區有更多的了解。更多的資料被翻譯成簡體中文。最重要的是國際社區中會出現更多的中國人。國內也會出現一些較為成熟、具有一定規模的開發社區。
Linux程序員和用戶身上的優秀的品質和文化氣息會吸引更多的人渴望了解和使用Linux面對他們社區的成員們應該比以前有更好的姿態去面對這些未來的同伴們。開源軟件除了影響本身的開發人員和用戶以外,也會對window下的程序員產生更大的影響,進而促進windows下的開發人員提高自己的水平,能夠編寫出同系統設計風格一致的軟件。在改進安全性的同時也意識到開源對於他們的重大意義。
在同商業模式結合方面我並沒有權力去做什麼展望。就想去預測股市一樣。Linux對未來的意義在於:通過文化的影響力讓一些被作為商品的技術盡快的被普及和貶值,以此來消除知識傳播的壁壘和刺激更新的技術的不斷更新。而對最新的技術開放源代碼也可以讓這些技術得到最快速的推廣和實現。
附:如何學習linux?
做為中國人的特殊情況,學習linux對中國人來說要做的事情相對多了一些:
1、以linux為榮耀,以幫助他人了解和學習linux為己任。
2、堅持訪問英文網站,尤其是一些大師的個人主頁。堅持閱讀英文文檔,並盡量翻譯你讀過的文檔發表到國內的社區上供他人閱讀和整理
3、了解unix的歷史,linux的歷史和hacker的歷史及文化。
4、盡可能聯系所以可以聯系到Linux的愛好者,盡可能多的了解你能接觸到的最了解linux的人對linux的看法。並於自己的觀點相比較。
5、空閒時思索為什麼自己喜歡linux,別人為什麼喜歡linux。為什麼你們喜歡的理由不同?
6、閱讀各類的開源許可協議和商業的用戶許可協議。對比他們各有哪些問題和優勢。
以上使你了解開源文化,是作為一個合格的linux社區成員的前提。
7、安裝一個linux的發行版本。
8、盡你最大的能力把你的學習、娛樂或者工作的環境轉移到linux上來。盡量避免尋找linux功能類似的軟件,而是尋找linux下解決同樣問題的通用的方法。並且對比同windows下的解決方法哪種更加優越。
9、學會SHELL編程。SHELL幾乎可以作為一個入門語言來學習。最低的要求是能夠看懂你自己的版本的linux的配置腳本。理解為什麼一些帖子中裡提到的配置方法回起作用,並了解你的發行版本怎樣從每個配置文件中把設置用環境變量的形式讀取並讓他生效的。
10、學會安裝以各種方式發行的程序,並且讓他們的安裝同你系統的慣例一致。熟悉X windows的運作方式。熟悉你的發行版本的安全機制,並且學會定制他們按你的需求工作。
如果僅僅是作為用戶並且部分體會unix的哲學,上面的幾點就足夠了。個人認為這幾點足夠成長為一個合格的Linux用戶了。甚至只要再稍稍的擴充就可以制作自己的發行版本了!而對於不同的用戶群體,比如辦公用戶或者科研人員等。第8條意味著不同的標准。
11、選擇一門或幾門語言社區常用的編程語言。
12、搜集社區或者hackers推薦的圖書或資料、網站、新聞組等。
13、選擇一個較小的用你當前學習的語言開發的開源項目。閱讀他的代碼,並且對比他的代碼和你形象的編寫方式是否相同?哪種更加優越?
14、嘗試按照TODO中的要求為這個軟件編寫代碼,並且同他的作者聯系。學習autoconf和automake等工具的用法。
15、你也可以不參與項目的開發,但仍然能從代碼閱讀中獲益。如果項目是一種你沒有接觸到的技術或者標准的實現,那麼搜集資料讀懂它!
16、學會使用linux下的調試工具,如果軟件還不太穩定,可以幫助找出BUG並且改正。並且學會制作patch發給作者。
17、如果曾是windows的程序員,嘗試把開發環境轉移到linux下來。或者開始在windows的開發工作中使用開源的開發工具和SDK。
18、如果是系統管理員,還要學會在linux部署更強的各類的安全方案。但這已經不屬於學習linux的范疇了。
上面介紹了幾條學習的要求,主要強調的是學習的態度。至於具體什麼樣的技術和自己應該在技術層次上的要求,按照上面介紹的方法應該會慢慢的體會到。