Redisは「オープン・コア」ではない
人間には、新しい事実をすでにあるカテゴリーに当てはめようとする強い傾向があります。似たような出来事を同じ論理の傘の下で整理できると、思考や文化の面でとても便利だからです。だからこそ先日、私がRedisのコアは今も通常のBSDライセンスで提供されており、AGPLから別の非オープンソースのライセンスへ変わるのはRedis Labsが開発する一部のRedisモジュールに限られると説明したとき、皆さんは「ああ、なるほど、オープン・コアにするということですね」と受け止めたのでしょう。
しかし、ここで実際に何が起きているのかという真実を捉えたいのであれば、今回の単純化はうまく機能しません。オープン・コアな技術が成り立つには、二つの条件が必要です。一つはシステムがモジュール式であること、もう一つは、そうでなければフリーなソフトウェアの周囲に製品を作り上げるために、システムの一部をプロプライエタリにすることです。たとえば、データベースの単一ノードだけをオープンソースとして提供し、クラスタリングのロジックや仕組みは別の非フリーなレイヤーで実装するのであれば、それはオープン・コアな技術です。同様に、モジュール式のストレージシステムを備えたリレーショナルデータベースを作りながら、強い保証を提供できる唯一のストレージが非フリーである場合も、オープン・コアです。オープンソースを核としたオープン・コアのビジネスモデルでは、フリーな部分から有用な何かを取り除くことが*根本的に*重要になります。
さて、Redisはしばらくの間モジュール式のシステムです。Redisモジュールを使えば、最近導入されたクラスター・メッセージ・バスAPIを使って新しい分散システムを書くことも、ネイティブに見える新しいデータ型を作ることもできます。しかしRedisをモジュール化した理由は、システムから有用なものを取り除いて値札を付けるためではありません。たとえばRedis 5で追加された新しいデータ構造の一つであるStreamsは、コアの一部でありBSDライセンスで提供されています。Streamsは、Redisがすでにモジュール式になっていた時期に実装されたものです。
Redisモジュールは、別の観察から始まりました。前提として、私はソフトウェア開発に関してとても保守的な人間だということをお伝えしておきます。Redisは、インメモリのデータ構造で扱うことで他の手段よりも明確な利点が得られることにだけ集中すべきだと考えています。Redisに今以上のことをさせたいとは思っていませんし、あらゆる整合性のトレードオフを取り込みたいとも思っていません。RedisにはRedisであってほしいのです。つまり、開発者が特定の問題を解決するために様々な形で使える、汎用的な道具であってほしいのです。しかしRedis Labsでは何度も、Redisではある種の特定の問題を解決できないのは少しもったいないと感じてきました。たとえば、もしRedisが本格的な全文検索エンジンだったらどうでしょう。開発者はあれほどJSONを求めているのですから、直接JSONを扱えるAPIがあったらどうでしょう。そしてインメモリのグラフを賢く表現すれば非常に高速になるのですから、豊かなクエリ言語を備えたグラフデータベースの機能があったらどうでしょう。Redis Labsの顧客からも、こうした機能を直接求められることがよくありました。実際、そうした機能は魅力的なものになり得ますが、それはRedisではありません。私は興味がありませんし、オープンソース側のRedisにはそうしたすべてを維持し続ける開発力もありません。ちなみに、これはRedisにとってもRedis Labsにとっても大きな利点です。私ともう数名のOSS開発者の工数だけを社内で賄えばよく、残りのリソースはRedis Labsのビジネスにとって有用なこと、たとえばRedis EnterpriseのSaaSや製品を優れたものにすることに充てられるからです。いずれにせよ、コミュニティからは多大な貢献が寄せられています。そして私は、Redisを別の領域へ引き込むような派手なアイデアのすべてに今も「ノー」と言い続けています。これ自体もまた一つの問題なのですが。
それでも、Redisに似てはいるもののRedisの守備範囲の外にある、そうしたものを持てるのはやはり魅力的です。なぜなら、それがRedisの使命でなくても、リアルタイムに投入でき、同時にコアあたり非常に多くのクエリをさばける高速な転置インデックスと全文検索機能を、人々は十分に活用しうるからです。Redis Labsがやっているのはまさにこれです。同じRedisの技術とアプローチを使って、Redisがやろうとしなかったことを実現しているのです。機能の領域だけでなく、整合性モデルのような他の領域でもそうです。私はある種の事柄についてとても強い意見を持っていて、たとえばCRDTは特定のユースケースでは非常に優れている一方で、同じメモリフットプリント、性能、シンプルさを保つためには、たとえ弱い整合性モデルになる代償を払ってでも、Redisにとって正しい選択ではないと考えています。そこでRedis Labsは、この分野のトップ研究者と共にそれを実現しました(これは一切ソースが公開されていないプロプライエタリな製品です)。そうした機能が特定の用途にとってとてつもなく有用になりうることは私にも分かります。しかしRedisはすべてを解決するために存在したわけではなく、Redis Labsがそれを担ったのです。
これはオープン・コアではありません。Redis Labsがやっているのは、私なら決してやらないことです。帯域幅の問題もありますし、すべてのソフトウェアが最終的に巨大になるべきではないと信じているからでもあります。
ですから、このモデルを「オープン・コア」と呼ぶのはミスリーディングだと思います。Redisというテーブルから何かが取り除かれたわけではありません。ただ、Redisプロジェクトがそれまで触れてこなかった他の領域で、「Redisらしさ」に従いながら新しいことが探求されているだけなのです。
記事をランダムに読む