壓縮大戰真相

謹以此文向那些無私的天才程序員們致敬。

此文章轉載自2004.10的《大眾軟件》,原作者為 廣東 GZ
前言--王者歸來?
等待足足兩年之久,壓縮霸主WinZip終於在萬眾期待下發佈了9.0正式版。全世界自然一片沸騰,在世界各大知名下載網站中,WinZip9.0再次帶起下載狂潮。然而此時國內並沒有王者回歸的歡呼,卻一致委婉或直接地表達出失望地情緒,而下載更新的用戶也寥寥無幾,這絕對是一道國內獨特的風景,它不禁讓人想問,為什麼?從各種評測報告看,因為不支持RAR格式,所以兼容性更佳的WinRAR3.30全面超越固步自封的WinZip9.0--原來這就是國內用戶牴觸WinZip9.0的唯一理由。

蒼天已死,黃天當立。這是國內輿論草率的結論。之所以說草率,是因為甚至都沒有出現反面聲音的媒體,這絕對不是一個成熟正常的氛圍。正是這種一邊倒的跟風導致了大量用戶極端的心態,於是牽強附會、人云亦云和以訛傳訛的聲音充斥其間。這不由得讓人陷入深思,事實上,看似壓縮工具之爭的表面下深藏的是壓縮格式之爭。RAR格式即將或者己經取代了ZIP格式嗎?不能僅僅從兩者的技術表現和統計數據去回答這個問題,計算機數據壓縮格式的發展歷程是非常獨特的,它的王者之選帶有傳奇的歷史烙印,並一直持續產生著決定性的影響。要正確解答這個問題就必須去瞭解有關數據壓縮的歷史,任何試圖避開歷史環境而做出的結論都是輕率的。因此請不妨先認識數據壓縮的歷史本來,再來決定這些壓縮工具的前程是非。

LZ算法--ZIP與RAR共祖同源
要講壓縮的歷史,就不可不提LZ算法,這是一種有關數據壓縮的算法,何為數據壓縮?從本質上講,數據壓縮的目的就是要消除信息中的冗餘。早在LZ算法出現之前,研究員們從理論上探討了壓縮算法的數學基礎及模型基礎,同時也在這些基礎上研究出了一些編碼方法,其中的Shannon-Fano編碼和Huffman編碼非常有影響力。但這些編碼,包括後來發展出的「算術編碼」,都無法成為理想的編碼方法--因為它們無法在編碼效率和編碼速度上同時滿足日益增長的壓縮需求。這種情況在LZ算法出現時等到瞭解決。

Shannon編碼
1948年貝爾實驗室的Shannon發表的論文《通信的數學理論》中指出,任何信息都存在冗餘,冗餘大小與信息中每個符號的出現概率或者說不確定性有關。Shannon借鑑了熱力學的概念,把信息中排除了冗餘後的平均信息量成為信息熵,並給出了計算信息熵的數學表達式。這篇偉大的論文後來被譽為信息論的開山之作,信息熵同時也奠定了所有數據壓縮算法的理論基礎。利用信息熵公式,人們可以計算出信息編碼的極限。不過完備的理論並不等於實用的技術,要將理論變為實踐,編碼方法是極為重要的一步。1948年,Shannon在提出信息熵理論的同時,事實上也給出了一種簡單的編碼方法--Shannon編碼。1952年,麻省理工學院的R.M.Fano又進一步提出了Fano編碼。兩者後來被稱為Shannon-Fano編碼,這種早期的編碼方法揭示了變長的編碼方法揭示了變長編碼的基本規律,也也確實可以取得一定的壓縮效果,但離真正實用的壓縮算法還相去甚遠。

Huffman編碼
Huffman編碼是第一個真正實用的編碼方法,由D.A.Huffman在1952年提出。當時Huffman是麻省理工學院的一名學生,據說為了向老師證明自己可以不參加某門功課的期末考試,他設計了這個看似簡單卻影響深遠的編碼方法。Huffman編碼效率高,運算速度快,實現方式靈活,從20世紀60年代直到現在,在數據壓縮領域得到了廣泛的應用。而20世紀80年代初,Huffman編碼又出現在CP/M和DOS系統中,即使在今天,在許多知名的壓縮工具和壓縮算法裡(如WinZip、gzip和JPEG),也都有Huffman編碼的身影。不過,Huffman編碼所得的編碼長度只是對信息熵計算結果的一種近似,並不能真正逼近信息熵的極限。Huffman編碼影響力很深遠,至今還在計算機大專學生必修課程《數據結構》中被提及。

