re0人物菲利克斯(自由叛逆的ZIP鬥士)
2023-04-16 12:51:19 3
自由叛逆的ZIP鬥士——菲利普·卡茲
日前筆者整理舊物,在抽屜的角落中發現了一張3.5吋的軟磁碟,懷舊情緒由然而生。就是當年這種小小的容量為1.44M的軟盤,成為我們上機時的必備工具。小小一張軟盤價值5元,想想如今以TB計算的硬碟該價值幾何?因為容量小,大家就不得不挖空心思考慮如何最大限度地物盡其用,總渴望有一種方法把數據像壓縮餅乾似的包含著更多的能量。其實不僅筆者這樣可以自詡的老鳥曾經有這樣的渴望,人們對於這種渴望早就開始了。
壓縮算法的歷史
為何要先提到壓縮算法的歷史,很大程度上因為對於壓縮而言,算法是靈魂。算法之重要如同汽車引擎,而壓縮軟體不過是基於該引擎而設計的汽車。對算法的研究由來已久,可以追溯到上個世紀前半葉。
最早的比較公認的算法是1948 年Shannon 在論文《通信的數學理論》中提到Shannon 編碼,它提出信息熵概念的同時也奠定了所有數據壓縮算法的理論基礎。1952 年,R.M.Fano 又進一步提出了Fano編碼。兩者後來被稱為 Shannon-Fano 編碼,這種編碼雖揭示了變長編碼的基本規律,但因實用性較差,還是避免不了扮演「馬前卒」或「先驅」的命運。
第一個真正實用的編碼方法是由D.A.Huffman 在 1952 年提出Huffman 編碼。據說提出該編碼的目的十分單純,僅僅是為了向老師證明自己可以不參加某門功課的期末考試。該編碼具有效率高、運算速度快、實現方式靈活等優點,故而從誕生伊始,即得到廣泛應用。時至今日,常見壓縮算法裡,也都有 Huffman 編碼的身影。
而目前流行壓縮軟體的算法主要是基於LZ算法。LZ 是其發明者 J.Ziv 和 A.Lempel 兩個猶太人姓氏的縮寫。因1977 年發表題為《順序數據壓縮的一個通用算法》的論文,論文中描述的算法被後人稱為 LZ77 算法。1978 年,二人又發表了該論文的續篇, 該算法即被為 LZ78。之後Terry Welch 在1984年改進了 LZ78 算法,提出了LZW 算法。目前的壓縮算法,都是基於 LZ77、 LZ78 和 LZW 是字典編碼中最基礎的3種編碼算法。該類算法被統稱為 Dictionary coders,基本思路如查字典,核心思想在於用字典中的頁碼和行號代替文章中的每個單詞。字典式編碼不但在壓縮效果上大大超過了 Huffman 編碼,而且壓縮和解壓縮的速度也異常驚人,於是使用LZ系列算法的工具軟體數量呈爆炸式 增長。今天我們熟悉的 PKZIP、WinZip、WinRAR、gzip 等壓縮 工具都是 LZ 系列算法的受益者,甚至連 PGP 這樣的加密文件格式也選擇了LZ系列算法作為其數據壓縮的標準。 一個耐人尋味的現實是 LZ77這個並不最優的算法大行其道,而更優的 LZ78 和 LZW算法卻蹤跡難覓。這是為何?很簡單的原因,三個字, 專利權;一個字,錢。相對於 LZ77 完全沒有專利限制來說,使用LZ78和 LZW算法則要交專利費。
叛逆鬥士的勝利——ZIP格式誕生
與網際網路時代相比,人們在單機時代對於數據壓縮的渴望只能算小巫見大巫了。由於技術所限,通過電話線的接入速度慢得可憐,通過網際網路傳輸較大文件實在是叫人痛苦的一件事。傳說中的信息高速公路竟然比土路上的牛車還慢了不知多少倍。於是,使用壓縮技術減小文件的體積並將多個文件壓縮到一個封包中就成為了用戶的一項必須掌握的技巧。SEA(System Enhancement Associates)公司攜帶ARC壓縮軟體應運而生。它生逢其時卻又命運多舛,先天基因不足最終導致了曇花一現。先天基因不足是因為它採用專利 LZW 算法,使它不得不成為標準的商業軟體。說其命運多舛是因為其剛一出世就遇到了強大對手,一個20多歲的愣頭青——菲利普·卡茲。
那時的菲利普·卡茲是一個沉迷於BBS 上的毛頭小夥,除了喜歡嘗新之外,還和當時大多玩家一樣窮,根本買不起 ARC 軟體。窮則思變,何況是才華橫溢的憤青小夥。小夥對於ARC的收費非常不滿,但他不知從什麼地方搞到一套ARC軟體。別人買ARC的目的是為了自己用;而他目的是共享,而且免費,所以他複製了ARC 的C語言原始碼。不用懷疑,他能搞到原始碼是使用了什麼見不得人的手段,而是那個時代的軟體銷售不僅包括一份 EXE 可執行文 件,還包括它的C語言原始碼。接下來他的工作就是利用彙編語言重寫,將其改頭換面為PKARC(Philip Katz'ARC),這個程序與 ARC完全兼容,而且由於使用匯 編使得速度較ARC更快。當然這事件本身沒錯,即使現在也有許多高手在做,作為個人行為,沒人會理會,也不會有人去追究。不過這次菲利普·卡茲玩得有點過火,不僅僅是自己和朋友用,而是將這個軟體以非強迫性註冊的共享軟體形式向他人發放,即使不註冊,一樣可以毫無限制地使用下去,大批ARC用戶自然也就轉而使用菲利普·卡茲的軟體。玩火可以,玩過頭了則自然會引火燒身。為生存計,SEA公司曾私下接洽過菲利普·卡茲,並希望通過授權的方式將PKARC收編。視收費為敵人的菲利普·卡茲當然一口回絕,讓PKARC成為商業軟體來賺錢不是他的初衷。 SEA公司一紙訴狀將菲利普·卡茲告上了法庭,法庭自然判決菲利普· 卡茲禁止繼續開發和傳播PKARC。而他也不出意外地輸掉了官司。敗訴後的卡茲依然拒絕將PKARC授權給SEA公司,而選擇了支付法律費用和停止發放PKARC。
判決並沒有壓跨卡茲,而是激起了他與ARC鬥爭到底的決心。如打不死的小強,遇強則強,他選擇了對PKPRC完全重寫。當然這次不能去觸犯任何有專利權的編碼算法了,完全自己重寫編碼也不太現實,借籤不失為一條便捷路,於是他的目光轉向了3個基本編碼算法。LZW和 LZ78有專利權,剩下的就只有LZ77。也許是被激怒後帶來了驚人的動力,只用了幾周時間,菲利普·卡茲就創造出一個全新的壓縮編碼算法,該算法完美地結合 LZ77 和 Huffman 編碼,也就是後來大名鼎鼎的 DEFLATE 算法了。 新壓縮軟體被命名為PKZIP,而其文件格式擴展名叫作「.zip」。PKZIP可將多個文件壓縮到一個文件中,無論壓 縮比、壓縮速度都全面超過了商業軟體ARC。菲利普·卡茲將PKZIP作為自由軟體免費發放,使其以星火燎原之勢在全 美各大BBS上蔓延開來,用戶以幾何級數增長,各大BBS的站長自發將原來使用ARC格式壓縮的文件轉換成ZIP格式,卡茲用他天才的頭腦和頑強的毅力堂堂正正的擊敗了ARC,使得SEA公司半年內就無聲無息。這段故事最後演變為用自由軟體打敗商業軟體的傳奇,菲利普·卡茲更是成為充滿幻想的年輕程式設計師心中的偶像,即使今天提及,也讓人津津樂道。正如後來有人評價卡茲時所說的那樣:「他無疑扮演了ARC掘墓人的角色,為ARC的棺材釘上了最後一顆釘子!」
如果僅僅到此為止,那麼這也不過是菲利普·卡茲為一己私憤而快意恩仇的行為,未必能得到後人的真正尊重。自由平等的思想已浸入了他骨髓,他做出了一個讓所有電腦用戶都受益無窮的舉動,那就是宣布開放ZIP格式,任何人都可以自由使用ZIP編碼算法而不需要繳納任何專利費用。這個決定最終改變了壓縮的世界,使得通用數據無損壓縮領域再無法出現壟斷的商業巨鱷,真正意義上幫助了每個需要壓縮的計算機用戶。憑藉這個無私的行為, 菲利普·卡茲真正成為他想成為的英雄。而目前國內好壓、酷壓、360壓縮為何能爭相推出並免費使用,一個根本原因就是ZIP算法的免費,而RAR需要付費。
此後卡茲一直繼續著對PKZIP的開發和維護工作,PKZIP建立和統治了DOS時代的壓縮標準ZIP壓縮格式,當然同時代的主要競爭者還有壓縮率更高的ARJ和LHA格式。Windows誕生後,使用卡茲創造的壓縮算法的軟體Winzip,憑藉著良好的圖形界面和友好的操作方式,遠遠地把ARJ和LHA格式甩在了身後,更使ZIP格式成為Internet的傳輸標準,ZIP壓縮格式也成為壓縮文檔的事實標準,建立起一個統治Internet的「ZIP王朝」。
風水輪流轉,目前的壓縮軟體市場遠不是ZIP一家獨大,WinRAR風頭正勁,7Z也在虎視眈眈。但ZIP在壓縮軟體的歷史長河中,必將會佔有一席之地。
令人遺憾的是,卡茲雖然給世人呈上了最美的ZIP編碼,他的最終命運卻讓人扼腕嘆息。他獲得了精神,卻敗給了物質。糟糕的個人生活習慣和長期編寫軟體的巨大壓力使卡茲染上了的惡習,最終斷送了他那年輕的生命。2000年的4月14號,死在了美國威斯康星州密爾沃基的一家汽車旅館裡,死時,年僅37歲;死時,手裡還緊握著一個烈性酒的酒瓶。斯人已逝,留給後人除了無盡的憂傷和遺憾之外,也唯有通過Ultraedit打開任一個zip文件,去看一下文件最前面兩個字母PK,這便是zip文件格式的創始人Philip Katz的名字縮寫。也許這是我們紀念它唯一的也是最好的方式。
,