[TEAP早期試讀]《Linux/Unix設計思想》之: 大教堂?多怪異

dayanday發表於2012-02-28

圖靈社群按:
TEAP是什麼?TEAP是Turingbook Early Access Program的簡稱,即早期試讀,它公佈的是圖靈在途新書未經編輯的內容。一本書的翻譯週期約為3到6個月,如果在翻譯過程中,譯者就能與讀者進行溝通和交流,對整本書的翻譯品質是有幫助的。通過TEAP,讀者可以提前閱讀將來才能出版的內容,譯者也能收穫寶貴的反饋意見,改進翻譯,提高質量。
本書為《Linux/Unix程式設計思想》,有問題可以在這裡留言,也歡迎大家與我或者編輯聯絡 ,本篇內容出自書中第11章。

enter image description here

“起初他們忽視你,而後嘲笑你,接著打壓你,最後,就是你的勝利之日。” ——甘地

2002年10月1日,當滾石樂隊釋出專輯“Forty Licks”的時候,每個人都認為這張唱片應該能直接問鼎下一週唱片排行榜的冠軍,但它卻沒能成功,只是屈居第二。滾石的這個故事證實了一個道理,你無法總是得到你想要的東西。這張集合了歷史上最偉大搖滾樂隊的熱門曲目的精選集之所以未能問鼎,是因為廣大聽眾情不自禁地愛上了另一張精選集,它集結的正是偉大歌手貓王Elvis Aaron Presley的熱門曲目。這就是2002年9月24日發行的名為“ELV1S 30 #1 Hits”的專輯。

心存疑問的人們可能想知道為什麼像貓王這樣的老傢伙會讓滾石樂隊無法得償所願呢?為什麼他們就無法擺脫貓王的陰影呢?為什麼是滾石敗給了貓王,而不是貓王敗給滾石?

答案很簡單。滾石樂隊的音樂是在“大教堂”裡完成的,而貓王的歌曲卻是借用了美國音樂“集市”中的種種元素。咦?在你覺得這個說法是如此怪異之前,讓我來解釋一下吧。也許你會明白為什麼在教堂裡哭泣的是滾石樂隊而不是貓王。

從滾石樂手Mick Jagger和Keith Richards處於音樂生涯的早期巔峰開始,他們就在一起度過了無數個不眠之夜,創作出一首接一首讓大家熱血沸騰的熱門單曲。他們的作品只有搖滾這一種風格,但我們還是很喜歡。Jagger和Richards似乎做不了別的。他們只做了一件事情,可他們完成得很好。

然而,對於他們所具備的創作天賦來說,他們的作品只是一種“閉源”的專有做法。我們幾乎很少聽到滾石與任何第三方一起創作出來的歌曲。幾十匹野馬也無法將他們從心中的大教堂里拉出來,去和別人一起開展任何開源的合作。他們可謂是自身NIH綜合症的受害者。

然而,貓王的妙處就在於他這種大雜燴的集市化創作方式。他喜歡所有令人熱血沸騰的音樂元素,他的歌曲風格包羅永珍,從搖滾、藍調、鄉村、福音 、民謠到流行曲調,一切都取決於他當時熱愛的是哪一種。他的魅力源自他多變的風格。不管是在大螢幕上還是工作室的麥克風前,或是去參加著名的電視節目Ed Sullivan Show,貓王都是激情四射,願意表演任何節目。

貓王也是深諳重用之道的大師。在Mick Jagger和Keith Richards忙於創作原創音樂的同時,貓王卻正忙著借鑑別人的音樂,並將它們打造成自己的熱門單曲。雖然他也可以親自創作自己表演的歌曲,但他卻選擇去利用其他音樂製作人的作品。這使得他對整個娛樂世界產生了更大的影響。是的,藉助於他的音樂和相關商品的銷售,他變得非常富有。但許多人也會從他的這些財富中分一杯羹。這就是真正開源環境中的協作所帶來的積極影響,每個人都能從中受益。

貓王死了。願他的靈魂不朽。

也許有人會說把滾石樂隊、貓王與Eric Raymond的著作《大教堂與集市》放在一起來做類比有點兒牽強。畢竟,貓王最近距離接觸的集市可能也就是麥克斯韋大道的孟菲斯跳蚤市場。而在大教堂,你最不可能找到的就是那位創作出“Goat’s Head Soup”專輯的人。因此,讓我們來看看一個真實的大教堂,或者更確切地說,一種曾經流行於大教堂裡的語言:拉丁語。