LZ是其發明者J.Ziv和A.Lempel兩個猶太人姓氏的縮寫。此二人於1977年發表題為《順序數據壓縮的一個通用算法》的論文,論文中描述的算法被後人稱為LZ77算法。1978年,二人又發表了該論文的續篇,描述了後來被命名為LZ78的壓縮算法。其實LZ系列的算法並不新鮮,其中既沒有高深的理論背景,也沒有複雜的數學公式。它們只是簡單的延續了千百年來人們對字典的追崇和喜好,並用一種極為巧妙的方式將字典技術運用於通用數據壓縮領域。簡單的說如果你習慣用字典中的頁碼和行號代替文章中的每個單詞的時候,那實際上你已經掌握了LZ系列算法的真諦,因此這類編碼算法被統稱為Dictionarycoders。

在1984年,TerryWelch發表論文描述了他在Sperry研究中心(現在Unisys公司的一部分)的研究成果,也就是後來非常有名的LZW算法。它實質上是LZ78算法的一個變種,但被認為是一個獨立的編碼算法。LZW繼承了LZ77和LZ78壓縮效果好、速度快的優點,而且在算法描述上更容易被人們接受,實現也相對簡單。而在其後發展出來的各式各樣的字典編碼算法,基本上都是這三種編碼算法的分支或變體。也就是說LZ77、LZ78和LZW是字典編碼中最基礎的3種編碼算法。今天我們熟悉的PKZIP、WinZip、WinRAR、gzip等壓縮工具都是LZ系列算法的受益者,甚至連PGP這樣的加密文件格式也選擇了LZ系列算法作為其數據壓縮的標準。

字典式編碼不但在壓縮效果上大大超過了Huffman編碼,而且在實現上,壓縮和解壓縮的速度也異常驚人。於是LZ系列算法的優越性很快就在數據壓縮領域裡體現出來,使用LZ系列算法的工具軟件數量呈爆炸式增長。UNIX系統上最先出現了使用LZW算法的Compress程序,該程序性能優良,很快成為UNIX世界的壓縮程序標準。緊隨其後的是MS-DOS環境下的ARC程序,還有像PKARC等仿製品。LZ78和LZW一時間幾乎統治了UNIX和DOS兩大平台。然而隨著時間流逝,事情變得耐人尋味。目前為止佔據個人用戶計算機的主流壓縮工具幾乎都採用LZ77變種算法,為什麼?

叛逆鬥士的勝利--ZIP格式誕生
為什麼技術實現上更為優秀的LZ78和LZW沒有成為最主流的算法?LZ77與它們有什麼不同?答案是--專利權。

相對於LZ77完全沒有專利限制來說,LZ78在美國稍稍涉及到一些專利禁止區,而LZW正像上文所說的專利權最終歸屬於Unisys公司。因此直接應用LZ78的算法可能會帶來意想不到的麻煩,而所有使用LZW算法(哪怕是他的變體)的人都要獲得Unisys公司的專利許可。這種專利限制是相當廣泛的,例如GIF圖像格式使用了LZW算法,那麼所有開發GIF編碼/解碼器的人都必須要有LZW專利使用許可,這意味著繳納大筆的專利費。

在DOS年代由於計算機存儲介質容量的微小,個人用戶對數據壓縮軟件的渴望是現在的用戶無法想像的。例如在1984年,個人計算機的標配不過是容量360kB的5.25寸軟盤而已,如果個人能將數據壓縮數倍後存儲,不啻於節省了一大筆錢。這種渴望在1988年時達到了頂峰,這正是互聯網剛剛形成雛形的年代,網絡數據交換開始出現。當時最流行的是使用電話線撥號登錄別人在家裡搭建的服務平台--BBS系統,當時中國也曾有幾十個這樣的BBS存在,比如水木清華BBS。這種方式不但可以傳遞文本信息,也可由用戶上傳文件到站點的計算機以供其他用戶下載。不過由於電話線的接入速度慢的可憐,那時的接入標準僅僅是14.4kbit/s,通過BBS傳輸稍大一點的文件就叫人萬分痛苦。於是數據壓縮軟件就成為了BBS用戶一項必須的工具還記得上文提到1985年SEA公司開發的MS-DOS環境下第一個應用LZW算法的ARC壓縮軟件嗎?它是當時MS-DOS下統治性的壓縮軟件。從技術角度來說ARC確實不錯,但使用了專利LZW算法的ARC當然是標準的商業軟件,使用這種軟件工作就必須付費。不過當時許多玩家根本買不起ARC軟件,順便說一句題外話,那時大多PC玩家基本都沒什麼富裕的錢,事實上個人計算機本身的發展就是被窮玩家精打細算所推動。不過個人計算機從誕生之日起就充滿了叛逆、自由的精神,這也是推動整個個人計算機世界前行的主要動力。此時一個年輕的程序員出現並試圖改變壓縮世界,這個人叫Phillip W.Katz(菲利普·卡茲)。

20世紀七八十年代出售軟件的方式和現在截然不同,以ARC軟件來說,它不僅包括了一份EXE可執行文件,還包括它的C語言源代碼。經常混跡於BBS上的菲利普·卡茲同樣買不起ARC,於是他自己將ARC的C語言源代碼進行複製並用彙編語言重寫,並將這個壓縮工具稱作PKARC,這個程序自然與ARC完全兼容,而且由於使用彙編使得速度較ARC更快.在當時的計算機世界裡這是一種很普遍的現象,並沒有程序員認為這種行為不對,甚至只要不與自己衝突,被改寫者通常也不在乎.不過這次不太一樣,菲利普·卡茲不僅僅是自己和朋友用,而是將這個軟件以非強迫性註冊的共享軟件形式向他人發放,但即使是不註冊,一樣可以毫無限制地使用下去,大批ARC用戶自然也就轉而使用菲利普·卡茲的軟件.SEA其實不是什麼大企業,它只是個3人起家的小公司,當然無法接受這種毀滅性打擊.以現在的眼光看來,最初SEA的方式是溫和的,它接洽菲利普·卡茲並希望通過授權的方式將PKARC納入旗下,然而並不認為自己有什麼過錯的菲利普·卡茲一口拒絕,他不想讓PKARC成為商業軟件,他製作這個工具的初衷並不是為了賺錢.最終菲利普·卡茲被SEA以侵犯ARC壓縮格式編碼算法的罪名告上了法庭,並輸掉了官司.叛逆倔強的卡茲在敗訴後依然拒絕將PKARC授權給SEA公司,而選擇了支付法律費用和停止發放PKARC。

這場官司對菲利普·卡茲的人生觀和信念影響巨大,追求自由平等的精神並不意味著盲目和法律對抗,試圖劫富濟貧的少年俠客行為只能逞一時快意,實質上幫助不了任何人。在官司的進行中,菲利普·卡茲一直在持續開發PKARC的後續產品PKPRC,敗訴後菲利普·卡茲決定將PKPRC完全重寫。很顯然,這次再也不能去觸犯任何編碼算法的專利權了,從3個基本編碼算法來衍生自己的算法是必然的,於是去掉有專利權的LZW和LZ78,剩下的就只有LZ77。也許是被激怒後帶來了驚人的動力,只用了幾週的時間菲利普·卡茲就創造出一個全新的壓縮編碼算法,該算法完美地結合LZ77和Huffman編碼,也就是後來大名鼎鼎的DEFLATE算法了。新壓縮軟件被命名為PKZIP,而其文件格式擴展名叫作「.zip」。PKZIP可將多個文件壓縮到一個文件中,無論壓縮比、壓縮速度都全面超過了商業軟件ARC。菲利普·卡茲將PKZIP作為自由軟件免費發放,使其如野火般在全美各大BBS上蔓延開來,用戶以幾何級數增長,遭受毀滅性打擊的SEA公司半年內就無聲無息。這段故事最後演變為用自由軟件打敗商業軟件的傳奇,菲利普·卡茲更是成為充滿幻想的年輕程序員心中十步殺一人的偶像。

