| |
| XZ Utils FAQ |
| ============ |
| |
| Q: What do the letters XZ mean? |
| |
| A: Nothing. They are just two letters, which come from the file format |
| suffix .xz. The .xz suffix was selected, because it seemed to be |
| pretty much unused. It is no deeper meaning. |
| |
| |
| Q: What are LZMA and LZMA2? |
| |
| A: LZMA stands for Lempel-Ziv-Markov chain-Algorithm. It is the name |
| of the compression algorithm designed by Igor Pavlov for 7-Zip. |
| LZMA is based on LZ77 and range encoding. |
| |
| LZMA2 is an updated version of the original LZMA to fix a couple of |
| practical issues. In context of XZ Utils, LZMA is called LZMA1 to |
| emphasize that LZMA is not the same thing as LZMA2. LZMA2 is the |
| primary compression algorithm in the .xz file format. |
| |
| |
| Q: There are many LZMA related projects. How does XZ Utils relate to them? |
| |
| A: 7-Zip and LZMA SDK are the original projects. LZMA SDK is roughly |
| a subset of the 7-Zip source tree. |
| |
| p7zip is 7-Zip's command line tools ported to POSIX-like systems. |
| |
| LZMA Utils provide a gzip-like lzma tool for POSIX-like systems. |
| LZMA Utils are based on LZMA SDK. XZ Utils are the successor to |
| LZMA Utils. |
| |
| There are several other projects using LZMA. Most are more or less |
| based on LZMA SDK. |
| |
| |
| Q: Do XZ Utils support the .7z format? |
| |
| A: No. Use 7-Zip (Windows) or p7zip (POSIX-like systems) to handle .7z |
| files. |
| |
| |
| Q: I have many .tar.7z files. Can I convert them to .tar.xz without |
| spending hours recompressing the data? |
| |
| A: In the "extra" directory, there is a script named 7z2lzma.bash which |
| is able to convert some .7z files to the .lzma format (not .xz). It |
| needs the 7za (or 7z) command from p7zip. The script may silently |
| produce corrupt output if certain assumptions are not met, so |
| decompress the resulting .lzma file and compare it against the |
| original before deleting the original file! |
| |
| |
| Q: I have many .lzma files. Can I quickly convert them to the .xz format? |
| |
| A: For now, no. Since XZ Utils supports the .lzma format, it's usually |
| not too bad to keep the old files in the old format. If you want to |
| do the conversion anyway, you need to decompress the .lzma files and |
| then recompress to the .xz format. |
| |
| Technically, there is a way to make the conversion relatively fast |
| (roughly twice the time that normal decompression takes). Writing |
| such a tool would take quite a bit time though, and would probably |
| be useful to only a few people. If you really want such a conversion |
| tool, contact Lasse Collin and offer some money. |
| |
| |
| Q: Can I recover parts of a broken .xz file (e.g. corrupted CD-R)? |
| |
| A: It may be possible if the file consists of multiple blocks, which |
| typically is not the case if the file was created in single-threaded |
| mode. There is no recovery program yet. |
| |
| |
| Q: Is (some part of) XZ Utils patented? |
| |
| A: Lasse Collin is not aware of any patents that could affect XZ Utils. |
| However, due to nature of software patents, it's not possible to |
| guarantee that XZ Utils isn't affected by any third party patent(s). |
| |
| |
| Q: Where can I find documentation about the file format and algorithms? |
| |
| A: The .xz format is documented in xz-file-format.txt. It is a container |
| format only, and doesn't include descriptions of any non-trivial |
| filters. |
| |
| Documenting LZMA and LZMA2 is planned, but for now, there is no other |
| documentation that the source code. Before you begin, you should know |
| the basics of LZ77 and range coding algorithms. LZMA is based on LZ77, |
| but LZMA is *a lot* more complex. Range coding is used to compress |
| the final bitstream like Huffman coding is used in Deflate. |
| |
| |
| Q: I cannot find BCJ and BCJ2 filters. Don't they exist in liblzma? |
| |
| A: BCJ filter is called "x86" in liblzma. BCJ2 is not included, |
| because it requires using more than one encoded output stream. |
| |
| |
| Q: How do I build a program that needs liblzmadec (lzmadec.h)? |
| |
| A: liblzmadec is part of LZMA Utils. XZ Utils has liblzma, but no |
| liblzmadec. The code using liblzmadec should be ported to use |
| liblzma instead. If you cannot or don't want to do that, download |
| LZMA Utils from <http://tukaani.org/lzma/>. |
| |
| |
| Q: The default build of liblzma is too big. How can I make it smaller? |
| |
| A: Give --enable-small to the configure script. Use also appropriate |
| --enable or --disable options to include only those filter encoders |
| and decoders and integrity checks that you actually need. Use |
| CFLAGS=-Os (with GCC) or equivalent to tell your compiler to optimize |
| for size. See INSTALL for information about configure options. |
| |
| If the result is still too big, take a look at XZ Embedded. It is |
| a separate project, which provides a limited but signinificantly |
| smaller XZ decoder implementation than XZ Utils. |
| |