XZ Utils is free general-purpose data compression software with a high compression ratio https://tukaani.org/xz/
Go to file
Lasse Collin 0c09810cb3 Use LZMA_PROG_ERROR in lzma_code() as documented in base.h. 2009-01-20 10:35:15 +02:00
debug Update some files in debug directory. 2008-12-31 17:42:50 +02:00
doc Put the file format specification into the public domain. 2008-12-09 17:43:31 +02:00
extra Fixed a bug in 7z2lzma.bash to make it work with .7z files 2009-01-15 14:27:32 +02:00
lib Oh well, big messy commit again. Some highlights: 2008-11-19 20:46:52 +02:00
m4 Oh well, big messy commit again. Some highlights: 2008-11-19 20:46:52 +02:00
po Renamed lzma to xz and lzmadec to xzdec. We create symlinks 2008-11-19 23:52:24 +02:00
src Use LZMA_PROG_ERROR in lzma_code() as documented in base.h. 2009-01-20 10:35:15 +02:00
tests Disable Subblock filter from test_compress.sh since it is 2008-12-31 18:59:02 +02:00
AUTHORS Prepare for 4.999.7beta release. 2008-12-31 17:41:46 +02:00
COPYING Tell in COPYING that everything in tests/files is 2008-01-07 14:20:57 +02:00
COPYING.GPLv2 Imported to git. 2007-12-09 00:42:33 +02:00
COPYING.GPLv3 Imported to git. 2007-12-09 00:42:33 +02:00
COPYING.LGPLv2.1 Imported to git. 2007-12-09 00:42:33 +02:00
ChangeLog Imported to git. 2007-12-09 00:42:33 +02:00
Doxyfile.in Imported to git. 2007-12-09 00:42:33 +02:00
Makefile.am Automake includes the m4 directory, so don't add it in 2008-11-29 10:03:49 +02:00
NEWS Imported to git. 2007-12-09 00:42:33 +02:00
README Prepare for 4.999.7beta release. 2008-12-31 17:41:46 +02:00
THANKS Updated THANKS. 2009-01-15 14:29:22 +02:00
TODO Imported to git. 2007-12-09 00:42:33 +02:00
autogen.sh * tests/test_block_header.c (test3): Remove duplicate initializer. 2007-12-09 17:07:01 +02:00
configure.ac Bumped version to 4.999.8beta right after the release 2008-12-31 20:01:00 +02:00

README

XZ Utils
--------

Warning

    This is a beta version. Don't trust the files produced by
    this version of the software - not even if the software can
    uncompress the files properly! This is because the file format
    isn't officially frozen yet although changes are very unlikely.

    So please test a lot, but don't use for anything serious yet.


Overview

    LZMA is a general purporse compression algorithm designed by
    Igor Pavlov as part of 7-Zip. It provides high compression ratio
    while keeping the decompression speed fast.

    XZ Utils are an attempt to make LZMA compression easy to use
    on free (as in freedom) operating systems. This is achieved by
    providing tools and libraries which are similar to use than the
    equivalents of the most popular existing compression algorithms.

    XZ Utils consist of a few relatively separate parts:
      * liblzma is an encoder/decoder library with support for several
        filters (algorithm implementations). The primary filter is LZMA.
      * libzfile (or whatever the name will be) enables reading from and
        writing to gzip, bzip2 and LZMA compressed and uncompressed files
        with an API similar to the standard ANSI-C file I/O.
        [ NOTE: libzfile is not implemented yet. ]
      * xz command line tool has almost identical syntax than gzip
        and bzip2. It makes LZMA easy for average users, but also
        provides advanced options to finetune the compression settings.
      * A few shell scripts make diffing and grepping LZMA compressed
        files easy. The scripts were adapted from gzip and bzip2.


Supported platforms

    XZ Utils are developed on GNU+Linux, but they should work at
    least on *BSDs and Solaris. They probably work on some other
    POSIX-like operating systems too.

    If you use GCC to compile XZ Utils, you need at least version
    3.x.x. GCC version 2.xx.x doesn't support some C99 features used
    in XZ Utils source code, thus GCC 2 won't compile XZ Utils.

    If you have written patches to make XZ Utils to work on previously
    unsupported platform, please send the patches to me! I will consider
    including them to the official version. It's nice to minimize the
    need of third-party patching.

    One exception: Don't request or send patches to change the whole
    source package to C89. I find C99 substantially nicer to write and
    maintain. However, the public library headers must be in C89 to
    avoid frustrating those who maintain programs, which are strictly
    in C89 or C++.