然而事情如果僅僅到此為止,那麼這也不過是菲利普·卡茲為私人恩怨而快意恩仇的行為,未必能得到後人的真正尊重。不過他做出了一個讓所有計算機用戶都收益無窮的舉動,那就是宣佈開放ZIP格式,任何人都可以自由使用ZIP編碼算法而不需要繳納任何專利費用。這個決定最終改變了壓縮的世界,使得通用數據無損壓縮領域再無法出現壟斷的商業巨鱷,真正意義上幫助了每個需要壓縮的計算機用戶。憑藉這個無私的行為,菲利普·卡茲真正成為他想成為的英雄。

群雄逐鹿的結局--WinZip加冕王者
在DOS時代,ZIP格式和它的工具PKZIP並沒有成為壓縮世界的王者。雖然ZIP格式源於其開放性而在BBS上逐漸成為主流,不過當時的BBS網絡環境仍然只屬於少數PC玩家。由於CPU運行速度與存儲硬件容量的有限,當時個人計算機總是歡迎錙銖必計的壓縮軟件,因此程序員們也在不懈追求,開發出更快更好的編碼算法與壓縮工具。1988年到1995年堪稱壓縮世界的黃金時代,壓縮世界處於群雄逐鹿的亂戰之中,與PKZIP具有相同影響力的還有LHA(壓縮格式為LZH、LHA)和ARJ(壓縮格式為ARJ)。

歷史遺留格式:LHA
1988年除PKZIP外,另一個重要的壓縮工具LHA也誕生了。它的原始名字叫LHArc,由HaruyasuYoshizaki所開發,同樣是免費軟件。較之PKZIP,LHA的優勢在於壓縮率更高,而且跨平台性支持更好,因此成為日本最流行的壓縮軟件。不過在西方它也同樣很受歡迎,大名鼎鼎的idSoftware就是使用LHA來壓縮他們早期遊戲的安裝文件,也就是DOOM。即使現在LHA已經不再流行,但LHA壓縮格式文件仍有不少應用,例如我們經常升級的BIOS文件,AWARD公司使用的就是LHA壓縮,而在日本的網站更是隨處可見。

歷史遺留格式:ARJ
1990年,Robert K.Jung開發出一個新的壓縮工具,並將其命名為ARJ(Archiver RobertJung)。這是一個模仿PKZIP之作,與PKZIP極為相似。不過ARJ確實非常優秀,不僅壓縮率高人一等,在功能應用上也明顯勝出同類產品一籌。例如它是第一個實現分卷壓縮的壓縮工具,這對於當時以軟盤為主要存儲方式的PC來說簡直就是雪中送炭。ARJ很快憑藉著自己的實力佔據一席之地,並逐漸成為DOS下最受歡迎的壓縮工具之一。

如果計算機的操作系統一直是DOS,那麼壓縮工具有可能會三分天下。然而在1995年,改變個人計算機世界的事情出現了,那就是Win95的誕生。沒有了DOS系統的艱澀難懂後,人們發現個人計算機並不神秘,它的使用原來可以這麼簡單。隨即PC真正開始普及,普通人成為了主要用戶。然而另一方面,大多數從DOS年代過來的程序員高傲地拒絕著Win95,從他們的級數眼光來看,這個動輒崩潰的平台由於底層過於封鎖,完全限制了編程的發揮,執行效率與DOS相比也是一塌糊塗。因此Win95發佈的最初幾年裡,並沒有出現太多應用軟件,程序員們仍然在堅持為DOS編寫軟件。此時隨著計算機硬件的發展,圖形網站逐漸代替了文字BBS,普通人不用怎麼學習也能輕鬆上網,大量用戶湧入了這個虛擬世界。矛盾自然而然就產生了:大量沒有受過訓練的Win95用戶拿著DOS下的壓縮工具不知所措,而程序員們卻沒有開發Windows平台壓縮工具的想法。於是一個原來默默無名壓縮軟件開始聲名鵲起,它就是WinZip。

