Redis is not "open core"

Salvatore Sanfilippo

Redisは「オープン・コア」ではない

原文は Salvatore Sanfilippo により に公開されました。 このブログを購読する

人間には、新しい事実をすでにあるカテゴリーに当てはめようとする強い傾向がある。これは、似たような出来事を同じ論理的な枠組みの下で精神的にも文化的にも分類するのに役立つ。だから2日前に、私が「Redisのコアは今後も素のBSDライセンスでリリースされ、ライセンスが変わるのはRedis Labsが開発した一部のRedisモジュールだけで、AGPLから別の非オープンソースライセンスに移行するのだ」と説明したとき、人々は「ああ、なるほど、オープン・コアにするんだね」と言ったのだ。

しかし、ここで何が起きているのかという真相を捉えたいのであれば、今回の単純化は通用しない。オープン・コアという技術は、二つの条件を必要とする。一つはシステムがモジュール化されていること、もう一つは、本来はフリーソフトウェアであるものの周囲に製品を作るために、そのシステムの一部がプロプライエタリ化されていることだ。例えば、データベースの単一ノードだけをオープンソースとして提供し、クラスタリングのロジックや仕組みは別の非フリーなレイヤーで実装するようなものは、オープン・コア技術である。同様に、私がモジュール式のストレージシステムを備えたリレーショナルデータベースを書いたとして、強力な保証を提供できる唯一のストレージが非フリーである場合も、オープン・コアだ。オープンソースシステムを巡るオープン・コアのビジネスモデルにおいては、フリーソフトウェアの部分から有用な何かを取り除くことが*根本的に*重要なのだ。

さて、Redisはしばらく前からモジュール式のシステムになっている。Redisモジュールを使えば、最近導入されたクラスターメッセージバスAPIを使った新しい分散システムや、ネイティブに見える新しいデータ型など、さまざまなものを作ることができる。しかし、Redisをモジュール化した理由は、システムから有用なものを取り除いて値札を付けるためではなかった。例えば、Redis 5で追加された新しいデータ構造の一つであるストリームは、コアの一部であり、BSDライセンスでリリースされている。ストリームは、Redisがすでにモジュールシステムになっていたときに実装されたのだ。

Redisモジュールは、まったく別の観察から始まった。前提として言っておきたいのは、私はソフトウェア開発に関して非常に保守的な人間だということだ。Redisは、インメモリのデータ構造で操作することによって、同じことをする他の方法よりも明確な優位性が得られることだけに焦点を当てるべきだと考えている。Redisに今以上のことをさせたいとは思わないし、あらゆる一貫性のトレードオフを取り入れたいとも思わない。RedisにはRedisであってほしいのだ。つまり、開発者が特定の問題を解決するためにさまざまな方法で使える、汎用的なツールであり続けてほしいのだ。

しかしRedis Labsでは何度も、Redisでは特定の問題を解決できないのは少しもったいないと感じてきた。例えば、Redisが本格的な全文検索エンジンだったらどうだろう? それに、開発者はあれほどJSONを求めているのだから、直接JSONを扱えるAPIがあったらどうだろう? そして、インメモリのグラフを賢く表現すれば非常に高速になるのだから、リッチなクエリ言語を備えたグラフデータベースの機能があったらどうだろう? Redis Labsの顧客からも、そうしたものを直接求める声がしばしば寄せられた。実際、そうした機能はクールなものになり得るが、それはRedisではないし、私は興味がないし、そもそもRedisのオープンソース側にはそうしたすべてを維持し続けるだけの開発リソースがないのだ、ちなみに。そしてこれは、RedisにとってもRedis Labsにとっても大きな利点となっている。社内で私ともう数名のOSS開発の時間を賄うだけで比較的安く済む一方で、残りのリソースは、Redis EnterpriseのSaaSや製品を良いものにすることなど、Redis Labsのビジネスにとって有用なものの開発に充てることができるからだ。いずれにせよ、コミュニティからは多大な貢献が寄せられている。そして私は、Redisを他の領域に広げるような気の利いたアイデアの数々に対して、ずっと「ノー」と言い続けてきた……それ自体もまた一つの問題なのだが。

それでも、Redisに似てはいるがRedisのスコープの外にあるようなものを持つことはクールだろう。なぜなら、たとえそれがRedisの使命ではなくても、リアルタイムにデータを投入しながら、1コアあたり非常に多くのクエリを同時に捌ける、高速な全文検索機能付きの転置インデックスを、人々は十分に活用し得るからだ。これがまさにRedis Labsがやっていることだ。同じRedisの技術とアプローチを使って、Redisがやろうとしていたこと以上のことをやっているのだ。機能の面だけでなく、一貫性モデルのような他の面でもそうだ。私はある事柄についてはかなり強い意見を持っていて、例えばCRDTは特定のユースケースではすごくクールだが、同じメモリフットプリント、パフォーマンス、シンプルさを保つためには、たとえ一貫性モデルが弱くなる代償を払ってでも、Redisにとっては適切なものではないと考えている。そこでRedis Labsは、この分野のトップ研究者と共に、それを実現した(そしてこれはソースコードが一切公開されていないプロプライエタリな製品だ)。そうした機能が特定の運用にとってとてつもなく有用になり得ることは私にもわかるが、Redisはすべてを解決するためにあるわけではなく、Redis Labsがそれをやったのだ。

これはオープン・コアではない。Redis Labsは、私からは決して出てこないようなことをやっているのだ。リソースの問題もあるし、すべてのソフトウェアが最終的に巨大になる必要はないと私が信じているからでもある。

だから、このモデルを「オープン・コア」と呼ぶのはミスリーディングだと思う。Redisというテーブルから何かが取り除かれたわけではなく、ただ新しいことが探求されているだけであり、しかもRedisプロジェクトが本来触れてこなかった他の領域で「Redisらしいやり方」に従おうとしながら、そうしているのだ。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント