软件那些事儿

No.538 WinRAR:技术天才弟弟与商业鬼才哥哥合作的产物


Listen Later

我觉得只要你用过电脑,你就应该用过WinRAR这款软件。这几乎是人尽皆知的压缩软件。它的故事,可以说是一部由天才程序员、一个独特的商业模式和时代需求共同谱写的传奇。

大家好,我是栋哥,咱们又见面了。

天才程序员的杰作

WinRAR的核心,源于一位名叫尤金·罗谢尔(Eugene Roshal)的俄罗斯程序员。他出生于1972年,毕业于俄罗斯的南乌拉尔州立大学。在90年代初,个人电脑正在普及,但硬盘空间却非常宝贵,因此文件压缩技术成为了当时的热点。

当时,市面上最流行的压缩格式是大家都很熟悉的ZIP格式,它由菲尔·卡茨(Phil Katz)创造。关于Phil Katz的故事,在我的电台的第72期天才与酒鬼,自私与无畏中已经讲过了,有兴趣的,可以去听听。然而,罗谢尔认为他可以做得更好。他着手开发一种新的压缩算法,目标是实现更高的压缩率和更强的数据恢复能力。

这个算法的成果,就是RAR——Roshal ARchive(罗谢尔的归档)的缩写。

好的,我们来详细介绍一下尤金·罗谢尔(Eugene Roshal),这位在软件世界中鼎鼎大名,却又异常低调的传奇程序员。

他的故事充满了天才式的创造和一种独特的专注,正是这种专注,让他缔造了全球数亿人电脑中不可或缺的工具——WinRAR。

个人简介与教育背景

尤金·罗谢尔(全名:Yevgeniy Lazarevich Roshal,俄语:Евгений Лазаревич Рошал)于1972年3月10日出生在俄罗斯的工业城市车里雅宾斯克(Chelyabinsk)。这个城市有个著名的事件,在2013年的时候,一颗直径约18米、重达上万吨的小行星以超过6万公里/小时的超高速冲入地球大气层。它在车里雅宾斯克州上空约23公里的高空发生了剧烈的爆炸解体,形成了一个比太阳还要耀眼的超级火球。

他毕业于南乌拉尔州立大学(South Ural State University),这是一所以技术和工程见长的学府。大学期间,他主修的是计算机工程相关的专业,这为他日后在软件开发领域取得的巨大成就打下了坚实的理论基础。

然而,关于他的个人生活、兴趣爱好甚至一张清晰的照片都极难在公开渠道找到。他是一位典型的“代码背后的人”,选择让自己的作品替他发声,自己则远离公众的聚光灯,专注于技术的世界。这种低调和神秘,也为他的传奇增添了一抹独特的色彩。

三大杰作:RAR, WinRAR, 和 FAR Manager

尤金·罗谢尔的职业生涯主要以他创造的三个核心软件产品而闻名:

RAR 压缩算法 (1993年)

RAR 是 Roshal ARchive(罗谢尔的归档)的缩写,直接以他的姓氏命名。

在90年代初,ZIP是主流的压缩格式。但罗谢尔认为可以创造出一种压缩率更高、容错性更强的算法。RAR算法因此诞生,它在技术上追求极致,尤其是在固实压缩(Solid Archiving)和数据恢复能力上,超越了当时的竞争者。

罗谢尔公开了解压RAR文件的源代码(UnRAR),任何人都可以基于它开发解压功能,这也是为什么7-Zip、Bandizip等众多软件都能解压RAR文件的原因。但是,压缩RAR文件的算法至今仍是**专有(Proprietary)**的,并未开源。这意味着,要创建一个标准的RAR压缩包,理论上只能使用官方发布的软件。

WinRAR 图形界面压缩软件 (1995年)

随着Windows 95的发布,图形化操作界面成为主流。罗谢尔顺应潮流,为他的RAR算法开发了Windows下的图形化前端——WinRAR。