早在1991年微軟髮布Win3.0不久,共享軟件WinZip1.0就誕生了。雖然它號稱是WindowsZIP,但實際上跟Win3.0的本質一樣,仍是個外殼程序,它不過是在調用DOS下的工具軟件而已。很難瞭解當時WinZip軟件作者的想法,也許只能歸於遠見卓識,在大多數程序員都在開發自己的壓縮編碼算法的時候,他選擇了使用免費的ZIP編碼算法然後做了一個壓縮工具外殼。當時DOS才不過發展到5.0版本,放棄一個主要的平台而去做一個附屬平台的壓縮工具,最主要還是沒有自己的編碼算法,其前途顯然是黯淡的。然而到了1995年,這種做法得到了回報,在Win95發佈後它馬上就推出了相應版本,是當時為數不多的Windows應用工具。實質上此時WinZip仍然是個外殼工具,它還是通過調用DOS程序來解決問題,不過由於前幾年積累下的Windows開發經驗,使其圖形界面在當時做得近乎完美。甚至後來微軟在業界的開發會上宣稱,Windows應用程序應該怎麼做--很簡單,像WinZip那樣就行。用戶發現WinZip界面是如此精美,操作時如此的親切友好,完全不用去記什麼命令參數,只需要鼠標點幾下即可,神秘的壓縮原來如此簡單,更有趣的是它居然沒有一個競爭者,此時的同行還不屑與其競爭。誇張的說,WinZip只用了眨眼的功夫就佔據了所有的PC,等到其他壓縮工具醒悟過來紛紛開發Windows版本或Windows外殼時,由於缺乏開發經驗已經遠遠落後。等到WinZip推出其真正的Windows應用程序6.x版本時,已塵埃落定,沒有自己編碼算法的WinZip加冕壓縮工具的王者。以後的大多數用戶都是通過WinZip認識到ZIP格式,以至於不瞭解歷史的用戶甚至以為ZIP就等於winZip,是WinZip的成功導致了ZIP格式的流行,事實上恰好相反。

它來自於江湖--RAR離奇崛起
不妨先來思考一個問題,為什麼輿論不指責WinZip9.0不支持WinACE的ACE格式,不指責它不支持WinIMP的IMP格式......唯獨不支持WinRAR的RAR格式就橫加指責呢?答案只能是WinZip不得不支持RAR格式。為什麼不得不支持RAR格式呢?答案只能是RAR格式已經成為主流,不支持意味著消亡。這真是一個有趣的推論,2002年時中國的IT媒體還將WinRAR歸為非主流壓縮軟件,而不到兩年的時間RAR格式就變成了主流格式,簡直就是個奇蹟!然而這真的是事實嗎?

我們知道ZIP格式成為最主流的原因並不是因為WinZip的出現,而是因為ZIP格式的開放性。ZIP與WinZip之間不過是機緣聚會,即使沒有WinZip也必將另外出現類似的「xxZIP」共享軟件。ZIP格式的開放從根本上避免了數據壓縮世界形成壟斷,任何一個消費者總會優先選擇免費自由格式的壓縮工具,更何況這個免費格式是如此優秀,這使得WinZip之後的任何壓縮工具只能先支持ZIP格式站住腳,然後再去推廣它不開放編碼算法的自有壓縮格式。因此最後的結論是不開放的商業壓縮格式不可能取代免費ZIP格式成為主流,而RAR同ACE、IMP等一樣都是不開放的格式,它也不可能成為主流。這個結論顯然會刺激某些人的神經,一定有人會指出事實勝於雄辯,讓筆者上網去看看到處的RAR壓縮文件。筆者並不否認這是某種事實,不過仍然會堅持RAR不是主流。

在任何一個國外知名的下載王者,如download.com等,都不可能找到RAR壓縮文件,或者去國外任何一家知名商業網站,其下載資源提供的也只有ZIP壓縮包。是的,甚至再國外比較規範的個人網站上,都只提供ZIP打包的文件下載,而不會有其他類型的壓縮文件。國內情況會不一樣嗎?那麼去新浪、搜狐、驅動之家這些大的門戶網站或正規的商業網站搜索,同樣全部是提供ZIP壓縮文件的下載,卻根本沒有RAR文件。並不是這些網站刻意偏愛ZIP,根本原因還是在於免費。發佈ZIP壓縮文件並不用繳納任何費用,而如果發佈其他商業壓縮格式文件,網站就要向其格式擁有者繳納專利費用,這種企業所需繳納的費用不是個人註冊費用可以相提並論的。由此帶來的疑惑是,在中國確實有許多網站只提供RAR壓縮文件的下載,那麼他們都甘心交錢替WinRAR宣傳嗎?同樣時不開放算法的商業格式,他們為什麼不選擇壓縮率更高功能更加全面的ACE、IMP等格式呢?

