動的にSnapパッケージの圧縮形式を変更する仕組みの検討
以前「Snap」パッケージの圧縮形式を変更し、アプリの起動時間を大幅に短縮する取り組みを紹介しました。そして次に状況に応じて動的にSnapパッケージの圧縮形式を変更する仕組みが検討されています。
ソフトウェアの起動時間とパッケージサイズのトレードオフ
アプリの起動に時間がかかる課題に対し開発チームは、パッケージの圧縮形式に「LZO」を導入することでこの課題に対応しました。これによりアプリの起動時間が2倍から3倍程度短縮されました。
しかしその一方でパッケージのサイズは増加しました。
パッケージに含まれるファイル構成にもよりますが、約1.3倍ほどサイズが増大しています。
これら2つの要素はお互いにトレードオフの関係にあり、多くのユーザーにとってどこで線を引くのが好ましいのか、開発者にとっては悩ましい問題です。
ソフトウェアが動作する環境
「Snap」はデスクトップアプリのためだけに作られた仕組みではなく、PCと異なり大幅にハードウェアリソースが制限されるIoTや組み込みシステムでも利用されている仕組みです。例えば「Ubuntu Core」はIoT/組み込みシステム向けに最適化されたOSです。
「Ubuntu Core」はまさしくSnapsで構成されたOSです。
このような環境はPCと比べストレージサイズに大きな余裕がなく、パッケージサイズの小ささが重要視されるケースもあります。
なぜ圧縮形式にXZを採用していたのか
以前Snapsでは、圧縮形式に「XZ」のみをサポートしていました。「XZ」が採用された主な理由は、互換性とサイズでした。
Snapsを特定のLinuxディストリビューションに依存しない仕組みにするため、様々な環境(Linux kernel)で利用可能な圧縮形式を選択する必要がありました。
これはLinuxディストリビューションによって採用している「Linux kernel」が異なるためであり、「Linux kernel」が幅広くサポートしている圧縮形式を採用し、多くの環境で互換性を確保する必要がありました。
またSnapsを提供する主要なプラットフォームの1つに、IoTデバイスがあります。
IoTデバイスはストレージに余裕がなく、可能な限りサイズを小さくする必要がありました。
そして当時これらの条件を満たす圧縮形式が「XZ」でした。
今でこそ「ZSTD」のように新たに利用可能になった圧縮形式(アルゴリズム)もあります。
しかし当時このような圧縮形式は存在していませんでした。
LZOの採用
先に紹介したようにアプリの起動に時間がかかる課題がユーザーから寄せられました。これに対応するためパッケージの圧縮形式に新たに「LZO」が追加されました。
「LZO」は古い「Linux kernel」やシステムでも利用可能であり、他の圧縮方式と比較して相対的にパフォーマンスが高く、また圧縮率も好ましくストレージの使用量やネットワークの使用量を節約でき、「XZ」採用時に条件となっていた前提を十分に満たす圧縮形式であったためです。
これでパッケージの圧縮形式に「XZ」か「LZO」を利用できるようになりました。
Snapアプリの開発者は「snapcraft.yaml」の「compression」で「xz」か「lzo」を指定し、Snapアプリのビルド時に圧縮形式を選択できるようになりました。
ちなみにデフォルトの圧縮形式は「XZ」です。
ここまでが現状です。
動的に圧縮形式を変更できるようにしてみてはどうだろうか?
ソフトウェアの起動時間とパッケージサイズは、トレードオフの関係にあります。そして様々なLinuxディストリビューションでSnapsを利用できるようにするためには、幅広く利用可能な圧縮形式を選択する必要があります。
そしてそれらをうまく満たす圧縮形式が採用されています。
しかし個々のユーザーから見ると、自身の環境にとって最も都合の良い圧縮形式を利用したいと思うでしょう。
新しい「Linux kernel」を利用し従来より優れた圧縮形式を利用できるのならば、ユーザーはその圧縮形式を利用したいと考えるでしょう。
またソフトウェアの起動時間よりサイズの小ささを重視するユーザーもいれば、サイズは気にせずパフォーマンスを最大限重視するユーザーもいるでしょう。
後者のユーザーの中には圧縮すら不要と考えるユーザーもいるかもしれません。
これらを実現するため、「Snap Store」もしくはユーザーの環境でパッケージを動的に圧縮し直すような仕組みが検討されています。
具体的な内容はまだこれからです。