米マイクロソフトや米レッドハットといった有力OSベンダーと蜜月関係を保ってきたCPUの巨人、米インテル。今度はクラウドに焦点を合わせたOSの開発・提供に、自ら名乗りを挙げた。OSの名称は「Clear Linux Project for Intel Architecture」。いわゆる「コンテナ」を稼働させることに特化したOSである。
Clear Linuxのサイト(https://clearlinux.org/)では、「Clear Linux OSのゴールは、インテル・アーキテクチャの優秀さを示すショウケースである(The goal of Clear Linux OS, is to showcase the best of Intel Architecture technology)」と述べている。技術の可能性を示すのが目的であり、他意はないと言いたげだが、仮にそうだとしてもClear Linux OSが成功すれば、サーバーOSベンダーのマイクロソフトやレッドハットには影響大。何があっても不思議ではない状況になってきた。
Clear Linux OSは、どんなOSなのか。名前の通りLinuxがベースだが、汎用のLinux OSではない。次世代のアプリケーション稼働技術として注目を集める「コンテナ」(詳細は後述)を、クラウド上で軽量かつ高速に動かすことを指向したサーバー・アプリケーションのためのOSである。そのためGUIや印刷機能は持たない一方で、セキュリティの強化や起動プロセスの高速化、メモリー消費の低減に工夫を凝らしている。
具体的には、(1)セキュリティの強化ではインテル・プロセサの仮想化支援技術「Intel VT(バーチャライゼーション・テクノロジー)」とLinuxの仮想化機能によるコンテナの分離(コンテナ相互の隔離)、(2)起動プロセスの高速化では仮想化機能としてKVMではなく「kvmtool」というミニハイパーバイザ-を採用(BIOSやUEFIといったファームウェアなしで起動可能)、(3)メモリーの圧縮ではサーバーOSで一般的な仮想メモリー方式ではなくダイレクトメモリー方式を採用、といったことだ。
ただし不思議なことがある。コンテナが注目を集めるのは、KVMやVMware、Hyper-Vといったハイパーバイザ-によるサーバー仮想化は起動に時間がかかり、メモリーオーバーヘッド(消費量)も大きくなりがちであるなど、色々な意味でコストがかかるという理由がある。利用者にサービスを提供するためには事前にアプリケーションを起動しておく必要があり、大量のメモリー(多数の物理サーバー)も必要になってしまう。この問題に対するアンチテーゼとして浮上しているのが、つまりはコンテナ技術である。そのコンテナを稼働させるために、Clear Linux OSでは仮想化技術を取り込む──Intel VTの技術を生かすとしているが違和感のあるやり方だ。
とはいえ、セキュリティを強化するには、仮想化によるコンテナ同士の分離が有利なことは間違いない。加えてインテルは上記の工夫によって、仮想化の仕組みを実装するにもかかわらず、最適化しない段階でもコンテナの起動を150ミリ秒、メモリー消費をコンテナ当たり18MB~20MB程度に抑えた。128GBのメモリーがあれば3500以上のコンテナを動かせる計算だ(http://lwn.net/Articles/644675/)。つまりコンテナ技術の利点と、仮想化によるセキュリティを両立させるのがClear Linuxのアプローチである。
Clear Linuxのもう一つの特徴がステートレス(stateless)のコンセプトを採用したこと。少し難解なコンセプトだが、OS側では過去の状態を保持せず、必要なら(クラウド上の)別の場所に保管されている状態を都度読み込む動作形態を指す。例えばステートフル(statefull)なOSであるWindowsは起動段階でユーザー固有の設定情報を読み込むので、起動に一定の時間がかかる。ステートレスOSであるChromeOSは、それをしないので起動が速い、といった違いがある。クラウド上で安全、高速にコンテナを稼働させる目的に向けて、技術的な試みを多数盛り込んだのがClear Linuxなのである。
なおコンテナ稼働に特化した類似のプロジェクトにはCoreOS(CoreOS社)、Atomic Host(Red Hat社)、Snappy Ubuntu Core(Canonical UK)などがある(http://thinkit.co.jp/story/2015/03/06/5672)。これらはいずれも、コンテナ技術の主流である「Docker」向けだが、Clear Linux Projectはコンテナ技術はインテル独自の「Clear Container」向け。これで稼働を検証し、その後、Dockerに対応する計画である(http://lwn.net/Articles/644675/)。
最後に仮想化とコンテナについて、追加説明をしておこう。ハイパーバイザー型の仮想化は、仮想化以前にあったシステム資源の浪費を大幅に減らす技術である。4コア、16GBの物理サーバーを、仮想化によって複数に分割。0.5コア、2GBのメモリーを持つ仮想サーバーを用意できる。2GBで足りなくなれば追加することも簡単にできる。半面、0.5コア、2GBのシステム資源は、アプリケーションの稼働の有無とは無関係に確保し続ける必要があるわけで、ここに一つの無駄が生じる。
さらに当然のことだが、OSやデバイスドライバ、ライブラリなどはそれぞれのVMに展開され、システム資源を取り合う。アプリケーションを様々な環境で稼働させる可搬性にも問題がある。異なるハイパーバイザーに仮想マシンを移動させることは困難だし、同じハイパーバイザ-であってもOS、ミドルウェア、アプリケーションのすべてを設定情報も含めて移動させる必要があるので負担が大きい。アプリケーションの開発者にとっては、実行環境の構築や維持も大変だ。
これに対し、コンテナではOSは一つしかない。そのOSの内部のユーザー空間を区画化し、区画の管理者や開発者から見た時、すべての権限を保有しているかのように見せる技術がコンテナである。OSのカーネルやドライバ、ライブラリはコンテナ内には存在せず、アプリケーションやその設定、使用するライブラリなどの情報がコンテナの領域に保持される。稼働するコンテナが多くなってもOSの実体は1つしかないため、リソースは少なくて済むし、コンテナ自体、コンパクトなので起動に時間がかからない。LinuxにはLXC(Linux Containers)がある。
注目を集める「Docker」はアプリケーションの可搬性を実現するために、この原理を利用した技術だ。アプリケーションや稼働時に必要なライブラリ、ミドルウェアなどの情報をパッケージ化。Atomic HostなどDockerホストが稼働する環境であれば、どこでもそのパッケージを稼働できるようにする。iPhoneアプリをiTunesからダウンロードし、実行するような感覚に近いと言われる。LXCもDockerも同じ「コンテナ」だが、LXCは個別のプロセスとネットワークスペースを作り出すOSの仕組み。Dockerはそれを生かしてアプリケーションを仮想化する仕組みといった違いがある。