首先筆者不排除這種情況,即可能有特別熱愛RAR格式,依法繳費然後再幫著推廣的網站,不過可以肯定即使有也為數不多。大多數這樣的網站非法發佈RAR格式文件,區別僅僅在於自己知道或不知道,不過WinRAR公司難道就坐視不管嗎?其實道理很明顯,沒有比推廣壓縮格式更容易佔據壓縮工具市場份額的手段了。2002年WinRAR尚未有中國區代理,不過積極開拓海外市場的WinRAR已經意識到,許多中國網站上也流行著RAR壓縮文件,於是一時間突然有許多網站聲明,下載資源將由RAR壓縮包全部改用ZIP包發佈,但在WinRAR中國區代理上任後,短短的幾個月這些網站又都恢復發佈RAR壓縮文件,而且使用RAR格式發佈資源的網站日益增多。事實已經清楚,非正規網站提供下載資源的確實都是RAR壓縮文件,不過為什麼它們都選擇RAR而不是其他格式,答案說出來熟悉的朋友馬上就會明白--ODAY。

2001到2002年中國的寬帶網建設一躍成為世界前列,寬帶網的發展使得資源的獲取變得極其簡單。幾乎國內有名的資源站點和論壇都出現在此期間,它們無一例外提供的都是RAR格式資源。那麼它們的資源又來自哪裡?基本都來自於ODAY,所有宣稱RAR格式佔據網絡主流的人都或刻意或無意地迴避了這個事實。ODAY是個完全無影無形的破解組織,但他們發佈的資源都有同一個特點,就是統一使用RAR格式打包,如此一來發佈這些資源的網站要提供ZIP包下載則必須先解開RAR包,然後再將資源重新壓縮為ZIP包,最終選擇當然是直接提供RAR壓縮包下載了,這就是RAR格式開始流行的根本原因。於是奇怪的事情出現了:免費開放的壓縮格式得到所有正規商業公司的支持,而收費非開放的壓縮格式卻崛起於自有破解的地下組織。一個微妙的形勢擺在WinRAR面前,它再流行也始終不會去控告違法發佈者,那其實是它生存的根源。一個尖銳的問題也擺在用戶面前,在合法的前提下你會選擇哪種壓縮格式?其實是根本就沒有選擇。

因此不能否認RAR壓縮文件在網絡上確實到處可見,但既然它來自於江湖,就註定無法真正成為主流壓縮格式。

ZIP的真正危機--AES加密
WinZip9.0究竟帶來了什麼?根本的變化其實只有一個,那就是支持AES 128位和256位高級加密,事實上這也是WinZip9.0遲到兩年的主要原因,而這個特性也許會成為WinZip所面臨的最大危機。

上文已經交待,WinZip並沒有自己的編碼算法,ZIP格式是屬於PKZIP的(實屬PKWare公司)。一直以來WinZip技術上的發展都緊跟著PKWare亦步亦趨,從而就沒有也不可能主動去修改ZIP的編碼算法。WinZip9.0中新加入的EnhancedDeflate算法實際仍屬於PKWare公司,並且是開放免費的。不過使用WinZip9.0壓縮的ZIP文件,其他支持ZIP格式的壓縮工具都能正確解壓嗎?答案讓人遺憾,如果你使用了WinZip9.0的AES加密,那麼你只能使用WinZip9.0才能解壓。

