なぜDockerとCoreOSの決裂は予測できたか

「私が滑っていく先はパックが向かう所であり、パックがあった所ではない」-Wayne Gretzky

CoreOSとDockerの間で最近騒動がありました。DockerはCoreOSのクラスタ管理の領域に入り込むために構築している製品の範囲を広げています。それにより、CoreOSがDockerと競合する独自のコンテナランタイムRocketを発表したのです。そういった動きは、Clayton Christensenの『Law of Conservation of Modularity』を読んでいれば十分に予測できるものでした。

我々がコモディティ化に関する研究から洞察したのは、コモディティ化がバリューチェーンのどこかで進んでいる時はいつも、脱コモディティ化という逆のプロセスがバリューチェーンの別のどこかで進んでいるということです。(中略)この2つのプロセスが相互関係にあるということは、破壊的な新しい波が産業に押し寄せている時に、バリューチェーンの中で差別化できる箇所が絶えず変わることを意味します。このような時、バリューチェーンの中で性能がまだ十分でない箇所をターゲットにする企業が利益を獲得することになります。-Clayton Christensen『イノベーションへの解』6章

注意: この理論は、補完するものをコモディティ化することについて書かれたJoel Spolskyの有名な記事に関連していますが、それとは別です。

現在DockerとCoreOSに起こっているのは珍しいことでも驚くようなことでもなく、コンピューティングの始まり以来よくあったことです。差別化できる対象は変わり続けていて、誰が差別化できるかをめぐって戦いがあります。アイスホッケーのパックが向かう所を予測するように、価値の動きを予測して動く者が利益を獲得できます。

私たちはこのサイクルが何度も繰り返し起こるのを見てきました。最初、メインフレームコンピュータは顧客のニーズに対して性能が不十分だったので、コンポーネントからオペレーティングシステム、販売員まで、一元的に構築、製造、販売する必要がありました。IBMはこの統合システムで価値を獲得し、IBMのサプライヤは利益のない惨めな状態で辛うじて存続していました。しかし数年後、ミニコンピュータとコンピュータの性能が十分になり始め、価値はシステムを組み立てること(IBMとCompaq)から、オペレーティングシステム(Microsoft)、プロセッサ(Intel)、メモリチップ、およびディスクドライブの部品メーカーに移動しました。今度はシステムインテグレータが消耗するだけの厳しい戦いの中、利益のない惨めな状態でやりくりする番になったのです。

製品の性能が十分でない時、成功するには統合された企業であることが極めて重要です。IBMはコンピュータ産業の初期の時代に最も**統合された企業として業界を支配しました。(中略)その製品は新たな可能性を切り開く時に必要な相互依存的な独自のバリューチェーンに基づいていました。(中略)

主流の顧客が利用できることを上回るくらい技術が進歩すると、企業は変わらざるを得ません。(中略)新たな次元で勝負するために、企業はコンポーネントとサブシステムの間のインターフェースが明確に指定されているモジュール型製品を設計しなければなりません。最終的に、インターフェースは合体して業界標準になります。(中略)いったんモジュール型アーキテクチャが(中略)定義されたら、企業が成功するのに統合が不可欠ということはなくなります。それどころか、統合はスピード、柔軟性、価格の点から競争面で不利になり、結果としてその産業が解体する傾向があります。-Christensen他『Skate to Where the Money Will Be

デスクトップ市場では、プロセッサとオペレーティングシステムの性能がまだ不十分だったため、一層の性能向上が求められ、価値もそこにありました。メモリチップとディスクドライブのメーカーは、そううまくはいきませんでした。メーカーのチップとディスクの性能が十分向上し、モジュール化されると、DRAMやハードドライブのヘッドとディスクを製造するための設備を供給する企業が利益を得るようになりました。

2005年になると、Linuxは十分な性能のオペレーティングシステムになりました(サーバコンピューティングの場合、デスクトップコンピューティングについては翌年まで待つ必要がありました)。企業は、オペレーティングシステム上でXenハイパーバイザAmazon EC2のようなシステムを構築することができ、Linuxをモジュラーコンポーネントのように使うこともできました。これらのクラウドコンピューティングサービスが柔軟なスケーラビリティを提供した結果、その配下のコンピュータはコンピュートユニットの値で表わされるコモディティになりました(スピンアップしてEC2インスタンスを実行している物理マシンを区別しようと思う人はいません)。サーバとオペレーティングシステムは、統合された仮想マシン管理をサポートするためのモジュラーとなりました。

2013年までには、クラウドサービスプロバイダの仮想マシンは性能が向上し、コモディティ化が進みました。不十分だったのはアプリケーションの再現性とデプロイ、そしてマルチサーバ管理でした。Puppet、Chef、Ansibleなど、数多くのソリューションがありましたが突出したものはなく、ここで突破口を開いたのがDockerでした。以下は、GitHub上の説明の引用です(太字は私が強調のために使用しました)。

