我们应该使用哪种压缩格式?我们是否应该放弃使用DEFLATE(.zip)?

11

大多数Linux发行版放弃使用gzip和bzip2,转而使用LZMA2压缩其软件包,并有许多开源实现适用于许多平台。我想知道:我们是否应该放弃DEFLATE和.zip格式(不幸的是,它们一次又一次地被篡改),转向其他现代分发(源)包的方式?

GNU tar支持J选项,使用xz(另一种LZMA2压缩器)作为过滤器:

$ tar cJf foo.tar.xz foo/

然而,在Linux下创建归档文件时,我倾向于使用7z(p7zip实现)及其友好的7za。在创建归档文件时,我仍然使用“避免tar炸弹”范例,意思是在该归档文件中有一个目录,因此从命令行提取不会导致文件溢出到当前目录(这是Linux上使用tar等标准操作方式,但在Windows下似乎不常见)。
无论如何,由于在软件包(例如Fedora RPM和Ubuntu DEB)以及过滤器工具(例如tar)中的使用,LZMA2似乎是继bzip2之后使用的“下一个最佳选择”。它具有极高的压缩率(在标准设置下远胜于bzip2),并且速度非常快(压缩略慢于gzip)。
我自己进行了一些基准测试,但我想把重点放在更广泛的基准测试上:
- compressionratings.com上基于评分的基准测试 - maximumcompression.com上基于效率的基准测试
现在,您会注意到,参考实现7-zip不是第一位。然而,Freearc使用自己的.arc格式,这并不真正具有跨平台能力,并且与80年代的 ARC不兼容。nanozip不是开源的,这有点令人失望,但算法很重要,而不是压缩程序!
无论如何,现在使用7-zip及其派生实现(xz)的性能已经不再是问题,压缩比也说明了一切,我觉得将我的源代码包分发为.7z.tar.xz归档文件。但是,我面前有两个障碍,我似乎无法克服:
  1. 支持WinRAR的人。别误会,我没有对WinRAR或其用户怀恨在心,只是我不能在Linux上制作RAR文件,也没有必要,因为我们有免费的LZMA2工具。而且正如我所说,自从成为发行包的一个重要部分以来,它可以在任何现代发行版上使用。由于制作.7z.rar大约需要同样的时间,而LZMA2文件通常更小,所以我不明白为什么不使用7-zip。

  2. tar档案必须是zip或bzip2格式,没有例外。 这很难说服人。为什么那么多人对gzip印象深刻?即使大多数情况下bzip2也不怎么使用。当然,gzip很快,在按需压缩(例如在Web服务器中)或创建大型镜像备份时是个好东西。但是分发软件呢?LZMA2非常不对称。虽然压缩需要时间,但解压缩非常快。

好了,现在问题来了:

既然LZMA2算得上是下一代更好的压缩算法,为什么人们没有跳上这趟列车?为什么人们仍然使用WinRAR,这是专有的,压缩比更差,并且没有移植到Linux(除了unrar,但显然不能创建档案)。为什么Tarballs仍然大多是gzip格式?

没有办法说服人们使用新的、可靠的归档格式,该格式不仅跨平台,而且免费吗?当我给别人一个以 .7z 结尾的文件时,他们通常不知道该怎么处理它,这会改变吗?
哦,这里是我自己做的小基准测试。我在所有地方都使用了默认设置:
11837440 GNUtar_TAR.tar
10657984 Arc_ARC.arc
9632524 PA2010_TAR_BZip2.tar.bz2
9536967 PA2010_LHA_Frozen5.lzh
9510148 PA2010_ZIP_BZip2.zipx
9490211 GNUtar_TAR.tar.bz2
9467242 PA2010_LHA_Frozen6.lzh
9463630 7-zip_ZIP_BZip2.zip
9437520 7-zip_7-ZIP_BZip2.7z
9398798 Arj_ARJ.arj
9373435 GNUtar_TAR.tar.gz
9370456 PA2010_BlackHole_Deflate.bh
9369621 Lha_LHA_Frozen6.lzh
9367712 PA2010_ZIP_Deflate.zip
9364237 PA2010_TAR_gzip.tar.gz
9360248 PA2010_Cabinet_MsZip.cab
9303923 7-zip_ZIP_Deflate.zip
9215279 7-zip_ZIP_Deflate64.zip
9189365 PA2010_ZIP_PPMd.zipx
9060663 PA2010_7-ZIP_PPMd.7z
8931280 PA2010_Cabinet_LZX.cab
8847427 7-zip_7-ZIP_PPMd.7z
8803350 PA2010_ZIP_Optimized.zipx
8803350 PA2010_ZIP_Wavpack.zipx
8802850 PA2010_ZIP_LZMA.zipx
5812491 FreeArc_7-ZIP.arc
5789853 7-zip_7-ZIP_LZMA.7z
5789853 PA2010_7-ZIP_LZMA.7z
5789024 GNUtar_TAR.tar.xz
5782637 FreeArc_UHARC.arc
5770969 FreeArc_CCM.arc
5739697 Fp8_5.fp8
5718865 Fp8_8.fp8
5685234 Paq8px_5.paq8px
5677662 Paq8kx_5.paq8kx
5644422 Paq8px_8.paq8px
5609608 Paq8kx_8.paq8kx

(文件大小;文件名:压缩格式_算法.扩展名)

该文件集包含包含DOS安装程序的磁盘映像:

1474979 disk01.144
1474979 disk02.144
1474979 disk03.144
1474979 disk04.144
1474979 disk05.144
1474979 ldisk01.144
1474979 ldisk02.144
1474979 ldisk03.144
24325 diskcopy.com

(字节大小)

1个回答

2

曾经,tarballs并不支持bz2格式。后来,有人为GNU Tar添加了一个选项,使其能够创建和读取bz2归档文件,很快这种格式就开始流行起来了。所以答案是:

如果你相信LZMA,那么请向自由软件基金会提交补丁(附上所有必要的文件),你会让世界变得更美好。


1
我不是只在谈论tarballs。ZIP和WinRAR仍然在Windows上流行,虽然7-zip已经存在多年,但似乎并没有被广泛采用。此外,正如我在问题中所述,LZMA已经包含在GNU tar中。 - polemon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接