拉丁語曾經擁有過像今天英語一樣的輝煌地位。隨著羅馬帝國逐步征服世界,從大約公元前250年直到6世紀,拉丁語的使用便一直在穩步地增長。在這段時間裡,羅馬天主教會宣稱只能用拉丁語這一種語言撰寫科學、哲學和宗教作品。因此從那時候起,如果想成為引人注目的牧師或學者,你就必須學會說拉丁語。然而,隨著羅馬帝國的逐漸衰落,外夷蠻族開始入侵,那些入侵者的好戰本性使得他們並沒有興趣讓自己顯得智力超群,他們通常都是按自己的喜好來修改拉丁語。他們加入了自己民族關於殺戮、傷害和掠奪的詞語,因為他們認為上帝也賦予了他們征服這門語言的權利。與此同時,祭司和學者卻紛紛譴責這種玷汙了他們心愛的拉丁語的行徑,並進一步向不斷縮小的宗教人群宣傳捍衛這門語言的重要性,直到它最後歸隱在寧靜的大教堂裡,只有大教堂裡面的人們才知道如何使用拉丁語。

另一方面,英語逐漸成為一種國際化語言,這並不是因為它的純粹性或神聖性,而是因為它的適應性。它相容幷包,幾乎所有的外來詞或概念都能納入日常的使用。迄今為止,它比世界上任何一門其他的語言都更具備與不同文化對接的能力,而且它做的事情就是連線。在這種我們稱之為“生活”的集市中,集合了各種自然多樣性,其中這裡採用英語的國家是最多的,這主要歸功於它連線萬物的能力。

這也正是OSS(開源軟體)能夠得以蓬勃發展的原因。任何人都能以任意的方式將它們與各種事物連線在一起。這源自它的開放性:開放的標準、開放的協議、開放的檔案格式和開放的一切。OSS世界裡,沒有什麼事物能夠隱藏。這種開放性使得軟體開發人員能看到他們的前任是如何處理事情的。如果喜歡之前的做法,他們大可沿用,這很棒。他們因此也能找到有用的工具並節省寶貴時間。如果不喜歡,他們也大可以揮灑自如地檢視過去的錯誤並將它們改進。

同時,那些在“大教堂”裡面忙著開發“高階”軟體的開發人員最終卻只能眼睜睜地看著他們的市場被開源世界的開發人員佔據。為什麼呢?因為這種教堂式的軟體開發人員只會為同在“大教堂”裡的人們開發軟體。不管這個“大教堂”是一個公司、社群還是國家,可遲早這些軟體必須要與大教堂之外的軟體進行互動,否則就只有死路一條。

Unix哲學的擁護者,特別是今天的Linux開發人員,敏銳地意識到這一點。例如,與Windows系統共享混合環境的Linux系統會執行Samba,也就是一種與Windows SMB網路服務相容的檔案共享應用程式。具有諷刺意味的是,根據基準測試的結果,Linux的表現實際上要優於執行Windows SMB網路服務的微軟Windows 2000系統 。 大多數Linux發行版都能夠訪問位於其他磁碟分割槽上的Windows檔案系統。那反過來呢?Windows能夠訪問位於其他分割槽的Linux檔案系統嗎?Windows卻做不到這一點。作為閉源的專有系統,它就像一隻常年將頭埋在沙子裡的鴕鳥一樣,只是假裝世界上根本就不存在其他的檔案系統。

到現在為止,你可能感受到了OSS和遵循Unix哲學的軟體之間的一些共通之處。與那些大型“企工業級”(像一些人所認為的)閉源的專用軟體相比,OSS的許多作品看起來確實只是些“小兒科”。畢竟,這些作品通常都是由一些個人獨自開發的,至少在它們的初期階段是這樣。因此,在早期這些作品只是一些典型的小專案,它們雖然缺乏利於市場營銷的閃光點,卻擁有紮紮實實的功能。不過沒關係。請記住在Unix的世界裡,小即是美。

