Snappy
「Ubuntu 16.04」では、「Canonical」が開発した新しいパッケージ形式である「Snappy」パッケージが利用可能になります。「Snappy」は、「Ubuntu Touch」ですでに導入されている仕組みです。
debパッケージがそうであるように、「Snappy」パッケージもアプリケーションなどのソフトウェアをパッケージにしたものです。
「Snappy」を略して「snap」や複数形の「snaps」と表記します。
なぜsnapを開発しUbuntu 16.04で導入するのか
上記のアナウンスから関係するところを抜粋します。Ubuntu Phoneプラットフォームの開発及びUbuntu PhoneプラットフォームのIoTやデバイスへの展開において、我々はセキュリティーや信頼性の本質的な問題の解決に取り組む必要があった。
これらの問題はデスクトップやサーバーシステムにも同様に当てはまる。
新しいバージョンのKDEやGNOME、ブラウザー、その他デスクトップ環境のアプリは、大抵古いバージョンのUbuntu LTS版でも簡単にビルドできるだろう。
しかしdebパッケージの作成やアップデートの提供は複雑であり、我々が古いバージョンのUbuntu LTS版に新しいバージョンのソフトウェアを提供することは困難である。
これらの問題はUbuntu LTS版でより新しいバージョンのソフトウェアを必要とするユーザーや開発者達を、落胆させる原因になっている。
これらの状況を踏まえ我々は、snapパッケージフォーマットとsnapを操作するツールを開発した。
snapパッケージを利用すると、開発者はより新しいバージョンのアプリをUbuntu 16.04に導入できる。
debパッケージと共存可能
現在Ubuntuで広く使われているdebパッケージとsnapパッケージは共存可能です。そのため、ユーザーは特に意識すること無く今までどおりの操作でdebパッケージのインストールやアップデート等の操作を行うことができます。
従って、既存の何かの機能を置き換えるものではなく、新しい機能が追加されたと捉えると良いでしょう。
Ubuntu 16.04では、debパッケージだけでなくsnapパッケージもインストールできるようになる。
これら2種類のパッケージフォーマットは、お互い完全に共存できる。
そのため、OSの開発やアップデートといった我々の既存の作業も継続して行えるし、Debianコミュニティーとの関係も強化しつつ、開発者やコミュニティーはUbuntuのユーザーにsnapパッケージもしくはdebパッケージでソフトウェアを提供できる。
もしユーザーが使いたいアプリがsnapパッケージでのみ提供されている場合、ユーザーはそのsnapパッケージをインストールすれば良いです。
もし同じアプリがdebパッケージでもsnapパッケージでも提供されている場合、利用したい方のパッケージをインストールすれば良いです。
違いはそのアプリの開発者が紹介してくれるでしょう。
例えば、アプリのバージョンの違いや、アプリがサポートしているUbuntuのバージョンの違いなどです。
もちろん両パッケージは共存可能なので、両パッケージをインストールすることも可能です。
snapは既存のシステムや他のアプリに影響を与えない
debパッケージとsnapパッケージが共存できる理由がこれです。snapパッケージのセキュリティーの仕組みにより、snapアプリケーションは既存のシステムから切り離されて配置されるため、ユーザーは他のアプリやシステムに与える影響を心配すること無く、snapアプリケーションをインストールできる。
snapパッケージは取り外し可能なパーツであり、アプリが動作するのに必要な環境をすべて備えており、snapアプリケーションはsnapパッケージが提供する環境で完結して動作できる、ということです。
なのでsnapパッケージには、アプリが動作するのに必要なライブラリー等がすべて含まれています。
ユーザーが受けるメリット以上に開発者が受けるメリットの方が大きい
snapパッケージの導入によるメリットは、ユーザーが受けるメリット以上に開発者が受けるメリットがの方が大きいです。開発者は、アプリの更新周期を都合の良い更新周期に設定し、アプリと特定のバージョンのライブラリーをセットにしてユーザーに提供できる。
そしてsnapパッケージのトランザクショナルアップデートにより、安定性と信頼性も提供できる。
Ubuntu 16.04にsnapパッケージを導入することで、開発者はPC向け、サーバー向け、モバイル向け、そしてIoTデバイス向けにソフトウェアを一元的に開発・提供できるようになる。
Snapcraftはsnap開発のためのツールである。
Snapcraftを利用すれば開発者は、アプリや依存するライブラリーを簡単にパッケージ化できる。
開発者はsnapパッケージで開発することで、テスト用の環境を用意したり仮想マシンで環境を用意しなくても、自分のデスクトップで開発やテストが行えるようになる。
snapが既存のシステムや他のアプリに影響を与えないからこそ、できることですね。
有料アプリはsnapに移行する
いままでdebパッケージで提供されていた有料アプリは、snapパッケージに移行します。今まで有料アプリの開発者は、様々なライブラリーとの依存関係や互換性を管理する必要があり、この管理にしばしばストレスを感じてきた。
特に古いUbuntuにアプリを提供する場合、強いストレスを感じてきた。
このため、2016年8月に有料アプリはdebパッケージによる提供からsnapパッケージによる提供に移行する。
Canonicalは、snapパッケージへの移行を支援するため、今後数ヶ月以内に開発者のコミュニティーと連携してトレーニングやドキュメントの整備といった作業を行う。
有料アプリの開発者にとって頭痛のタネは、アプリが依存するライブラリーの管理です。
debパッケージで提供されるライブラリーのバージョンがいくつであるか、あるいは、そもそもライブラリーが存在するかどうかは、Ubuntuのバージョンによって異なります。
アプリの開発者がUbuntu 12.04もサポートしたいが、Ubuntu 12.04に必要なライブラリーが存在しないケースや、ライブラーのバージョンが古くアプリが必要とする機能を提供していないケースもあります。
しかもそのライブラリーがUbuntuの骨幹となるアプリも利用している場合、勝手にアプリがライブラリーのバージョンをアップさせるわけにもいきません。
依存関係が壊れる可能性もあります。
Windowsで言うところの「DLL地獄」ですね。
逆もまた然りで、アプリの開発者は今後リリースされるUbuntuでもアプリが動作することを期待します。
Ubuntu 16.10でもUbuntu 17.04でもアプリがそのまま動作することに越したことはありません。
これらの問題に対する1つの解が、snapパッケージです。
Ubuntuは、有償アプリを販売する仕組みを提供しており、有料アプリの開発者はUbuntu Storeを通じて販売することもできます。
開発者の取り分は80%とのことです。
debパッケージはなくならない
debパッケージはなくなりません。Ubuntu 16.04以降もdebパッケージはサポートされます。
「snap」と「deb」は用途や状況に応じて使い分ける事になると思います。
snapは既存の資産を受け継ぎつつも、Ubuntuのコミュニティーにとって主要な新機能となる。
deb形式で提供される何万ものアプリやパッケージは、Ubuntu 16.04以降もサポートしていく。
パッケージの操作方法が異なる
「snap」は、既存のパッケージ管理システムとは異なるシステムなので、「apt/apt-get」コマンドで「snap」パッケージのインストールやアップデートは行えません。この操作方法の違いをデスクトップユーザーにどう見せるのかは、今後明らかになっていくでしょう。
おそらくユーザーにパッケージの違いを意識させないように「GNOMEソフトウェア」や「ソフトウェアの更新」でパッケージの違いを吸収していくかと思われます。
参考
- Adding snaps for secure, transactional packages in Ubuntu 16.04 LTS
- Snappy Ubuntu Core
- Canonical, through Olli Ries, has had the enormous pleasure of announcing that the upcoming Ubuntu 16.04 LTS (Xenial Xerus) operating system will offer users the possibility of installing snaps alongside the standard Debian packages.
- Snap! Ubuntu 16.04 Just Made Installing New Apps MUCH Easier