巨大成功: WinRAR凭借其强大的功能(如分卷压缩、加密、强大的恢复记录)和对多种格式的兼容性,迅速风靡全球,成为了压缩软件的代名词。它的图标——三本被皮带捆绑的书,也成为了电脑用户最熟悉的符号之一。

FAR Manager (1996年)

高手的工具: 在开发WinRAR之后,罗谢尔还创造了另一款备受程序员和高级用户推崇的软件——FAR Manager。它是一个在Windows环境下运行的文本界面文件管理器,类似于经典的Norton Commander。

特点: FAR Manager极其高效、可通过插件高度定制,对于需要频繁操作大量文件、注重键盘效率的用户来说,至今仍是一款“神器”。这也从侧面反映了罗谢尔本人作为一名硬核程序员的技术品味和开发理念。

独特的“兄弟会”商业模式

尤金·罗谢尔创造了软件,但商业上的事情他似乎并不关心。这就要提到他的哥哥——亚历山大·罗谢尔(Alexander Roshal)。

为了能让自己全身心地投入到软件开发中,尤金将RAR算法和WinRAR软件的版权以及商业运营权,完全交给了他的哥哥亚历山大。

这种兄弟间的明确分工,形成了一种非常高效且稳固的合作模式:

弟弟尤金: 专注于技术,负责软件的开发、更新和维护,不断打磨产品。

哥哥亚历山大: 负责商业决策,包括软件的许可、销售、市场推广以及法务问题。

正是这种模式,让尤金可以几十年如一日地做他最擅长和最热爱的事情,而不被商业世界的琐事分心。这也解释了为什么WinRAR能在如此长的时间里保持高质量的更新。

一个几乎“隐形”的开发者

尤金·罗谢尔是互联网上最成功的软件开发者之一,但也是最低调的一个。你找不到任何关于他的专访,也看不到他在技术大会上发表演讲。他的所有交流,似乎都通过软件的更新日志和哥哥亚历山大的商业实体来完成。

他不像比尔·盖茨或林纳斯·托瓦兹(Linux创始人)那样成为公众人物,而是选择了一种“事了拂衣去,深藏功与名”的方式。对他而言,最重要的事情可能就是不断优化代码,解决技术难题,并为全球用户提供一个稳定、强大的工具。

尤金·罗谢尔是一位纯粹的技术极客和天才程序员。他用代码定义了自己,用卓越的产品影响了世界,同时又成功地将自己隐藏在了这些产品背后,保持着一个开发者最纯粹和专注的状态。

1993年,第一个版本的RAR格式和对应的命令行程序发布了。它凭借比ZIP更高的压缩率,很快在技术爱好者中获得了关注。但真正让RAR走向大众的,是图形化操作系统的兴起。

WinRAR的诞生与崛起

随着Windows 95的巨大成功,图形界面成为了主流。罗谢尔看到了这个机遇,与他的兄弟亚历山大·罗谢尔(Alexander Roshal)合作,在1995年4月22日,正式发布了为Windows系统量身定做的压缩软件——WinRAR。

WinRAR不仅仅是给RAR算法加了一个“壳”,它还带来了许多革命性的功能,使其在与WinZip等软件的竞争中脱颖而出。

相比早期ZIP格式在处理非英文字符时可能出现的乱码问题,RAR格式对Unicode的良好支持,让它在中国用户中迅速赢得了口碑。

“永不过期”的试用:一个独特的商业模式

WinRAR最让用户津津乐道的,莫过于它那“名存实亡”的40天试用期。

从法律上讲,WinRAR是一款共享软件(Shareware),用户可以免费下载和试用40天。40天后,每次启动软件,都会弹出一个窗口,提醒你购买许可。但有趣的是,即使你不购买,软件的所有功能依然可以正常使用,只是需要多点一下鼠标关掉那个弹窗。

这种看似“佛系”的策略,实际上是一种非常高明的商业模式:

“永不过期”的试用让WinRAR得以在全世界,尤其是在对软件付费意愿较低的地区,实现病毒式的传播,几乎成为了个人电脑的“装机必备”软件,培养了数以亿计的用户习惯。

