XZ Utils

XZ Utils（以前のLZMA Utils）はフリーなコマンドライン可逆圧縮ソフトウェアのセットであり、LZMAとxzを含んでいる。Unix系オペレーティングシステムおよび、バージョン5.0以降のMicrosoft Windowsに対応している。

xzはgzipとbzip2のような代替ソフトウェアよりもより高い圧縮率になる。 伸長速度はbzip2より速いが、gzipよりも遅い。圧縮はgzipよりもだいぶ遅くなることがあり、高圧縮ではbzip2よりも遅い。圧縮されたファイルが多くの回数使われるときに最も有用となる。

XZ Utilsは大まかに2つの構成要素からなる。

 xz。コマンドラインの圧縮・伸長ソフトウェア（gzipに類似している）
 liblzma。zlibに似たAPIを持つライブラリ

様々なコマンドラインのショートカットがある。例えばlzma（xz --format=lzma）、unxz（xz --decompress。gunzipに類似している）、そしてxzcat（unxz --stdout。zcatに類似している）。

XZ Utilsはxzとlzmaファイル形式の両方を圧縮・伸長できるが、LZMA形式は今やレガシーであるため、 XZ Utilsはxz形式をデフォルトとして圧縮する。

実装 

ファイル形式の性質と同じようにソフトウェアの振る舞いもまた、Unix圧縮ツールのgzipとbzip2に似た動作になるように設計されている。これはIgor PavlovのLZMA-SDKのUnix移植版から構成されており、Unix環境とその通常の構造と振る舞いに対してシームレスに組み込むためになじむようにされている。

xzは2014年のバージョン5.2.0以降、マルチスレッド圧縮をサポートしている（-Tフラグ）。2019年時点ではスレッド化された伸長はまだ実装されていない。ファイルがスレッドに対して与えられた設定よりも十分に大きくはないか、あるいは使用しているスレッドがメモリ使用制限を超過しているならば、定義されているよりも少ないスレッド数になることがありうる。

ちょうどgzipとbzipのように、xzとlzmaは入力として単一のファイル（またはデータストリーム）を圧縮することしかできない。複数のファイルを単一のアーカイブへ束ねることはできない。それをするためには、最初にtarのようなアーカイブするプログラムを使用する。

アーカイブを圧縮する:
 xz   my_archive.tar    # 結果はmy_archive.tar.xzへ
 lzma my_archive.tar    # 結果はmy_archive.tar.lzmaへ

アーカイブを伸長する:
 unxz    my_archive.tar.xz      # 結果はmy_archive.tarへ
 unlzma  my_archive.tar.lzma    # 結果はmy_archive.tarへ

tarのGNU実装のバージョン1.22以降ではtarballのlzmaやxzへの透過的な圧縮をサポートしており、xz圧縮については--xzまたは-J、LZMA圧縮では--lzmaスイッチが使用できる。

アーカイブを作成して圧縮する:
 tar -c --xz   -f my_archive.tar.xz   /some_directory    # 結果はmy_archive.tar.xzへ
 tar -c --lzma -f my_archive.tar.lzma /some_directory    # 結果はmy_archive.tar.lzmaへ

アーカイブを伸長してその内容を展開する:
 tar -x --xz   -f my_archive.tar.xz      # 結果は/some_directoryへ
 tar -x --lzma -f my_archive.tar.lzma    # 結果は/some_directoryへ

開発と採用 

XZ Utilsの開発はTukaani Projectで行われている。Mike KeznerをリーダーとしてかつてSlackwareをベースとしたLinuxディストリビューションをメンテナンスしていた小さなグループだった。

xzとliblzmaのすべてのソースコードはパブリックドメインでリリースされている。XZ Utilsソースコード配布物は、付加的に、複数のGPLバージョンの対象となる、いくつかのオプションスクリプトとサンプルプログラムを含んでいる。

特に、配布されているXZ Utilsソフトウェアが含んでいるGPLスクリプトとソースコードの一覧は以下のとおりである。

 一般的なlibc関数であるのオプション実装（GNU GPL v2とGNU LGPL v2.1）
 pthreadを検出するm4スクリプト（GNU GPL v3）
 いくつかの必須でないラッパースクリプト（xzgrepなど）（GNU GPL v2）
 そしてサンプルプログラムscanlzma。これはビルドシステムに統合されていない。

結果としてxzとliblzmaのバイナリはパブリックドメインだが、例外的にオプションのLGPL 実装は統合されていない。

バイナリはFreeBSD、Linuxシステム、Microsoft Windows、そしてFreeDOSで利用できる。Fedora、Slackware、Ubuntu、そしてDebianを含む多くのLinuxディストリビューションがソフトウェアパッケージの圧縮にxzを使用している。Arch Linuxは以前はパッケージの圧縮にxzを使用していたが、2019年12月27日以降は、パッケージはZstandardで圧縮されている。GNUのFTPアーカイブもまたxzを使用している。

関連項目

参考文献

外部リンク
 Official Website
 SourceForge project page

データ圧縮
UNIXのソフトウェア
オープンソースソフトウェア
ユーティリティソフトウェア