Dockerコンテナはハードウェアにもプラットフォームにも依存しません。これは、ラップトップから最大規模のEC2コンピュートインスタンスまで、どこでも実行できることを意味します。また、特定の言語、フレームワーク、パッケージングシステムを使う必要もありません。Dockerコンテナは、Webアプリ、データベース、バックエンドサービスのデプロイとスケーリングに役立つ優れたビルディングブロックを作成します。特定のスタックやプロバイダに依存することはありません。-github.com/docker/docker

モジュール方式や統合の観点から見ると、Dockerコンテナはあらゆるものが同期する統合ポイントになるように設計されていることが分かります。Dockerは、オペレーティングシステム、仮想マシン、物理マシン、サーバオペレータをコンテナの下に配置し、コモディティ化します。また、コンテナ上に構築する際に外部から使用できるAPIのセットも提供します。Dockerがコモディティ化していないのはデータセンターですが、なぜそれが重要なのかはこのあとすぐに分かります。

開発者の視点から言えば、アプリケーションをDockerコンテナで実行すると、クラウドサービスはモジュラー(置き換えが可能なコモディティ)として実行されます。これは素晴らしいことです。もしあなたが今のクラウドサービスに満足していないなら、別のクラウドサービスプロバイダに(理論的には)変更できるからです。コモディティ化は薄利多売のビジネスにつながるので、AmazonやGoogleなどのクラウドプロバイダにとってはいいことではありません。価値は、仮想マシンを提供するクラウドサービスプロバイダから、仮想マシン上で実行されるコンテナに移ったのです。

コンテナは便利ですが、アプリケーションを実行するにはさらに他のものが必要です。そのためすぐに数多くの企業がDockerのモジュラーコンテナを利用したシステムを構築し、差別化された統合的なサービスの提供をするようになりました。その中で最も有名なのがCoreOSです。CoreOSはLinuxの最低限の機能を備え、クラスタリングを使用してDockerコンテナを実行するツールを提供します。彼らは仮想マシン、そしてDockerコンテナの代わりに単一のクラスタを使用し、プロセスを進める中でデータセンターのコモディティ化を行います。再び価値はDockerコンテナからDockerを利用した統合的なサービスへと移動しました。それが真実であろうとなかろうと、CoreOSやそれに似たサービスはクラウドサービスプロバイダにとって脅威となります。それはつまりクラウドプロバイダを利用した統合的なプラットフォームを構築することでクラウドプロバイダのコモディティ化を行うということです。

こういった脅威が出てきたことをきっかけにAmazonGoogleがDockerコンテナを管理し組織化する新たなコンテナエンジンサービスを発表したことは当然の結果です。これらのサービスはコモディティ化した彼らのコンピューティングインフラストラクチャ上でDockerコンテナの管理を統合することで価値を取り戻そうとするものでした。ただ、想定外だったのはGoogleがコンテナクラスタ管理ツールであるKubernetesをオープンソースとして公開したことです。未だに何が目的でそのようなことを行ったか分かりません。

このことはDockerにどんな影響をもたらしたのか? 初めの頃からずっと、Dockerは他社が構築に利用できるモジュラーコンポーネントでした。それは他社にとって素晴らしいものでしたが、Dockerにとってあまり有益なものではありませんでした。というのもDocker自身の定義が差別化されておらず、ごくわずかな価値しか獲得していなかったのです。コモディティ化は利益を増やすのにあまり良い方法ではありません。さらにDockerの投資者にとっても、望むようなハイリターンはあまり期待できません。

Dockerをコモディティ化したコンポーネントとして利用するCoreOSが登場し、Dockerは彼らが作っている価値が全てCoreOSなどの企業に奪われつつあると悟ります。彼らがコモディティ化したOS層における価値をDockerが得ることはできません。Dockerに残された道はコンポーネント以上のシステムになることでした。クラスタ内におけるDockerコンテナの実行と構築を行う全てのアスペクトを管理できる製品を作ることはとても理にかなっています。

もちろんCoreOSはこのことを懸念しています。今やDockerは開発者の信頼と高いマインドシェアを有し、十分な資金を持った競争相手となっています。そしてこれに対抗してCoreOSがDockerのコンテナ市場占有率を奪い、自社製品をサポートするために競合するコンテナエコシステムを構築するのは自然の成り行きです。RocketはDockerよりも技術的な面で優れている可能性があるので、CoreOSがまず行うことはDockerによりコンテナクラスタ管理スペースから締め出されないようにすることです。

また数年経てば、クラスタ管理サービスはコモディティ化され、価値もまた別の所へ移動するでしょう。このサイクルは繰り返されるのです。この競争に勝ち抜くコツはいつもパックの行く先を見定めることなのです。