对于个人用户,官方采取了“闭两只眼”的态度。但对于注重软件合规和版权的企业用户,购买许可是必须的。庞大的个人用户基础,使得WinRAR在企业市场拥有极高的知名度和认可度,从而保证了稳定的收入。

中国区的特色模式: WinRAR在中国区由代理商运营,并且探索出了独特的盈利方式。早期,它与下载站捆绑,后来则在软件中加入了广告弹窗。虽然这些弹窗有时会打扰用户,但也确实让这款“免费”软件得以在中国持续运营和更新。

压缩的原理

压缩的原理是一个非常有趣的话题,它是我们数字世界的基石之一。无论是发送照片、听音乐,还是打包文件,背后都离不开压缩技术。

我们可以将压缩的原理归结为一个核心思想和两大主要分支。

核心思想:消除“冗余”

所有数据压缩的根本目的,都是为了消除信息中的“冗余”部分,从而用更少的数据位(bit)来表达相同或近似的信息。

“冗余”可以理解为数据中重复的、可预测的、或不那么重要的部分。

想象一下这个句子:猫猫说:“喵喵喵喵喵。”

这句话里有大量的冗余。我们可以用一种更聪明的方式来记录它,比如:

猫(重复)说:“喵(重复5次)。”

你看,我们用更短的描述表达了完全相同的信息。计算机压缩算法做的也是类似的事情,只是它们处理的是由0和1组成的数据流,并且方法要复杂和高效得多。

两大分支:无损压缩 vs. 有损压缩

根据压缩后能否完美地恢复原始数据,压缩技术被分为两大阵营。

无损压缩 (Lossless Compression)

顾名思义,无损压缩可以100%地、完美地将压缩后的数据还原成原始数据,不会丢失任何一点信息。

寻找数据中统计学上的冗余。它通过识别数据中的重复模式和规律,并用更短的符号来表示它们。

常见算法举例:

行程长度编码 (Run-Length Encoding, RLE): 这是最简单的压缩算法。它会寻找连续重复的数据,并将其记录为“某个数据 + 重复次数”。

原始数据:AAAAABBBBBBBWWWW

RLE压缩后:A5B7W4 (5个A,7个B,4个W)

这种方法对简单的图形(如logo、图标)非常有效,但对内容复杂的文本效果不佳。

哈夫曼编码 (Huffman Coding): 一种基于统计的巧妙方法。它会分析数据中所有元素(比如文本中的字符)出现的频率,给出现频率最高的元素分配最短的编码,给出现频率最低的元素分配最长的编码。

在英文中,字母 e 出现的频率远高于 z。标准编码(ASCII)中,e 和 z 都占用8个bit。但哈夫曼编码可能会给 e 分配一个2-bit的编码,而给 z 分配一个10-bit的编码。总体算下来,整个文件就会小很多。

LZ系列算法 (Lempel-Ziv): 这是目前最主流的无损压缩算法,是 WinRAR、ZIP、7z 等软件的核心。它的原理是建立一个“字典”。当算法在数据中前进时,它会不断地将遇到的新词组存入字典。如果再次遇到这个词组,它就不再存储词组本身,而是存一个指向字典里该词组的简短“指针”(例如,“回到前面第X个位置,复制Y个长度的数据”)。

在20世纪70年代,数据存储和传输的成本非常高昂。当时主流的压缩技术是基于统计学的,其中最著名的是哈夫曼编码(Huffman Coding)。

哈夫曼编码的原理是分析数据中字符出现的频率,给高频字符分配短编码,给低频字符分配长编码,从而实现压缩。这种方法很有效,但有一个核心前提:你必须预先知道数据的统计特性,或者需要扫描两遍数据(第一遍统计频率,第二遍进行编码)。这使得它对于实时传输的数据流,或者内容特性不断变化的复杂文件来说,显得不够灵活和高效。

当时的科学家们正在寻求一种更通用的、适应性更强的压缩方法,一种不需要预先了解数据内容就能工作的“通用算法”(Universal Algorithm)。

故事的主角是两位来自以色列理工学院(Technion – Israel Institute of Technology)的学者:

亚伯拉罕·蓝波(Abraham Lempel)和雅各布·立夫(Jacob Ziv)

他们两人致力于信息论和数据压缩的研究,并构想出了一种革命性的新方法。

核心思想:用数据自身作为“字典”

Lempel和Ziv的核心创想是颠覆性的:为什么我们需要一个预先定义的、固定的编码本(字典)呢?我们完全可以用数据自身来动态地创建这个字典!

他们的基本逻辑是:在一段不完全随机的数据中,某些字符串序列很可能会重复出现。如果我们能找到这些重复的部分,并用一个简短的“引用”来替代后面的重复序列,就能实现压缩。这个“引用”就相当于告诉解压程序:“回到前面第X个位置,复制Y个长度的数据”。

基于这个核心思想,他们在信息论领域的顶级期刊《IEEE Transactions on Information Theory》上连续发表了两篇里程碑式的论文,分别提出了两种具体的实现算法。

1. LZ77算法 (1977年)

1977年,他们发表了题为《A Universal Algorithm for Sequential Data Compression》(一种用于序列数据的通用算法)的论文,正式提出了LZ77算法。

滑动窗口(Sliding Window) LZ77的实现方式非常巧妙。它在数据流中维护一个“滑动窗口”,这个窗口分为两部分:一部分是刚刚处理过的历史数据(作为“字典”),另一部分是即将要处理的待编码数据。 算法会努力在历史数据中为待编码数据寻找最长的匹配项。如果找到了,就输出一个指向历史数据的(距离,长度)对;如果找不到,就直接输出原始字符。

这个“滑动窗口”的思想成为了后续许多压缩算法的基石,包括大名鼎鼎的 DEFLATE 算法,后者正是我们今天每天都在使用的 ZIP、GZIP 和 PNG 等格式的核心。

2. LZ78算法 (1978年)

一年后,即1978年,他们又发表了第二篇论文《Compression of Individual Sequences via Variable-Rate Coding》,提出了对前一思想的另一种实现——LZ78算法。

显式构建字典(Explicit Dictionary) 与LZ77不同,LZ78不再使用滑动窗口,而是从头开始,逐步地、显式地构建一个字典。它会不断读取新的字符串,如果这个字符串不在字典里,就把它添加进去,并输出(字典中上一个匹配项的索引 + 当前新字符)。

LZ78的思路更清晰,也更容易在硬件中实现。它直接催生了一个非常重要的商业化变体——LZW算法(Lempel-Ziv-Welch)。LZW由美国学者Terry Welch在1984年对LZ78进行了优化,后来被广泛应用于GIF图片格式和早期的Unix compress命令中,是计算机数据压缩技术第一次大规模普及的功臣。

Lempel-Ziv算法的由来,可以看作是数据压缩技术从“静态统计模型”向“动态字典模型”的一次革命性转变。

它摆脱了对数据先验知识的依赖,是一种真正自适应的“通用”压缩算法。LZ77和LZ78这两种看似不同但思想相通的实现,为后来的压缩技术发展开辟了两条主要道路。

从ZIP文件到PNG图片,从网络传输到数据存储,我们今天的数字生活几乎无处不在地享受着Lempel和Ziv这两位学者在40多年前的开创性工作所带来的便利。为了表彰他们的贡献,IEEE在2004年将他们的算法命名为“IEEE里程碑”。

我为什么对这个压缩算法比较了解,这与我曾经参与过的一个项目有关。在我读研究生的时候,Sony的PlayStation 3发布,里面用的CPU叫Cell,是三家公司合作研发的,这3家公司分别是Sony,Toshiba和IBM,简称STI联盟。

这个Cell的CPU非常奇怪,当时大家都是搞对称多核,比如2个,4个,8个,16个核心,但是这个Cell是9核心。传统CPU就像一个(或几个)能力全面的“大管家”,每个核心都能处理各种复杂的任务。而Cell的设计则像是一个一个大管家带着八个小专家的团队。

1个“大管家” - PPE (Power Processing Element): 这是一个基于IBM PowerPC架构的通用核心,相对传统,负责运行操作系统、协调任务和处理常规逻辑。它的任务是“发号施令”。

8个“小专家” - SPE (Synergistic Processing Elements): 这才是Cell的精髓所在。每个SPE都是一个精简但高效的矢量处理器,它们不处理复杂的通用任务,只专注于一件事:大规模的并行浮点运算。这正是3D图形、物理模拟和视频编解码等任务最需要的计算能力。它们负责“干苦力活”。

理论上,当PPE将任务完美地分解并分配给8个SPE(PS3中为确保良率,只启用了7个)协同工作时,Cell能爆发出远超同期传统CPU的恐怖计算性能,其浮点运算能力在当时达到了惊人的230 GFLOPS,这在消费级产品中是前所未闻的。

但是,这对编程来说是个灾难。Cell的理论性能无比强大,但要将其转化为实际的游戏画面,却给游戏开发者们带来了巨大的痛苦,甚至被形容为“地狱般的编程体验”。

但是也要推广啊,IBM就到学校里去推广这个Cell,先从学生入手。提交了就有2000还是3000的钱,如果再得一个奖,就更多了,我就跟2个同学去报名了,不管会不会,先报上名再说。反正大家都不会。

每个SPE都拥有自己的一块高速但极小的本地内存(256KB)。开发者必须手动编写代码,将需要处理的数据从主内存搬运到SPE的本地内存,计算完成后再手动搬回去。这个过程极其繁琐且极易出错,稍有不慎就会导致严重的性能瓶颈。

如何将一个复杂的游戏任务(如物理计算、AI、音频处理)完美地拆分成多个子任务,并让所有SPE高效地协同工作,这对程序员的并行编程能力提出了前所未有的高要求。

我们3个的目标是拿到这个钱,就做了一个相对简单的,把7-zip这个开源的代码,移植到这个Cell上跑,然后证明这个Cell确实比单核的NB。

后来我们确实拿到了钱,每个人分了1000块。不过也让我意识到,多核编程并不适合所有的任务。LZMA是字典式压缩,压缩过程中的每一步都严重依赖前一步的结果。算法需要不断地在巨大的“字典”(刚压缩过的数据)中回头查找最长的匹配项,这个过程是线性的、串行的,很难拆分成8个独立的并行任务。 压缩算法充满了对比特和字节的操作、整数计算以及复杂的逻辑判断,几乎不涉及浮点运算。

而SPE是为海量的浮点数学运算而生的,这是图形学和科学计算的核心。SPE的内部逻辑单元很简单,没有复杂的“分支预测”等功能,它喜欢执行重复、直接的指令。

SPE依赖于从主内存到其256KB本地小内存的高速数据传输(DMA)。它最喜欢可预测的、连续的数据块。而LZMA的随机字典查找会彻底破坏这种模式,导致SPE不断地请求零碎、不连续的数据,大部分时间都浪费在等待数据“喂”到嘴里,而不是在计算。

最终,所有这些复杂的、无法并行的逻辑和任务调度都只能由那个唯一的“大管家”PPE来处理。而PPE本身只是一个性能尚可的通用核心,它很快就会不堪重负,成为整个系统的瓶颈,而那8个强大的SPE“专家”却无事可做。

用Cell跑7-Zip,是一种典型的“让英雄无用武之地”的场景,无法发挥Cell的任何架构优势,最终的性能表现自然也不会理想。这恰好证明了在计算机世界里,“最合适的”远比“理论上最强大的”更加重要。

有损压缩 (Lossy Compression)

有损压缩则会永久性地、有选择地丢弃一部分数据,以换取极高的压缩率。当然,它丢弃的不是随机数据,而是人眼或人耳最不敏感的数据。

利用人类感官的生理和心理特性(心理声学模型和心理视觉模型)。我们的感官系统并非完美,对某些信息的感知能力有限,有损压缩正是利用了这一点。

常见算法举例:

JPEG (图片)

人的眼睛对亮度的敏感度远高于对色彩的敏感度。JPEG会保留大部分亮度信息,但会将一些相近的色彩“合并”成同一种颜色,从而大大减少数据量。对于一张色彩丰富的照片,这种细微的色彩损失你几乎无法察觉。

它会将图像分解成不同频率的波形,并大量丢弃代表图像细节(如纹理)的高频部分,因为人眼对平滑的低频部分更敏感。

MP3 (音频)

利用“遮蔽效应”,这是心理声学的核心。当一个很强的声音(比如鼓声)和一个很弱的声音(比如微弱的弦乐)同时出现时,你的耳朵很可能只能听到那个强的声音。MP3编码器就会聪明地把那个你反正也听不到的弱声音直接从数据中剔除掉。

MPEG/H.264 (视频)

视频压缩是集大成者。它不仅会对每一帧图像进行类似JPEG的有损压缩,更重要的是,它会分析帧与帧之间的差别。如果画面中只有一个人在说话,背景是静止的,那么压缩器就没必要把每一帧的背景都重新存一遍。它只会存储一次背景,然后只记录接下来几帧中发生变化的部分(比如嘴部的动作)。

简单来说,当你需要保证数据的绝对保真时,选择无损压缩;当你追求更小的文件体积且能接受微小质量损失时,有损压缩是更好的选择。这两类技术共同协作,才支撑起了我们今天高效便捷的数字生活。

WinRAR的核心算法属于无损压缩技术。

更具体地说,它主要基于大名鼎鼎的 LZ系列算法(Lempel-Ziv),并在此基础上进行了大量的优化和改进,形成了自己独特的、专有的压缩算法。

WinRAR的算法是一种高度优化的、专有的无损压缩技术。它以LZ系列字典式压缩为核心,并融合了固实压缩、特定数据预处理等多种先进技术,使其在压缩率和功能性上长期处于行业领先地位。

WinRAR的故事,是一个关于技术、远见和独特商业策略的成功案例。它诞生于一个对文件压缩有迫切需求的时代,凭借其创始人出色的技术实力和对用户需求的精准把握,迅速占领了市场。而它那“永不过期”的试用模式,更是在商业世界中显得独树一帜,最终成就了它在全球范围内无与伦比的普及度。

时至今日,尽管云存储和各种新兴传输方式不断涌现,但WinRAR依然是许多人电脑中不可或缺的工具之一。下一次,当你熟练地右键点击文件,选择“添加到压缩包”时,可以回想一下这个由俄罗斯程序员兄弟创造的、已经流行了近三十年的软件传奇。



...more
View all episodesView all episodes
Download on the App Store

软件那些事儿By 刘延栋

  • 4.9
  • 4.9
  • 4.9
  • 4.9
  • 4.9

4.9

51 ratings


More shows like 软件那些事儿

View all
一席 by 一席

一席

102 Listeners

枫言枫语 by 枫影JustinYan、自力hzlzh

枫言枫语

24 Listeners

津津乐道 by DAO

津津乐道

119 Listeners

疯投圈 by 黄海、Rio

疯投圈

110 Listeners

声东击西 by ETW Studio

声东击西

317 Listeners

科技乱炖 by DAO

科技乱炖

24 Listeners

忽左忽右 by JustPod

忽左忽右

459 Listeners

What's Next|科技早知道 by 声动活泼

What's Next|科技早知道

176 Listeners

硅谷101 by 硅谷101

硅谷101

192 Listeners

硅谷101|中国版 by 泓君Jane

硅谷101|中国版

55 Listeners

商业就是这样 by 商业就是这样

商业就是这样

272 Listeners

半拿铁 | 商业沉浮录 by 潇磊&刘飞

半拿铁 | 商业沉浮录

312 Listeners

脑放电波 by 托马斯白

脑放电波

10 Listeners

硬地骇客 by skoowoo

硬地骇客

19 Listeners

42章经 by KaiQu

42章经

12 Listeners