Eric Raymond稱這些作品為“撓到程式設計師癢處”的軟體。這似乎是許多OSS開發人員的共同目標,他們只是希望編寫出他們喜歡的程式。因為日常工作的壓力,他們往往是“背水一戰”,所以沒有太多時間去完成那些花裡胡哨的功能。因此,他們通常都會忽略掉那些營銷人員最愛的、華而不實的“閃光點”,他們注重的是隻做好一件事情,這便意味著他們的作品是精幹實用的應用程式,並確實能夠解決個人的需求。在那些成功的案例中,這些最基本、最行之有效的解決方案可以激發人們的想象力。這正是熱門OSS應用程式誕生的典型過程。

一旦點燃了想象力的火花,OSS開發社群的其他成員就會開始行動,來為這個方案貢獻自己的力量。起初,這個程式會吸引為數不多卻很忠實的追隨者。然後,該軟體最終煥發蓬勃的生機,開始超越它最初的設想。在此期間,數十名程式設計師會把這個“第一個系統”演變成為一個更大更具包容性的“第二個系統”。在撰寫本文時,Linux本身就處於“第二個系統”的階段。它正在享受自己的快樂時光。

顯然,如果有人想將這種個人獨自開發的OSS專案發揚光大,成為風靡一時的軟體熱潮,那他就必須儘早建立一個原型。僅僅對軟體的偉大想法誇誇其談是遠遠不夠的。在開源的世界裡,最受人們尊敬的是那些編寫軟體最初版本的原創者,以及在後來作出重大貢獻的人士 。

如果想要吸引儘可能多的使用者,OSS專案就必須提供適用於多平臺的解決方案。因此好的OSS開發人員就會舍高效率而取可移植性。利用特定計算機上特定硬體功能優勢的軟體走不了太遠,追隨者充其量也不過是那些使用著相同硬體平臺的人們。通過從封閉式專有架構走向開放的架構,程式就可以儘可能地出現在更多的平臺上,從而最大限度地擴充自己的市場潛力。

讓我們來看一下微軟的IE瀏覽器和它在開源世界的競爭對手Mozilla。在撰寫本文時,IE佔據的市場份額要高於Mozilla,最主要的原因在於它是微軟Windows平臺上的主導瀏覽器,並且Windows目前佔據著桌上型電腦市場的最大份額。另一方面,Mozilla能夠執行在Windows和幾乎所有的Linux和Unix平臺上。隨著使用者開始冷靜地對待IE的市場炒作,他們慢慢會發現Mozilla是一個非常好用的瀏覽器,越來越多的人開始選用Mozilla。與此同時,在除Windows之外的平臺上,IE瀏覽器的安裝使用者群並沒有什麼大的增長,因為它缺乏可移植性,人們很難輕鬆地將它移植到其他的系統。如果Mozilla能夠成功地吸引到一半安裝Windows的使用者群的一半,那麼它就能贏得這場比賽。任何能夠獲得一半Windows使用者群青睞的可移植瀏覽器,都會吸引到Linux使用者群中的大多數人。

為了使OSS和介面能夠方便地移植到其他的平臺,採用純文字檔案來儲存資料將大有裨益。這種開放性使得全世界的人可以檢視這些檔案格式,鼓勵人們就其中內容展開有益的辯論。這場辯論最終會形成一種能夠為資料傳輸和儲存所用的開放標準,人們使用它們的廣泛程度要遠超閉源的專有標準。

OpenOffice.org團隊的做法是很能體現這種思路的絕佳例子。他們的檔案格式採用了XML,這是一個很好的選擇。XML是HTML格式的擴充套件集,它是一種Web瀏覽器使用的語言,用來顯示文字、表格等內容。XML檔案可以算作是一種純文字檔案,因為人們可以用如Vi或Windows記事本的一般文字編輯器(而不是文書處理軟體)來編輯它。作為一個行業標準,它也許是結構化互動式運算元據的最佳選擇,不單能作為純文字檔案來使用,也能為純網路訊息所用。毫無疑問,這個格式會隨著時間的推移而進化。隨著越來越多的人關注這些資料檔案,格式中的錯誤和遺漏將無處可藏。這會使得該檔案格式得到加強和改進,比起任何現有的閉原始檔儲存格式,它的表現將會更好。

