XZ Utils (previously LZMA Utils) is a set of free software command-line lossless data compressors, including lzma and xz, for Unix-like operating systems and, from version 5.0 onwards, Microsoft Windows.
xz achieves higher compression rates than alternatives like gzip and bzip2. Decompression speed is faster than bzip2, but slower than gzip. Compression can be much slower than gzip, and is slower than bzip2 for high levels of compression, and is most useful when a compressed file will be used many times.
XZ Utils consists of two major components:
- xz, the command-line compressor and decompressor (analogous to gzip)
- liblzma, a software library with an API similar to zlib
Both the behavior of the software as well as the properties of the file format have been designed to work similarly to those of the popular Unix compressing tools gzip and bzip2. It consists of a Unix port of Igor Pavlov's LZMA-SDK that has been adapted to fit seamlessly into Unix environments and their usual structure and behavior.
xz support multi-threaded compression (
-T flag) since 2014, version 5.2.0., as of 2019 threaded decompression hasn’t been implemented yet. Number of threads can be less than defined if file is not big enough for threading with the given settings or if using more threads would exceed the memory usage limit.
Just like gzip and bzip, xz and lzma can only compress single files (or data streams) as input. They cannot bundle multiple files into a single archive – to do this an archiving program is used first, such as tar.
Compressing an archive:
xz my_archive.tar # results in my_archive.tar.xz lzma my_archive.tar # results in my_archive.tar.lzma
Decompressing the archive:
unxz my_archive.tar.xz # results in my_archive.tar unlzma my_archive.tar.lzma # results in my_archive.tar
Version 1.22 or greater of the GNU implementation of tar has transparent support for tarballs compressed with lzma and xz, using the switches
-J for xz compression, and
--lzma for LZMA compression.
Creating an archive and compressing it:
tar -c --xz -f my_archive.tar.xz /some_directory # results in my_archive.tar.xz tar -c --lzma -f my_archive.tar.lzma /some_directory # results in my_archive.tar.lzma
Decompressing the archive and extracting its contents:
tar -x --xz -f my_archive.tar.xz # results in /some_directory tar -x --lzma -f my_archive.tar.lzma # results in /some_directory
Single letter tar example for archive with compress and decompress with extract using short suffix
tar cJf keep.txz keep # archive then compress the directory ./keep/ into the file ./keep.txz tar xJf keep.txz # decompress then extract the file ./keep.txz creating the directory ./keep/
The xz format
The xz format improves on lzma by allowing for preprocessing filters. The exact filters used are similar to those used in 7z, as 7z's filters are available in public domain via the LZMA SDK.
Development and adoption
All of the source code for xz and liblzma has been released into the public domain. The XZ Utils source distribution additionally includes some optional scripts and an example program that are subject to various versions of the GPL.
Specifically, the full list of GPL scripts and sources distributed with the XZ Utils software include:
- An optional implementation of a common libc function, getopt (GNU GPL v2 and GNU LGPL v2.1)
- An m4 script for pthread detection (GNU GPL v3)
- Some nonessential wrapper scripts (xzgrep, etc) (GNU GPL v2)
- And the example program scanlzma, which is not integrated with the build system
Binaries are available for FreeBSD, Linux systems, Microsoft Windows, and FreeDOS. A number of Linux distributions, including Fedora, Slackware, Ubuntu, and Debian use xz for compressing their software packages. Arch Linux previously used xz to compress packages, but as of December 27, 2019, packages are compressed with Zstandard compression. The GNU FTP archive also uses xz.
- "XZ Utils Release Notes". [git repo]. Lasse Collin. 2020-03-17. Retrieved 2020-03-30.
- Licensing on tukaani.org "The most interesting parts of XZ Utils (e.g. liblzma) are in the public domain. You can do whatever you want with the public domain parts. Some parts of XZ Utils (e.g. build system and some utilities) are under different free software licenses such as GNU LGPLv2.1, GNU GPLv2, or GNU GPLv3."
- Henry-Stocker, Sandra (2017-12-12). "How to squeeze the most out of Linux file compression". Network World. Retrieved 2020-02-09.
- "Gzip vs Bzip2 vs XZ Performance Comparison". RootUsers. 2015-09-16. Retrieved 2020-02-09.
- LZMA Utils, retrieved 2011-01-25
- "In what cases is the output of a GPL program covered by the GPL too?". GNU.org. Retrieved 21 August 2019.
- Pierre Schmitz (2010-03-23). "News: Switching to xz compression for new packages".
- "Arch Linux - News: Now using Zstandard instead of xz for package compression". www.archlinux.org. Retrieved 2020-01-07.