ZFS
「Ubuntu 16.04」では、コンテナー向けに「ZFS」がデフォルトで利用できるようになる予定です。(Native ZFS、ZFS on Linux)ZFSとは
「ZFS」は、Ubuntuデスクトップでよく利用される「ext4」ファイルシステムと、「LVM(Logical Volume Manager)」を組み合わせたような特徴を持つファイルシステムです。「ext4」ファイルシステムはファイル(データ)を管理する仕組みを提供しています。
「LVM」では、例えば以前紹介した「MD(mdadm)」のような複数の物理ボリュームを1つの論理ボリュームで扱うような仕組みを提供しています。
その最たる例はRAIDです。
「ZFS」はファイルシステムでありながら「LVM」のような機能も提供します。
さらにデータの圧縮やスナップショットの作成など、ファイルシステムと他のソフトウェアを組み合わせて実現するような機能も提供します。
ZFSを利用するにはドライバーが必要
「ZFS」を利用するには「ZFS」の機能を実現するカーネルモジュール(ドライバー)が必要です。「Ubuntu 16.04」では、「ZFS」のカーネルモジュールがデフォルトで提供される予定です。
あくまで「ZFS」のカーネルモジュールがデフォルトで提供されるというだけで、使用するかどうかはユーザー次第です。
デスクトップユーザーが使用するファイルシステムではない
上記の通り「ZFS」は多機能なファイルシステムですが、一般的なデスクトップユーザーが使用するファイルシステムではありません。少なくとも「Ubuntu 16.04」のインストーラーが「ZFS」を標準のファイルシステムとして採用することはありません。
標準のファイルシステムは従来通り「ext4」でしょう。
ですので、デスクトップ用途でUbuntuを利用しているなら「ZFS」のことは気にしなくて良いです。
Canonicalによりサポートされる
「ZFS」のカーネルモジュールは「Canonical」によりサポートされます。「Ubuntu 16.04」は2年に一度のLTSリリースになるため、「Ubuntu 16.04」で提供される「ZFS」のカーネルモジュールのサポート期間は「Ubuntu 16.04」がリリースされてから5年間になります。
すなわち、2021年4月まで「ZFS」のカーネルモジュールのサポートが行われます。
Ubuntu 15.10でのZFS
「Ubuntu 15.10」では、64bit版に限りテクニカルプレビュー版として「ZFS」が利用可能です。インストールは簡単
Ubuntuの公式リポジトリーから簡単に「ZFS」カーネルモジュールをインストールすることができます。「zfsutils-linux」パッケージをインストールすれば、「ZFS」が利用できるようになります。
しかしビルド済みの「ZFS」のカーネルモジュールは含まれていません。
「ZFS」のカーネルモジュールがなければ、「ZFS」は利用できません。
DKMSでビルドを行う
ではどうしているのかというと、「DKMS」という仕組みを用いて「ZFS」のソースコードから「ZFS」のカーネルモジュールのビルドを行っています。上記のパッケージをインストールすると依存関係の指定により「zfs-dkms」パッケージもインストールされます。
この「zfs-dkms」パッケージに、「DKMS」によるビルドに必要なファイルが含まれています。
上記のパッケージをインストールした後や「Linux Kernel」がアップデートされた後、自動的に「ZFS」のカーネルモジュールのビルドが行われ、「Linux Kernel」に読み込まれます。
ZFSのソースコード
「ZFS」のソースコードも「zfs-dkms」パッケージに含まれています。「zfs-dkms」パッケージの中身を覗くと、以下のように「ZFS」のソースコードが含まれています。
Ubuntu 16.04ではビルド済みのZFSのカーネルモジュールを提供
Ubuntu 16.04ではビルド済みのZFSのカーネルモジュールを提供する予定であるため、クライアントでのビルド作業が必要無くなります。Linux KernelとZFSのライセンス
上記でも記述した通り、「Linux Kernel」のライセンスは「GPLv2」です。一方「ZFS」のライセンスは「CDDL」です。
この2つのライセンス間には相容れない条項が存在します。
ソースコードは混ぜられない
「GPLv2」でライセンスされたソースコードと「CDDL」でライセンスされたソースコードを混ぜて同じバイナリーを生成することはできません。Canonicalは問題ないと判断している
この件について「Canonical」は、お互いのライセンスに抵触せずビルド済みの「ZFS」カーネルモジュールを同梱し配布できるという解釈を主張しています。「ZFS on Linux」の「2.2 What is the licensing concern?」によると、ソースコードを混ぜて同じバイナリーを生成し配布することはできないけど、ソースコードを混ぜない形でバイナリーモジュールあるいはソースコードを配布するのは問題ない、と記述されています。
「Canonical」の主張は、以下のようになります。
我々Canonicalは、自由なソフトウェア界をリードする人達と議論を重ねつつ、「Linux Kernel」と「ZFS」に適用されるライセンスの法的な見直しを行った。
結果、両方のライセンスを順守しつつ「ZFS」カーネルモジュールを同梱できるという結論に至った。
「CDDL」と「GPLv2」はいずれもコピーレフトライセンスだが、適用対象が異なる。
「CDDL」は「CDDL」下にあるファイル全てに適用する。
一方「GPLv2」は、派生物に適用する。
「CDDL」は「Linux kernel」に適用することはできない。
何故ならば「zfs.ko(ZFSカーネルモジュール)」は自己完結型のファイルシステムモジュールである。
「Linux kernel」自身、「ZFS」ファイルシステムの派生物ではないことは明白である。
そして「zfs.ko」も「Linux kernel」の派生物ではないことは明白であり、「zfs.ko」は「OpenZFS」及び「OpenSolaris」の派生物であることも明白である。
様々な他の自己完結型のモジュールにおいて、同等の例外は何年にも渡って存在している。
GPLではない「nvidia.ko」プロプライエタリーカーネルモジュールがその例である。
我々が出した結論は、Ubuntuのユーザーにとっても、Linuxにとっても、そしてすべての自由なソフトウェアとオープソースソフトウェアにとっても価値のある結論である。
参考
- ZFS is *the* FS for Containers in Ubuntu 16.04!
- ZFS Licensing and Linux(ubuntu insights)
- ZFS Licensing and Linux(Dustin Kirkland)
- ZFS
- 2.2 What is the licensing concern?
- Ubuntu Kernel Team ZFS Reference Guide
- ZFS Will Be Baked Directly into Ubuntu 16.04 LTS and Supported by Canonical
- Canonical announced that support for the ZFS (Z File System) will be available in Ubuntu 16.04 LTS, but a lot of users have been asking about a possible license conflict. Canonical’s Dustin Kirkland explained why that’s not a problem.