OpenOffice.org採用純文字檔案當然不是什麼新鮮事。在現實世界中,辦公環境裡一直在使用純文字。商業信函通常是由那些20磅的10號白色信封來傳遞的。這些檔案具有以下特點。

  • 便攜性:信封可在辦公大樓裡或世界各地傳送。可擴充套件機制能夠將它們從一個地方轉移到另一個地方,並在個體和群體之間傳遞。

  • 易於獲取:任何人都可以開啟這個信封。你並不需要從專門的供應商那裡花高價去購買特殊的專有工具來瀏覽裡面的內容。

  • 可供搜尋:檔案可以加上索引,收件人可以根據自己的需要將檔案按照不同機制歸類在不同的檔案櫃裡。人們還能夠採用隨機存取或連續存取的方式得到這些檔案。人們可以搜尋整個文字內容,儘管速度會有些慢。

  • 強大的適應性:在今天或是未來,檔案被儲存和檢索的次數能夠達到數千次。人們完全不需要去升級自己的辦公處理方式來閱讀最新的檔案,或是安裝舊版本以檢視十年前的舊文件。

是的,我們並沒有建議你放棄電腦,重新去使用紙張。紙張仍然是一份為資料開具的死亡證書,其中的理由我在本書的其他地方提到過。然而,資料還面臨另外一種死亡威脅:閉源的專有檔案格式。當儲存的資料採用的是由單一供應商所擁有的,而且是一種人類不可讀的檔案格式,那麼這些資料就存在著巨大的風險,正如祕魯國會議員Edgar David Villanueva Nuñez博士在一封傳送給微軟的信件中指出的那樣。

專有系統和格式的使用都會使得整個國家更為依賴某那些特定的供應商。一旦國家確立了一個使用自由軟體的政策(當然,使用自由軟體還是需要付一些費用的),從一個系統遷移到另一個系統反而會變得更加簡單,因為所有的資料都是採用開放格式來儲存的。

開源軟體需要開放的資料格式。

在OSS開發人員釋出那些供公眾使用的軟體時,他們利用了軟體的槓桿效應。這種槓桿效應是雙向的。首先,開發人員可以在自己的作品中使用其他OSS專案的程式碼。這樣可以節省整體的開發時間,並有助於降低開發成本。其次,釋出給全世界的優質OSS通常也會吸引到其他的開發人員,他們可以利用這個軟體來完成自己的工作,其中的一些作品最終可能會找到一種迴歸到原始作品的方式。所謂“贈人玫瑰,手有餘香”。

有一種做法能夠增加OSS專案成功的機率:使用指令碼來提高槓杆效應和可移植性。雖然軟體世界裡有很多核心的底層編碼人員,可越來越多的人沒有時間或無法盡情地為底層工作。通過為給一兩個流行的指令碼語言提供介面,這會顯著地增強軟體的可用性。

如果這些介面能夠擁有足夠的流行程度的話,它們就會成為OSS社群裡的重要子社群。這些子社群致力於讓人們體驗並擴充這些介面。他們會定期召開使用者組會議和研討會,並且在網上郵件列表裡釋出文章,通常它會成為社群中心,基本上大多數圍繞著這個流行介面而展開的活動都是由這個中心來召集。

開源社群裡有兩個這樣的例子,Perl社群和CVS(Concurrent Versions System,一種版本控制系統)社群。在OSS社群內, CVS吸引了不少人。因為幾乎所有的CVS命令都可以在指令碼中使用,於是就出現了眾多工具和外掛,它們通過新穎的、有趣的方式與CVS命令相結合。CVS的原作者肯定沒有預料到人們能夠開發出這些奇妙的用途。

CVS特意避免了CUI的使用。只要傳遞的引數正確,每一條CVS命令都可以在命令列中執行。這催生出了更多的CVS外掛。以基本的CVS命令如checkout、update和commit為基礎,構建那些為提高CVS效能而開發的整合性工具。眾多使用這些命令的外掛通常都擁有CUI,但基本的CVS命令卻沒有。這正是CVS得以蓬勃發展的主要原因之一。

