OLD | NEW |
(Empty) | |
| 1 |
| 2 XZ Utils |
| 3 ======== |
| 4 |
| 5 0. Overview |
| 6 1. Documentation |
| 7 1.1. Overall documentation |
| 8 1.2. Documentation for command line tools |
| 9 1.3. Documentation for liblzma |
| 10 2. Version numbering |
| 11 3. Reporting bugs |
| 12 4. Other implementations of the .xz format |
| 13 5. Contact information |
| 14 |
| 15 |
| 16 0. Overview |
| 17 ----------- |
| 18 |
| 19 XZ Utils provide a general-purpose data compression library and |
| 20 command line tools. The native file format is the .xz format, but |
| 21 also the legacy .lzma format is supported. The .xz format supports |
| 22 multiple compression algorithms, which are called "filters" in |
| 23 context of XZ Utils. The primary filter is currently LZMA2. With |
| 24 typical files, XZ Utils create about 30 % smaller files than gzip. |
| 25 |
| 26 To ease adapting support for the .xz format into existing applications |
| 27 and scripts, the API of liblzma is somewhat similar to the API of the |
| 28 popular zlib library. For the same reason, the command line tool xz |
| 29 has similar command line syntax than that of gzip. |
| 30 |
| 31 When aiming for the highest compression ratio, LZMA2 encoder uses |
| 32 a lot of CPU time and may use, depending on the settings, even |
| 33 hundreds of megabytes of RAM. However, in fast modes, LZMA2 encoder |
| 34 competes with bzip2 in compression speed, RAM usage, and compression |
| 35 ratio. |
| 36 |
| 37 LZMA2 is reasonably fast to decompress. It is a little slower than |
| 38 gzip, but a lot faster than bzip2. Being fast to decompress means |
| 39 that the .xz format is especially nice when the same file will be |
| 40 decompressed very many times (usually on different computers), which |
| 41 is the case e.g. when distributing software packages. In such |
| 42 situations, it's not too bad if the compression takes some time, |
| 43 since that needs to be done only once to benefit many people. |
| 44 |
| 45 With some file types, combining (or "chaining") LZMA2 with an |
| 46 additional filter can improve compression ratio. A filter chain may |
| 47 contain up to four filters, although usually only one two is used. |
| 48 For example, putting a BCJ (Branch/Call/Jump) filter before LZMA2 |
| 49 in the filter chain can improve compression ratio of executable files. |
| 50 |
| 51 Since the .xz format allows adding new filter IDs, it is possible that |
| 52 some day there will be a filter that is, for example, much faster to |
| 53 compress than LZMA2 (but probably with worse compression ratio). |
| 54 Similarly, it is possible that some day there is a filter that will |
| 55 compress better than LZMA2. |
| 56 |
| 57 XZ Utils doesn't support multithreaded compression or decompression |
| 58 yet. It has been planned though and taken into account when designing |
| 59 the .xz file format. |
| 60 |
| 61 |
| 62 1. Documentation |
| 63 ---------------- |
| 64 |
| 65 1.1. Overall documentation |
| 66 |
| 67 README This file |
| 68 |
| 69 INSTALL.generic Generic install instructions for those not familiar |
| 70 with packages using GNU Autotools |
| 71 INSTALL Installation instructions specific to XZ Utils |
| 72 PACKAGERS Information to packagers of XZ Utils |
| 73 |
| 74 COPYING XZ Utils copyright and license information |
| 75 COPYING.GPLv2 GNU General Public License version 2 |
| 76 COPYING.GPLv3 GNU General Public License version 3 |
| 77 COPYING.LGPLv2.1 GNU Lesser General Public License version 2.1 |
| 78 |
| 79 AUTHORS The main authors of XZ Utils |
| 80 THANKS Incomplete list of people who have helped making |
| 81 this software |
| 82 NEWS User-visible changes between XZ Utils releases |
| 83 ChangeLog Detailed list of changes (commit log) |
| 84 TODO Known bugs and some sort of to-do list |
| 85 |
| 86 Note that only some of the above files are included in binary |
| 87 packages. |
| 88 |
| 89 |
| 90 1.2. Documentation for command line tools |
| 91 |
| 92 The command line tools are documented as man pages. In source code |
| 93 releases (and possibly also in some binary packages), the man pages |
| 94 are also provided in plain text (ASCII only) and PDF formats in the |
| 95 directory "doc/man" to make the man pages more accessible to those |
| 96 whose operating system doesn't provide an easy way to view man pages. |
| 97 |
| 98 |
| 99 1.3. Documentation for liblzma |
| 100 |
| 101 The liblzma API headers include short docs about each function |
| 102 and data type as Doxygen tags. These docs should be quite OK as |
| 103 a quick reference. |
| 104 |
| 105 I have planned to write a bunch of very well documented example |
| 106 programs, which (due to comments) should work as a tutorial to |
| 107 various features of liblzma. No such example programs have been |
| 108 written yet. |
| 109 |
| 110 For now, if you have never used liblzma, libbzip2, or zlib, I |
| 111 recommend learning *basics* of zlib API. Once you know that, it |
| 112 should be easier to learn liblzma. |
| 113 |
| 114 http://zlib.net/manual.html |
| 115 http://zlib.net/zlib_how.html |
| 116 |
| 117 |
| 118 2. Version numbering |
| 119 -------------------- |
| 120 |
| 121 The version number format of XZ Utils is X.Y.ZS: |
| 122 |
| 123 - X is the major version. When this is incremented, the library |
| 124 API and ABI break. |
| 125 |
| 126 - Y is the minor version. It is incremented when new features are |
| 127 added without breaking existing API or ABI. Even Y indicates |
| 128 stable release and odd Y indicates unstable (alpha or beta |
| 129 version). |
| 130 |
| 131 - Z is the revision. This has different meaning for stable and |
| 132 unstable releases: |
| 133 * Stable: Z is incremented when bugs get fixed without adding |
| 134 any new features. |
| 135 * Unstable: Z is just a counter. API or ABI of features added |
| 136 in earlier unstable releases having the same X.Y may break. |
| 137 |
| 138 - S indicates stability of the release. It is missing from the |
| 139 stable releases where Y is an even number. When Y is odd, S |
| 140 is either "alpha" or "beta" to make it very clear that such |
| 141 versions are not stable releases. The same X.Y.Z combination is |
| 142 not used for more than one stability level i.e. after X.Y.Zalpha, |
| 143 the next version can be X.Y.(Z+1)beta but not X.Y.Zbeta. |
| 144 |
| 145 |
| 146 3. Reporting bugs |
| 147 ----------------- |
| 148 |
| 149 Naturally it is easiest for me if you already know what causes the |
| 150 unexpected behavior. Even better if you have a patch to propose. |
| 151 However, quite often the reason for unexpected behavior is unknown, |
| 152 so here are a few things to do before sending a bug report: |
| 153 |
| 154 1. Try to create a small example how to reproduce the issue. |
| 155 |
| 156 2. Compile XZ Utils with debugging code using configure switches |
| 157 --enable-debug and, if possible, --disable-shared. If you are |
| 158 using GCC, use CFLAGS='-O0 -ggdb3'. Don't strip the resulting |
| 159 binaries. |
| 160 |
| 161 3. Turn on core dumps. The exact command depends on your shell; |
| 162 for example in GNU bash it is done with "ulimit -c unlimited", |
| 163 and in tcsh with "limit coredumpsize unlimited". |
| 164 |
| 165 4. Try to reproduce the suspected bug. If you get "assertion failed" |
| 166 message, be sure to include the complete message in your bug |
| 167 report. If the application leaves a coredump, get a backtrace |
| 168 using gdb: |
| 169 $ gdb /path/to/app-binary # Load the app to the debugger. |
| 170 (gdb) core core # Open the coredump. |
| 171 (gdb) bt # Print the backtrace. Copy & paste to bug report. |
| 172 (gdb) quit # Quit gdb. |
| 173 |
| 174 Report your bug via email or IRC (see Contact information below). |
| 175 Don't send core dump files or any executables. If you have a small |
| 176 example file(s) (total size less than 256 KiB), please include |
| 177 it/them as an attachment. If you have bigger test files, put them |
| 178 online somewhere and include an URL to the file(s) in the bug report. |
| 179 |
| 180 Always include the exact version number of XZ Utils in the bug report. |
| 181 If you are using a snapshot from the git repository, use "git describe" |
| 182 to get the exact snapshot version. If you are using XZ Utils shipped |
| 183 in an operating system distribution, mention the distribution name, |
| 184 distribution version, and exact xz package version; if you cannot |
| 185 repeat the bug with the code compiled from unpatched source code, |
| 186 you probably need to report a bug to your distribution's bug tracking |
| 187 system. |
| 188 |
| 189 |
| 190 4. Other implementations of the .xz format |
| 191 ------------------------------------------ |
| 192 |
| 193 7-Zip and the p7zip port of 7-Zip support the .xz format starting |
| 194 from the version 9.00alpha. |
| 195 |
| 196 http://7-zip.org/ |
| 197 http://p7zip.sourceforge.net/ |
| 198 |
| 199 XZ Embedded is a limited implementation written for use in the Linux |
| 200 kernel, but it is also suitable for other embedded use. |
| 201 |
| 202 http://tukaani.org/xz/embedded.html |
| 203 |
| 204 |
| 205 5. Contact information |
| 206 ---------------------- |
| 207 |
| 208 If you have questions, bug reports, patches etc. related to XZ Utils, |
| 209 contact Lasse Collin <lasse.collin@tukaani.org> (in Finnish or English). |
| 210 tukaani.org uses greylisting to reduce spam, thus when you send your |
| 211 first email, it may get delayed by a few hours. In addition to that, |
| 212 I'm sometimes slow at replying. If you haven't got a reply within two |
| 213 weeks, assume that your email has got lost and resend it or use IRC. |
| 214 |
| 215 You can find me also from #tukaani on Freenode; my nick is Larhzu. |
| 216 The channel tends to be pretty quiet, so just ask your question and |
| 217 someone may wake up. |
| 218 |
OLD | NEW |