コンテナ技術の普及に対して払拭しきれない不安要素は技術的な話ではない。それは、知財権に関する問題である。
コンテナの特徴はなにか?
マシン仮想化となにが違うか?
というと、この絵が端的にそれを表しているのではないだろうか。
もし、この絵が正しい場合、不安は相変わらず払拭できない。
そもそもコンテナ技術とは?
https://jpn.nec.com/cloud/service/container/about.html
この絵のポイントは、
アプリケーションの稼働に必要なもの一切がっさいを
コンテナという箱に詰め込んで、その上でアプリを動
かすということである。
重要なことは、ライブラリ、その他実行に必要なもの がOSではなく、コンテナに入っていることである。
普通、アプリケーションは動作するために動的リンクライブラリ(シェアードライブラリ)を実行時に必要に応じて呼び出す。 このライブラリは通常はOSに導入される。
ここで、ポータビリティ上の問題が起きる。 アプリケーションを別のマシンへ持って行く場合には、ライブラリをあらかじめ持って行くさきのOSにインストールする必要がある。 これは面倒である。
一つの回避策は動的リンクライブラリを使わずに静的リンクすることである。 こうすればバイナリイメージのなかにアプリが動作するのに必要なライブラリを同梱できる。
コンテナはこれに似たイメージであろうと思う。
コンテナと静的リンクライブラリの違いはなにかと言えば、実行環境がついていることだろう。 実行環境は何をしているのだろうか。
たぶん、環境の差異を吸収するために以下のようなことをしているのではないかと思う。
動的ライブラリがコンテナに含まれていれば、それを使う
含まれていなければ、OS上のライブラリを探して読み出す
データをOSではなく、一時保管用の仮想的なDISKに書き込む
読み出す時は、仮想DISKを先に検索し、データがあればそこから
読みだし、なければ、OSから読み出す
だから、コンテナのポータビリティはOSの違いは超えられないだろう。
Linux用に作ったバイナリがWindows環境でそのまま動作するとかいう話ではないのである。 では、なにが嬉しいのか?というと、静的リンクを使わなくても、アプリのライブラリに依存したポータビリティの課題を解決できることなのだろう。
ここまで、【良いこと】を並べたが、最後に懸念を書いておこう。
それは、ライブラリに関わる知財の課題である。
動的リンクライブラリというのはOSやミドルウェアに
付属するものである。大抵は。
それをコンテナにいれてポータブル(配布)するのは、
ソフトウェアの不正コピーと見なされる確率が高い
また、
特定のライブラリ【だけ】を配布することは、ソフト
ウェアの一部を抽出していることになり、改変禁止の
規定に抵触するかもしれない。
ということである。
すべてのソフトがこの制約に当てはまるとは限らないが、少なくとも、配布対象とするすべてのソフトウェアのライセンスの確認は少なくとも必要になるだろう。。。 これがとても面倒なことなのは、お分かりいただけるだろう。 とは言え、勝手にやって後で揉め事になると大変である。
コンテナは技術的には素晴らしそうだ。
しかし、ライセンスの仕組みを考えると、完全に手放しで良いともいえない気がする。 この問題はコンテナ技術の布教家達はどう考えているのだろうか。
※コメント投稿者のブログIDはブログ作成者のみに通知されます