Version numbering

    The version number of XZ Utils has absolutely nothing to do with
    the version number of LZMA SDK or 7-Zip. The new version number
    format of XZ Utils is X.Y.ZS:

      - X is the major version. When this is incremented, the library
        API and ABI break.

      - Y is the minor version. It is incremented when new features are
        added without breaking existing API or ABI. Even Y indicates
        stable release and odd Y indicates unstable (alpha or beta
        version).

      - Z is the revision. This has different meaning for stable and
        unstable releases:
          * Stable: Z is incremented when bugs get fixed without adding
            any new features.
          * Unstable: Z is just a counter. API or ABI of features added
            in earlier unstable releases having the same X.Y may break.

      - S indicates stability of the release. It is missing from the
        stable releases where Y is an even number. When Y is odd, S
        is either "alpha" or "beta" to make it very clear that such
        versions are not stable releases. The same X.Y.Z combination is
        not used for more than one stability level i.e. after X.Y.Zalpha,
        the next version can be X.Y.(Z+1)beta but not X.Y.Zbeta.


configure options

    If you are not familiar with `configure' scripts, read the file
    INSTALL first.

    In most cases, the default --enable/--disable/--with/--without options
    are what you want. Don't touch them if you are unsure.

    --disable-encoder
                Do not compile the encoder component of liblzma. This
                implies --disable-match-finders. If you need only
                the decoder, you can decrease the library size
                dramatically with this option.

                The default is to build the encoder.

    --disable-decoder
                Do not compile the decoder component of liblzma.

                The default is to build the decoder.

    --enable-filters=
                liblzma supports several filters. See liblzma-intro.txt
                for a little more information about these.

                The default is to build all the filters.

    --enable-match-finders=
                liblzma includes two categories of match finders:
                hash chains and binary trees. Hash chains (hc3 and hc4)
                are quite fast but they don't provide the best compression
                ratio. Binary trees (bt2, bt3 and bt4) give excellent
                compression ratio, but they are slower and need more
                memory than hash chains.

                You need to enable at least one match finder to build the
                LZMA filter encoder. Usually hash chains are used only in
                the fast mode, while binary trees are used to when the best
                compression ratio is wanted.

                The default is to build all the match finders.

    --enable-checks=
                liblzma support multiple integrity checks. CRC32 is
                mandatory, and cannot be omitted. See liblzma-intro.txt
                for more information about usage of the integrity checks.

    --disable-assembler
                liblzma includes some assembler optimizations. Currently
                there is only assembler code for CRC32 and CRC64 for
                32-bit x86.

                All the assembler code in liblzma is position-independent
                code, which is suitable for use in shared libraries and
                position-independent executables. So far only i386
                instructions are used, but the code is optimized for i686
                class CPUs. If you are compiling liblzma exclusively for
                pre-i686 systems, you may want to disable the assembler
                code.

    --enable-small
                Omits precomputed tables. This makes liblzma a few KiB
                smaller. Startup time increases, because the tables need
                to be computed first.

    --enable-debug
                This enables the assert() macro and possibly some other
                run-time consistency checks. It slows down things somewhat,
                so you normally don't want to have this enabled.

    --enable-werror
                Makes all compiler warnings an error, that abort the
                compilation. This may help catching bugs, and should work
                on most systems. This has no effect on the resulting
                binaries.


Static vs. dynamic linking of the command line tools

    By default, the command line tools are linked statically against
    liblzma. There a are a few reasons:

      - The executable(s) can be in /bin while the shared liblzma can still
        be in /usr/lib (if the distro uses such file system hierachy).

      - It's easier to copy the executables to other systems, since they
        depend only on libc.

      - It's slightly faster on some architectures like x86.

    If you don't like this, you can get the command line tools linked
    against the shared liblzma by specifying --disable-static to configure.
    This disables building static liblzma completely.