離れていた間に
私は、自分の仕事に強い愛着を持つタイプではありません。約1620日前(約4.44年前)にRedisを離れると決めてから、Redisのソースコードやコミットメッセージなど、Redisに関係するものを再び見ることはありませんでした。ときどきRedisが必要になったときは、ただダウンロードしてコンパイルしていました。「make」と入力するだけで、何年たってもRedisのビルドがこれほど簡単なままだったことを、とても嬉しく思ったものです。
私が距離を置いていたのは、過去の仕事を嫌っていたからではありません。長い目で見ると、創造的な仕事の重要性はどんどん下がり、「プロジェクトを運営する」活動の比重がどんどん増えていました。多くのプログラマーはそうした転換ができますが、私の本業はそこではありません。それでも、Redisを離れた時点では、Redisに取り組むことをまだ楽しんでいました。ただ、私と同年代の多くの人が抱いている、「自分はまだ若い」という考え(私は今47歳です)には共感できません。新しいこと、とりわけ文章を書くことをしたかった。もっと家族と一緒に過ごし、親族を助けたかった。間違いなく、休む必要がありました。
しかし「執筆の数年間」(ちなみに、今も書いています)の間も、集中して文章を書くセッションの合間に休憩する方法として、私はしばしばコーディングに戻っていました。文章を書くことは、私が知る限り、コーディングよりはるかに負荷の大きい唯一の知的活動です。組み込み系のプロジェクトをいくつかやり、ニューラルネットワークをさらにいじり、Telegramボットを作り、その他いろいろなことをしました。ランダムにハックするのは楽しかったのですが、長期的には、本当の目的がないように感じていました。そして日を追うごとに、もう一度テックの世界に関わりたいという焦りが大きくなっていきました。同時に、Redisコミュニティが分裂していくのも目にしました。外部の人間だった私にとっても、それは少し気がかりなことでした。
そこで、ひょっとすると結局のところ、Redisエコシステムに戻って何らかの役割を果たせるのではないか、と考え始めました。会社のコミュニティに対する姿勢を変える手助けができるかもしれない。新しい開発の主な焦点をRedisコアに取り戻す手助けさえできるかもしれない。基本的には、私はある種の「エバンジェリスト」になれるのではないかと思ったのです(この役割の名前はあまり好きではありませんが……まあ、言いたいことは分かるでしょう)。つまり、一方では会社とコミュニティの橋渡し役となり、同時にプログラミングのデモを作ったり、新しいパターンを考案して説明したり、新旧の機能についてドキュメントや動画、ブログ記事を書いたりする人です。新しいものの設計についてはどうでしょう? 世の中の人々の仕事や、彼らが直面している困難から学び、それを抽出して設計上のアイデアとしてフィードバックし、Redisの進化に役立てることもできるはずです。
ニューヨークでの時間
あるとき、今12歳で、知性と創造性と愛情で私の日々を明るくしてくれる、私の人生にとって極めて大切な娘が、誕生日にニューヨークを訪れたいと言いました。最近、私たちはとても大変な数年間を過ごしていたので、やはりそれはいい考えだろう、そうしよう、と決めました。娘はもう、子どもというより少女です。ニューヨークで私は、もしかすると今がその時期なのかもしれない、パートタイムの仕事ならできるかもしれない、と考えました。ごく最近、新しいRedis CEOのRowan Trollopeとビデオ通話で話していました。会社とコミュニティの関係や、コードベースの方向性を調整するために、彼と一緒に仕事ができるかもしれないと感じました。そこで彼に、「何らかの形で戻ることができると思いますか」とメールを書きました。Rowanは私の提案に関心を示し、ほどなくしていくつか合意に至りました。
ライセンス変更について
人々は、私が*実際には*なぜこうしたのか、上に書いたこと以外に裏事情があるのではないか、何らかの合意があったのではないか、あるいは大金が動いたのではないか、何か奇妙なことや不明瞭なことがあるのではないか、と尋ねるでしょう。しかし、物事がとても退屈な場合もあります。1. 私から会社に連絡しました。会社からではありません。2. 戻るために途方もない金額を受け取っているわけではありません。何かの状況につけ込んだわけでもありません。普通の給与です(ただし、断っておくと、以前と同じくRedisのストックオプションはあります。増えても減ってもいません)。3. Redisがライセンスを変更したことについて、私は大きな問題を抱えていません。具体的に言えば、コミュニティとの分裂の*本当の*原因がこれだとは思っていません。ただ、人々がこの非常に重要な問題について私に尋ねるでしょうから、最初にすべて真実をお伝えしておくほうがよいでしょう。
ライセンスをめぐるジレンマ
私は人生のほとんどをオープンソースソフトウェアの開発に費やしてきました。それでも、私は無神論者ですが、他の人々が神を信じているのを見て、それによって人生の苦難を乗り越えられるのなら嬉しく思います。同じように、ソフトウェアを書く方法はオープンソースだけだとも思っていません。私がRedisの開発を始めたのは、私が2人いる創業者のうちの1人だった会社の中で、ソフトウェアのコードを非公開にしていた時期でした(Redisが公開されたのは、コア製品の一部ではないと考えられたからです)。他社に自分たちのサービスをコピーされたくなかった。それだけのことです。ですから、この点について私は過激派ではありません。私が過激なのは、ソフトウェア設計についてだけです。
さらに、オープン性やライセンスがOSIの定義するものだけだとも考えていません。ライセンスとは、できることとできないことのスペクトラムだと捉えています。同時に、大手クラウドプロバイダーがシステムソフトウェアの分野におけるインセンティブを変えてしまったことを、私は本当に懸念しています。ライセンスを変更したのはRedisだけではなく、実際には……大きな山の中で最後のほうでした。そして近年、明確なビジネスモデルの可能性がなかったために、そもそも始まらなかったプロジェクトが数多くあるように感じています。つまり、Redisのライセンス変更は私の決定ではなく、私なら別のライセンスを選んでいたかもしれません。分かりません。現場から何年も離れ、ビジネス上のプレッシャーもない今、あれこれ蒸し返すのは簡単すぎます。ただ、一般論として、その選択は理解できます。
さらに、新しいRedisライセンスを読めば分かりますが、確かにBSDではありません。しかし基本的には、Redisをサービスとして販売しない限り、以前と非常によく似た方法で、以前と同程度の自由をもって利用できます(つまり、Redisを改変し、再配布し、商用利用し、営利企業で無料で使う、といったことは依然としてできます)。*さらに*、望むならRedisをサービスとして販売することさえできます。ただし、オーケストレーションシステム全体を同じライセンスで公開する必要があります(おそらく誰もそんなことはしないでしょうが、これはこのライセンスがコピーレフトの考え方を取っていることを示しています)。ライセンス文言は、SaaS関連の部分を変更した以外はAGPLとほぼ同じです。OSIの承認を受けていない? そうです。しかし、SSPLをクローズドなライセンスと呼ぶことには抵抗があります。
こう言うでしょう(聞こえてきますよ)。本当の問題は、OSSプロジェクトの方向性を支配している企業があることだ、と。結局、関心が企業寄りになり、ユーザーベースから離れていくのだ、と。外部からのスポンサーを除けば、直接関与する企業がまったくいないプロジェクトが数多く存在することには感謝しています。しかし、まあ、こういうこともあります。多くの大規模プロジェクトでは、企業の関与が、正しい道筋からずれていくプロセスを実際には遅らせるのです。Redisの場合は、まさにそうでした。
ソフトウェア界のロビン・フッド
ここで、Redisの初期の頃に話を戻しましょう。
Redisが人気を集め始めたとき、私は開発を続ける方法を見つけたいと思いました。これは、VMwareが私の仕事をスポンサーすると申し出る前のことです。ビジネスモデルについて考え始めました。どんなものだったと思いますか? Redisを動かす人々を何らかの形で助ける、クローズドソース製品という形でした(驚くべきことに、このアイデアに関連するリポジトリの1つは今もオンラインに残っていて、*15*年前のコミットを確認できます:https://github.com/antirez/redis-tools)。
私は、ある種のオープンコア方式を試そうとしていました。新しいコードについては、支払いユーザーに何らかの優位性を与えるため、BSDライセンスの適用を6か月遅らせることも考えていたのを覚えています。今の私は、ユーザーに対して嫌なことをしたり、妙な駆け引きをしたりはしないと思います。しかし、VMwareのおかげで、そしてその後はRedis Labsのおかげで、より大規模に、私がなれたはずの存在にはならなかったでしょう。つまり、会社から十分な報酬を受け取りながら、会社自身の利益のためではなく、Redisコミュニティにとって最善の利益だけを考える、オープンソースソフトウェアのとんでもないロビン・フッドです。自分で会社を持つより、これは優れた仕組みだと確信しています。
VMwareも、その後のRedis Labsも、私だけに報酬を支払っていたわけではありません。リポジトリのコントリビューション履歴をざっと見れば、通算で2番目に多いコントリビューターがOran Agra(Redis)で、その次にPieter Noordhuis(VMware)がいることなどが分かります。
つまり、ユーザーベースだけに焦点を当てて書かれた12年分のBSDコードは、十分に価値のあるものだと思います。喜ぶべきことです。そして今の私にとって最も重要なのは、コミュニティとの分裂がライセンスをめぐるものではないこと、少なくとも主にライセンスが原因ではないことです。実際、新しいライセンスによって、その一部は解決できるかもしれません。もはや、コアをメンテナンスモードのままにし、新しい開発をモジュールに入れるだけのインセンティブはありません。新しいライセンスの下では、クラウドプロバイダーはRedisのコードベースを切り貼りして、収益を分配することなく販売することができません(これは本当に求めすぎだったのでしょうか? これによって、最近見てきたライセンス変更のすべてを、Redisに限らず防げたかもしれません)。新しいライセンスによって、世界中の開発者の手にある新しく刺激的な機能とともに、再びRedisコアにスポットライトを当てられます。何十人もの人々が仕事に見合う十分な報酬を受け取り、GitHubリポジトリに有用でドキュメントの整った変更を送り続けるのです。これも、私が会社の力になりたいことの1つであり、懸命に取り組むつもりです。ライセンス変更がユーザーベースと機能に良い効果をもたらすようにしなければならない。それが私の考えです。
AI、LLM、ベクトルインデックスについて
しかし、それだけではありません。Redisはベクトル機能の開発、そして一般にAIで可能になる種類のプログラミングへの対応に関心を持ち始めています。私は毎日Hacker Newsを読んでいますが、AIや新しい開発を嫌う技術者が非常に大勢いるのを目にします。最新のモデルを深く試してみようとすらしないのに(ヒント:Claude AIは別格です)、それでも役に立たないものだと切り捨てる人も大勢います。私の場合は違います。私は昔からニューラルネットワークが大好きでした。2003年に初めてNNライブラリを書いたとき、そのコンセプト全体がどれほど強力でクールなものかに、すっかり衝撃を受けました。そして2024年末になった今、私はようやくこの分野で驚くべき成果を目にしています。数年前にはSFに見えたことが、今では可能になっているのです。最近の私は、Claude AIを推論・編集・コーディングのパートナーにしています。以前よりずっと多くのことを達成できています。AIのおかげで*仕事量が増える*こともしばしばありますが、仕事の質は向上しています。最近、イタリアの出版社向けにSF短編を書きました。その一部をClaudeに批評してもらったおかげで結末を書き直し、はるかに良い作品に仕上げることができました(Claudeには物語の一行も、プロットの一部も書かせていません。AIの優れた使い方とは、あなたのほうがうまくできることを機械にやらせることではありません)。
昨日、ベクトルを8ビット量子化した場合に内積をどれほど高速に計算できるか評価する必要がありました。特定の方法で設計したベンチマークが必要だとClaudeに伝えると、2分後にはそれをテストし、変更し、それに価値があるかどうか理解できる状態になっていました。要するに、AIは私に取って代わったのではありません。AIは私を加速させ、仕事へのフィードバックによって私を改善したのです。そして私は、(RAGの人気とは関係なく、モデルのコンテキストがますます大きくなり、近いうちに人気モデルのアテンションの計算量が線形になるかもしれないことを考えると、RAGは必ずしも主要な用途でも、最も将来性があり有用な用途でもありません。脱線してすみません)学習された埋め込みは今後も残り、ベクトル検索はさまざまな理由からRedisに属するものだと信じています。第一に、ベクトルインデックスはデータ構造であり、特に低速なデータ構造です。そうしたデータ構造はメモリ上で非常によく機能します。また、ベクトルを公開するための完璧なAPIを私は見つけたと思っているからです。
Redisの設計に取り組んでいた頃、私はいつも相反する傾向を示していました。プロジェクトにぴったり合いそうに見えるものについて「ノー」と言う準備は常にできていました(名前付きLuaスクリプトやハッシュフィールドの有効期限など。ちなみに、どちらも今ではRedisの一部です)。その一方で、Luaスクリプト機能を追加しました。「Redisの中にインタープリターだって? 正気か?」と思われた頃です。文脈に合わないように見えたPub/Sub機能も、その後にstreamsも追加し、コンピューターサイエンスの教科書には存在しない、ソート済みセットのような人工的なデータ構造まで追加しました。私にとって、Redisに新機能が適合するかどうかは、ユースケースと内部設計への適合性という2つの要素で決まるからです。私にとってRedisは、プログラマーのためのレゴであって、「製品」ではありません。
ベクトルセット
そこで最近、ソート済みセットから新しいデータ型を着想できるのではないかと考え始めました。そこではスコアが実際にはベクトルになります。Rowanと話をしている間に設計ドキュメントを書き始め、続いて新しいデータ構造の概念実証を実装し始めました。HNSWは、利用可能なライブラリの1つを使うのではなく、細部まで調整したかったので、Redisのやり方でゼロから再実装しています。さて、これがどうなるかはまだ分かりません。コーディングはまだ初期段階ですが、この提案が受け入れられれば、再びコードをコントリビュートすることになるかもしれません。私が実装したモジュール(後でコアにマージする予定ですが、今は簡単さを優先してモジュールにしています)は、埋め込みを直接操作する新しいコマンドを実装しています。ヒントとして、その一部だけお見せします。
VSIM top_1000_movies_imdb ELE "The Matrix" WITHSCORES
1) "The Matrix"
2) "0.9999999403953552"
3) "Ex Machina"
4) "0.8680362105369568"
5) "Akira"
6) "0.8635441958904266"
7) "District 9"
8) "0.8631418347358704"
9) "The Martian"
10) "0.8608670234680176"
11) "The Bourne Ultimatum"
12) "0.8599717319011688"
13) "The Bourne Supremacy"
14) "0.8591427505016327"
15) "Blade Runner"
16) "0.8585404753684998"
17) "Metropolis"
18) "0.8572960793972015"
19) "Inception"
20) "0.8521313071250916"VSIM、VADD、VCARDがあり、必要になりそうなものは一通り揃っています。まさにソート済みセットの考え方ですが、多次元のスコア(埋め込み)とK近傍(K-NN)マッチングを使います。どう思いますか? もちろん、その上には効率を高めるための実装上の工夫もたくさんあります。ただ、今はまだ概念実証のコードです。もう少し取り組ませてください。スレッド処理、次元削減、量子化など、さらに多くのことを実装しています。正直に言って、とても楽しいです。
ご覧のとおり、ハイブリッド検索については触れていません。ベクトルストアをめぐる最近のバズワードです。これもRedis流です。開発者に役割を持たせ、トレードオフを決めてもらうのです。結局のところ、何をモデル化しているのかを知っているのは開発者です。キーごとにベクトルインデックスを1つ持ち、プログラマーがソート済みセットでできたように、興味深い分割戦略、新しいスキーマ、Luaスクリプト、パターンなど、ユースケースをモデル化するために必要なものを考案していくのです。
とはいえ、関連付けられる項目は通常、小さな文字列かドキュメントIDになるでしょうが、もっと複雑なものにすることも妨げられてはいません。後からフィルタリングできるメタデータを持たせることもできます(ただし、私はそれには抵抗します)。多くのユースケースでは、複雑なサーバー側フィルタリングは本当に必要なく、データを事前に分割することでモデル化できるように感じているからです。
私が大きな関心を持っているのは、STOREオプションを追加できる可能性です。結果をユーザーに返すのではなく、ソート済みセットに保存するオプションです。もちろん、その場合のスコアは類似度になります。これらすべては、効率、スケーラビリティ、スクリプト利用の可否などにも複雑で興味深い影響を及ぼします。今後数週間、数か月のうちに、もっと詳しくお話しできる機会があればと思います。
さて、さて、このブログ記事の本題に戻りましょう。でも、ひょっとすると上の話こそが*本当の*本題なのかもしれません。わくわくするような新しいアイデアを持つことです。
というわけで、戻ってきました🙂
つまり、私は戻ってきたということです。長年にわたってRedisコミュニティが成し遂げてきたことに対して、今こそ大きな感謝を伝えたいと思います。またこの旅に何かを加えられることを願っています。どこかでお会いしましょう。
P.S. これらの進展を追いたい方は、BlueSkyで活動しています。https://bsky.app/profile/antirez.bsky.social
記事をランダムに読む