與成熟的商業壓縮格式相比,ZIP格式有一個致命缺陷就是缺乏加解密算法,僅憑其可憐的口令密碼保護功能根本無法保障文件的安全。為ZIP格式增加加密算法成為必然之路,然而此時PKWare與WinZip的矛盾終於凸現。2002年,PKWare首先開發了基於證書的安全措施和256位AES加密算法的PKZIP5.0,但隨後2003年出現的WinZip9Beta中採用的256位AES加密算法(但沒有證書)卻證明無法與之兼容。WinZip9向媒體說明由於PKWare向WinZip保留了算法的技術細節而不能與之兼容,並且表示他們一直期待能夠完全兼容,但PKWare並不給予合作而最終導致兩者不兼容。PKWare首席技術官JimPeterson則辯稱,基於證書的加密技術目前還正在研製,之所以沒有公佈是因為還要在其中增加很多功能。WinZip對上述解釋表示懷疑,因為除了加密細節沒有公佈,連證書的細節也不得而知,而事實上在PKZIP5.0 forWindows中這項技術已經使用了一年,PKWare無非是要吃獨食,他們違背了自己宣稱的ZIP標準開放性。不管事情的真相到底是什麼,WinZip為此付出了兩年的時間,最終結局仍是兩者分道揚鑣,各自開發自己的加密算法,而ZIP格式從誕生以來也首次走到了十字路口。

因此AES加密將是一柄雙刃劍,也許能為WinZip打開一片商業的天空,也許帶來潛伏的危機。這取決於最終應用環境是支持它還是PKWare,抑或是這紛爭中崛起的第三者,這是壓縮王者的最大危機。

壓縮工具之選--合適才是最好的
瞭解了足夠的壓縮世界的歷史,再回到壓縮工具本身來吧。現在的事實是網絡上確實存在許多RAR壓縮文件,當然使用WinRAR去解壓是第一選擇,不過是否因為WinRAR也支持ZIP格式就可完全拋棄WinZip?筆者的答案是WinRAR不能完全替代WinZip。即使拋開歷史完全從技術上分析,RAR實際上仍處於劣勢。

首先來看兩者的性能,壓縮工具的性能決定於它們的算法。事實上WinZip和WinRAR使用的都是LZ77算法的變體,因此兩者基本上不可能出現根本性的性能差距,它們的比較就是看誰在壓縮率和工作效率之間取得更佳的平衡性。眾所周知RAR的壓縮率要略高於ZIP,但這是以犧牲工作效率換取的,這種犧牲值不值得呢?筆者隨意做了一個測試,由於太小的文件根本無法察覺,因此測試對像是一個615.6MB的ISO文件,機器配置位P4 1.6A,512MBRAM。結果WinRAR3.30在一般壓縮下,使用了30分20秒將文件壓縮為607.6MB的RAR文件,而WinZip9.0在一般壓縮下,使用了2分40秒將文件壓縮為609.2MB的ZIP文件。解壓的結果與壓縮類似,千分之二的壓縮率差距卻使用了數十倍的時間,顯然ZIP算法的壓縮率與工作效率之間的平衡性處理得更好,也就是說性能更優。其實RAR算法在壓縮率與工作效率之間的處理也是非常聰明明的,其壓縮小文件時損失不易察覺的幾秒鐘換來總是比ZIP略高一點的壓縮率,這給用戶留下了極好的印象。

雖然我們證明了ZIP算法的性能更優,不過WinZip不能支持RAR,而WinRAR卻能支持ZIP,為什麼不保留兼容性更佳的WinRAR?既然RAR是非開放的格式,別人沒有它的算法,那麼支持解壓RAR是如何做到的呢?任何支持RAR格式的壓縮工具都帶有一個UNRAR.dll文件,這個文件是WinRAR提供的解壓庫,也就是說其實仍然是WinRAR自己在解壓。像這樣通過外部調用來支持的格式在WinZip中只有3種,就是上文提到過的ARC、ARJ、LHA,全部是歷史遺留。但WinZip顯然不會這樣去支持RAR格式,在它眼裡RAR和ACE、IMP等非公開格式並沒有根本上的區別。所以並不是WinZip高傲自大,也不是它固步自封,除非RAR開放算法,否則WinZip是不會調用支持RAR的,替別人推廣壓縮格式不如將命運掌握在自己手上。再回到兼容性上,實際上查看一下就會發現,WinZip支持超過22種格式,遠超過WinRAR支持的12種,就算勉強算上WinZip不支持RAR格式,也只能說兩者在這方面不分上下。