作為開源的指令碼工具,Perl曾因晦澀難用而惡評如潮。它的功能比普通的Unix指令碼如Bourne和Korn Shell還要強大,非常善於與其他軟體互動。幾乎所有的Perl程式都能充當過濾器。事實上,它的全稱Practical Extraction and Report Language(實用性摘錄與報告語言)就恰恰說明了Perl的設計開發宗旨。當一個程式從某個地方提取、修改並報告資訊(即它的“輸出結果”)的時候,它充當的正是過濾器的角色。 因為它的可擴充套件性,所以Perl的接受程度也在與日俱增。在這門極其不好用的語言中,黑客們(指的是這個詞的褒義方面)彷彿找到了一片名副其實的樂土,他們盡情地新增程式碼庫檔案,以讓它適應各種各樣的情況。今天,你可以找到能夠處理各種事物的Perl模組,從複雜的數學內容、資料庫開發到為全球資訊網所用的CGI指令碼。

這一點兒都不奇怪,可以說Perl是關於Unix哲學中那條次要準則“更壞就是更好”的絕佳例子——它完美地詮釋了為什麼一個不夠好的應用(如Perl)反而比那些足夠好的應用(如Smalltalk)有著更高的生存機率。幾乎沒人會否認Perl是一門古怪的有著可怕語法的程式語言,而且誰也都沒有想到Perl會大獲成功。 讀到這裡,你應該不難發現,OSS往往遵循著Unix哲學。OSS很適合這種早期Unix開發人員悉心呵護的“集市”式開發模式,而今天的Linux開發人員也都早已全面接受這一風格。不過有別於Unix哲學更加側重設計方法的特點,開源社群中很多令人信服的作品卻表明他們更注重軟體的開發過程。用一句老話來形容,Unix哲學與開源開發模式的結合有如天作之合,互相促進,相得益彰。

開源社群已取得過的另外一個重大進展的領域便是市場營銷。在當今競爭激烈的計算世界中,推出擁有良好設計原則的高質量軟體是不夠的。開發者必須大聲地向全世界宣告自己的成就。“酒香不怕巷子深”是行不通的,如果無人知曉,就算產品再好也沒有什麼用。它會逐漸消失或默默無聞地湮滅,就像是一件多年不見天日的珍寶那樣。

由於缺乏紮實的營銷策略,許多優秀的Unix程式已經消失得無影無蹤。如果我記憶超群的話,我說不定能說出幾個程式的名字。明白我的言外之意了吧?

微軟也許比任何其他公司都更理解營銷策略的價值所在。這也正是為什麼這家公司一直都很成功的主要原因。微軟已經推出了很多個熱門應用,但它最強的地方在於有能力說服大家相信它的軟體是這個星球上最好的產品,而不管實際的質量究竟如何。

對於微軟的軟體,我最不喜歡的一點就是,那是在一個封閉的大教堂式的開發環境中產生的。微軟擁有一些非常有才華的人,他們編寫了一些很優秀的軟體。但在全球的技術創新方面,微軟並不是一枝獨秀。這個世界上還有很多優秀的人才,他們不是為微軟工作,也同樣編寫了一些非常好的軟體。因為它的大教堂開發風格,所以微軟的開發人員基本都“與世隔絕”將自己與其他人分隔開來。他們無法充分利用軟體的槓桿效應,因為沒有任何可以和其他人分享的東西,反過來別人也無法改善他們的軟體來作為分享的回報。因此,大多數Windows作業系統的創新工作都是由微軟內部的開發人員來完成的,於是這也就被他們的開發視野所限制了。另一方面,開源社群的開發人員則可以從更大規模的開源社群去吸取好的想法。純粹論規模的話,開源社群完勝微軟這種單一的內部開發社群。儘管微軟有著高超的營銷技巧,可這改變不了它的衰敗命運。

在我撰寫本書時,Linux開發社群(據說它已經擁有了超過一百萬的開發人員)已開始進軍桌面環境領域,長期以來這被視作是微軟的大本營,並且大家都認為任何外部人員都難以逾越微軟在這個方面的成就。可就在短短的18個月裡,Gnome的開發人員(Linux上流行的一個類似於Windows的應用環境)卻將Linux從一個只具有Unix命令列的使用者介面平臺轉變成了與Window 95功能相當的環境。要知道微軟可是花了五年多才完成了這種從MS-DOS到Windows 3.1再到Windows 95的轉變。

我們無法想像微軟如何才能跟上這種創新的速度,這樣的表現簡直無人能敵。KDE社群的規模甚至可能比Gnome社群的規模還要大,它早已證明自己相當有能力去創造出具備商業品質的桌面環境軟體。除非微軟能夠重新改變自己的開發模式,否則它的Windows作業系統早晚會成為下一個OpenVMS。(OpenVMS是典型的優秀小團隊開發優秀大型軟體的例子。)