由於ZIP格式的開放性所帶來的優勢也必須考慮。例如微軟操作系統從WinMe開始內置支持ZIP格式,ZIP文件被當作一個文件夾操作,別的壓縮格式就必須安裝壓縮工具解壓。又如GBA遊戲機的模擬器VBA內置支持ZIP,所以壓縮為ZIP格式的ROM文件它可以直接讀取,別的壓縮格式就必須解壓回ROM文件。越來越多應用程序都開始內置支持ZIP,此時的ZIP壓縮文件相當於透明的源文件。由於ZIP格式的開放性,ZIP文件在網絡傳輸上也具有一些優勢,如某些內置ZIP算法的下載工具可分析要下載的ZIP包,可以只下載包內某些文件,這都要歸結於ZIP格式的開放性。

以上所有一切都只為說明一件事:ZIP格式仍然是適合個人使用的最佳壓縮格式,而RAR是適應現實環境的第二選擇壓縮格式。因此壓縮工作也許會演變為這樣的形勢:更多的壓縮是ZIP文件,而經常解壓的是RAR文件。儘管WinRAR也支持ZIP的製作,但程度優先,例如其不支持64位擴展,單個文件都4GB的限制,不支持增強真空算法的壓縮,不支持ZIP文件的壓縮分卷......製作ZIP文件的最好工具依然是WinZip,這就是為什麼WinRAR不能完全替代WinZip。是的,壓縮工具的選擇應該這樣,為了適應環境安裝使用WinRAR,為了高效壓縮安裝使用WinZip。個人建議是,如果壓縮工具對你而言主要是解壓,極少壓縮的話,那麼WinRAR確實已夠用了:如果要嘗試壓縮,那麼就不要放棄WinZip。

儘管筆者一再表明WinZip不可替代,但實際上對WinRAR也充滿好感。這個緊隨著WinZip的壓縮工具確實是所有模仿者中做得最為出色的,針對於WinZip的弱點作出的技術細節修改也極為有效。如WinZip必須壓縮後分卷而WinRAR可以直接分卷壓縮,又如WinZip無法管理壓縮包內的子目錄而WinRAR可以直接顯示目錄層次......所以即使RAR格式沒有那麼流行,WinRAR也仍然是最值得推薦安裝的壓縮工具。文章的最終目的並不是為WinZip與WinRAR打擂台,只是將一些事實的本來面目呈現給人們,而將其後的事情交給他們自己去判斷。這本應該是大多數媒體應該做的事情,講述客觀的事實而不是引領讀者的情緒,然而國內媒體的浮躁卻再次讓人失望。

後記
2000年4月14日,年僅37歲的菲利普·卡茲被人發現倒斃在美國威斯康星州密爾沃基的一家汽車旅館裡,據說死因是慢性酒精中毒引起的併發症。被人發現時卡茲的手中仍握著一個烈性酒的酒瓶,在同一個房間裡還發現了另外5個空酒瓶。這位天才程序員從未在ZIP身上得到半點好處,堅持信念的結果是潦倒的生活。他為世界貢獻了一個偉大的免費軟件,更為重要的是他締造了一種大眾化的壓縮格式,然而卻過早的離開了這個世界。僅僅兩年後,PKWare和WinZip為了商業利益開始分道揚鑣。用ULTRAEDIT打開任意一個ZIP文件,都可以看到嵌有菲利普·卡茲姓名字頭縮寫字母PK,每個ZIP文件都將永遠記載著菲利普·卡茲,因此菲利普·卡茲和他的ZIP壓縮格式也必將得到永生。不知為什麼對於菲利普·卡茲的記憶,在筆者腦海中浮現出的是華萊士的那聲吶喊:「Free!」

謹以此文向那些無私的天才程序員們致敬。
http://blog.cnw.cn/html/77/25277_itemid_580.html

個人認為作者對 rar 的認識本身唔太深…
不過呢篇文提供既歷史資訊有一定參考價值…

而家 RAR 已經蹤橫天下了…
不過我已經有新寵,就係 LGPL 的 7z!
如在 linux 下,那一定是 tar+bz2
好長
zip
原帖由 kelvinlok 於 2007-5-21 00:20 發表
好長
zip
我都唔鐘意 zip
不過真係估唔到原來 zip 有段血淚史!
好文一推