微軟曾經漠視已經忽略了Linux和開源社群近十年。然後,他們卻突然開始嘲笑Linux,聲稱這只是“一個伺服器系統”,並不適合作為桌面環境來使用。現在,微軟已經孤注一擲地投入到桌面領域的戰爭,而KDE的擁躉們卻佔據了上風。

甘地是對的嗎?這將由市場來決定。

在結束本章之前,我想討論一個問題,這個問題自2001年9月11日美國世貿中心和五角大樓遭受恐怖分子襲擊以來一直縈繞在每個人心目中,而且也是後現代生活和計算機世界的重要方面,那就是:安全。

自那一天開始,安全問題以這樣或那樣的方式駐留在每個人的腦海中。這種共通的安全意識也已經“植入”進電腦科學家的頭腦。也許,Unix哲學和開源以一種奇特的方式掌握著解決此問題的關鍵。

在資訊保安和加密技術的世界裡,有些人堅持認為想要提供最高階別的安全性,開發人員就必須隱藏一切,這是未雨綢繆的行為。早期Unix開發人員的做法卻與此大相徑庭。他們並沒有隱藏用來加密的密碼資料和演算法,而是選擇對所有人公開所有的資訊。任何人都可以自由地嘗試破解Unix的加密演算法,而且還能夠得到所有相關的工具。在共享的精神作用下,這些找到破解Unix口令檔案的人會把他們的解決方案提交給最初的開發者,這些開發者就可以在未來版本中納入這些加密演算法的解決方案。多年來,人們反覆地嘗試去破解Unix的密碼機制,其中有一些嘗試頗為成功,這使得Unix逐漸成長為更安全的系統。如果沒有別人的幫助,單憑最初的開發人員可無法達到這樣的效果。

同時,那些試圖通過封閉原始碼來確保安全性的系統卻一敗塗地。比如像微軟這樣將自己的原始碼看得死死的公司,就只能對Windows NT系統的安全漏洞採取亡羊補牢的方式。

從某種意義上說,安全是一種數字遊戲,閉源系統的勝算非常小。這個世界每出現一個惡意黑客(壞傢伙),對應也會有大概100倍甚至1 000倍之多的白客。問題是,閉源的公司只負擔得起僱用其中10個白客來看管他們的專有原始碼。而與此同時,在開源的世界裡,比壞人多1 000倍的白客卻都可以檢視原始碼來解決安全問題。閉源的公司,不管有多大,願意花多少錢,能夠僱用的白客數量也遠遠比不上開源社群裡白客的數量。

開源軟體與閉源專有軟體的比較中蘊含著深刻的道理。有這麼多人盯著OSS的安全機制,OSS最終會證明這兩個系統裡面哪一個才是更為安全的系統。此外,隨著個人、公司和國家越來越瞭解資訊保安工作中對軟體進行稽核的重要性,很明顯,唯一值得信賴的安全軟體就是那款你擁有原始碼的軟體。

在某些時候,每個人都得自行決定是否要信任那些維護資訊保安的軟體生產商。對軟體供應商,每個人都有著自己在道德和倫理上的批判標準。我們能夠完全充分信任那個供應商嗎?當你的財務狀況、信譽、個體或國家安全受到威脅時,唯一可以接受的解決方案就是可以逐行驗證程式碼的軟體。

我們生活的世界裡同時擁有開放和封閉的社會。封閉社會的運作模式就像是“大教堂”式的開發環境,原始碼被層層封裝,並且只能由少數擁有特權的人來決定哪些該留下、哪些該捨棄。在這樣的社會裡,新觀念的傳播極其緩慢。有效安全機制的開發節奏跟不上層出不窮的新威脅,新機制的開發週期可能需要數年。

這個世界的開放性社會看起來就像OSS社群一樣雜亂無章,但裡面也充滿了各種天馬行空的想象。開源社群的人們非常具有創造力,關於新技術尤其是安全技術的想法層出不窮。開放性社會能夠迅速提出創新想法,確保在短時間內解除各種威脅。就像Unix密碼演算法的開發人員一樣,讓系統處於易於攻擊的狀態反而最終會成就最高階別的安全水準。

相關文章