The struggles of an open source maintainer

Salvatore Sanfilippo

あるオープンソースメンテナの苦悩

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

数ヶ月前、システムソフトウェアの分野でかなり大きく活発なコミュニティを抱えるOSSプロジェクトのメンテナからメールをもらった。何年もプロジェクトを維持し続けるのが辛い、心理的に非常に消耗する、という内容だった。彼は私にアドバイスを求めてきたが、正直、自分がアドバイスできる立場にあるのかどうか分からなかった。それでも、この件について自分が考えていることをブログ記事に書くと約束した。そこから数週間が経ち、何度か書き始めては中断した。考えを十分に整理する時間が取れなかったからだ。今ようやく、自分の弱さや苦悩、そして自由への欲求の中に答えを見つけるべく、自分自身を分析できた気がする。人は、ネガティブな側面も伴う何かを長期間やり続けると、どうしてもそうした思いが心に入り込んでくるものだ。オープンソースプロジェクトの維持はもちろん大きな喜びや楽しみでもあり、この10年は私の職業人生の中でも間違いなく記憶に残るものだ。最高の10年だったとは言えないにしても――やはりスタートアップ時代の方がもっと楽しかった――。ただ、ここではあえてネガティブな面に絞って書こうと思う。もちろんそれが全てではない、良いこともたくさんあるということは念頭に置いて読んでほしい。

洪水効果

私は、速く動くこと、速く考えること、時間で競争に勝つこと、といった類のものを信じていない。ソーシャルネットワークやチャット、メール、そして予定で埋め尽くされたスケジュールのせいで、常に集中力を欠いた状態にある今の世界が好きではない。だからプロジェクトの初期、まだ時間に余裕があった頃にRedisについてメールを受け取ると、相手が何を伝えようとしているのかに集中することができた。話題になっているRedisの該当箇所を思い出し、じっくりと考えた上で、自分の本心からの考えを返信として書くことができた。どんな仕事であれ、本来みんなそうやって働くべきだと私は思っている。

ところが、ソフトウェアプロジェクトがRedisほど人気を博し、しかも新しいソーシャルツールや、自分自身がユーザーのために「そこにいる」という姿勢によって人と人とのコミュニケーションが極端に容易になると、作者のもとに届くメッセージ、issue、プルリクエスト、提案の数は指数関数的に増えていく。一方で、少なくともRedisの場合だが、これは共通の問題だと思うが、そうしたコミュニティからのインプットを的確に吟味できる、十分に優れた人材の数はごくゆっくりとしか増えない。明らかな輻輳が起きる。多くの人はこれを間違った方法で解決しようとする。現実的な処理で片付けようとするのだ。2週間ほど元の投稿者から返信がなければissueをクローズする。あまり明確に記述されていないissueはすべてクローズする。そういった「受信箱ゼロ」的な解決策だ。現実には、コミュニティからのフィードバックを本当によく処理するには、必要なだけ時間をかけなければならない。そうしなければ、未解決のissueが少ないふりをしているだけになる。各Redisサブシステムごとに、OSSにフルタイムで取り組めるコアレベルのエキスパートを雇うだけのリソースがあればうまくいくだろうが、それは現実的ではない。

では何が起きるか。何に目を通し、何を無視するかをどんどん優先順位付けし始めることになる。そして、あまりにも多くの事柄や人々を無視している自分は最低だと感じる。一方で、コントリビューター側は、あなたが他の誰かが提供してくれたものに関心がないと思い込む。複雑な状況だ。たいていの場合、行き着く先は、重大な問題にだけ主に対処し、新しいものはすべてないがしろにするという態度だ。だって新しいものはまだコアに入っていないし、さらにコードベースを大きくして、さらに多くのPRやissueを抱え込みたいと思うだろうか?しかも、それらは自分のいつものプログラミングスタイルと比べれば、より入り組んだ書き方をされているかもしれない。つまり複雑さが増すわけで、そこで重大なバグが起きたときに根本原因を追うのは至難の業だ。

役割の変容

上で述べた「洪水効果」の問題の結果として、あなたは突然、仕事まで変わってしまう。Redisが人気を得たのは、私がソフトウェアを設計し、書くことができると見なされたからだ。ところが今、私の仕事の大半はissueやプルリクエストを眺めることだ。しかも、受け取ったコントリビューションの多くは、自分でやった方がもっとうまくできると感じることさえある。Redisに貢献してくれる人の中には、私より優れたプログラマもいて、彼らのものは私が書くより良い品質のものもあるだろう。しかし、数の論理から言えば、*大半*は平均的なコントリビューションで、提出した人にとって差し迫った特定の問題を解決するためだけに書かれたものだ。一方で、私がRedisのために設計するときは、もう何年もこのものを書き続けているから、Redis全体として考える。つまり、あなたが得意としていたことを、やる時間がなくなってしまうのだ。結果として、体系立った大きな新機能は生まれにくくなる。私の解決策は?時々、数週間にわたってissueやPRを見るのをやめることだ。コーディングや設計をしているからだ。それこそが私が本当に愛し、楽しんでいる仕事だ。しかしそれは逆に、心理的にははるかに大きなプレッシャーを生む。自分が愛し、得意とすることをするために、最低な気分を味わわなければならないのだ。

時間

同じプロジェクトで長期間働くことには、少なくとも私にとっては、二つの問題がある。

まず、Redisをやる前は、*一度たりとも*人生の平日すべてを働くということをしたことがなかった。1週間働いて2週間休み、また1ヶ月働いて、また2ヶ月消える。ずっとそうだった。人は充電し、新しいエネルギーやアイデアを得る必要がある。クリエイティブな仕事をするためには。そして高レベルなプログラミングはクソみたいにクリエイティブな仕事なのだ。Redis自体、最初の2年間はまさにそうやって作られた。つまり、プロジェクトが最も速く進化した時期だ。なぜなら、私がやりたい時にだけ働く場合の生産性の合計は、毎日一定のペースで働くことを強いられた場合の生産性よりも大きいからだ。

しかし、私の仕事に対する倫理観からすると、一人で会社をやっていた頃はそうした断続的なスケジュールが許されたのに、Redisでお金をもらって働くようになってからは、もはや以前のようなパターンを続けることは自分の倫理が許さなくなった。だから、普通のスケジュールで働くよう自分を強制し始めた。これは何年もの間、私にとって大きな苦闘となっている。しかも、そのせいで本来発揮できるはずの力より少ないことしかできていないと確信しているが、物事とはそういうものだ。この問題を解決する方法は見つかっていない。Redis Labsに「昔のスケジュールに戻りたい」と言うこともできるだろうが、もはやうまくいかないだろう。なぜなら今や私は、会社ではなく本当に「コミュニティ」に対して責任を負っているからだ。

もう一つの問題は、同じプロジェクトに大量に取り組むこと自体が、精神的に複雑な問題だということだ。昔は半年ごとにプロジェクトを変えていた。今は10年間同じことをやってきた。その点では、Redisの中でサブプロジェクトを持つことで正気を保とうとしてきた。ある時はCluster、またある時はディスクストレージ(今は放棄されたが)、またある時はHyperLogLog、といった具合に。基本的に、プロジェクトに価値をもたらしつつも、単体で見れば別物と言えるようなものだ。しかし結局は、issueとPRのページに戻り、毎日同じようなことに対処しなければならない。「タイムアウトでレプリカが切断される」とか、なんであれ。またそれを調査するのだ。

恐れ

私はいつも、プロジェクトにおける技術的なリーダーシップを失うことへの恐れを抱えてきた。それは自分がRedisを設計し進化させるのに十分な能力がないと思うからではなく、自分のやり方が、1) かなりの数のユーザーが望んでいること、2) ITの世界で大半の人がソフトウェアとはこういうものだと信じていること、と一致していないと分かっているからだ。だから私は、自分が良いと信じる設計や機能セットや開発スピード(遅い)やプロジェクトサイズ(ミニマル)と、大多数のユーザーベースから期待されているものとの間で、常にバランスを取らなければならなかった。幸い、Redisのやり方を完璧に理解してくれているユーザーも一定数いるので、時々は慰めの言葉をもらうこともできる。

摩擦

どうしようもないクズみたいな人間はどこにでもいる。それは自然なことだし、言わせてもらえば、プログラミングの世界は他の分野に比べてもまだマシな人間が多いとさえ思っている。だが、それでも一定の割合でどうしようもない輩は必ず現れる。人気のあるOSSプロジェクトのリーダーとして、否応なくそうした人々と対峙しなければならず、それはRedisの開発の中で私が経験した最もストレスの多いことの一つかもしれない。

徒労感

時々、ソフトウェアは素晴らしいものではあるけれど、本を書くことのように何世紀にもわたって残るような偉大なものには決してならないのではないかと思うことがある。それはソフトウェア自体が素晴らしくないからではなく、同時に「役に立つ」ものであるがゆえの副作用として、より役に立つものが現れれば置き換えられてしまうからだ。私は他の活動にも時間を使いたいと思っている。だから時々、自分がやっていることは結局すべて徒労なのではないかと感じる。私たちはシステムを設計し、書き、そして新しいシステムが現れる。ただソフトウェアの中に留まるだけで、「ソフトウェアの大きなアイデア」の中に留まらなければ、誰が新たな金字塔を打ち立てられるだろうか?時折、自分には大きなアイデアに取り組む能力が潜在的にあったのに、ソフトウェアについて考えるのではなく、ソフトウェアを書くことに集中したために、その可能性を活かせなかったのではないかと思うことがある。これは基本的にインポスター症候群とは真逆なので、よほど自惚れが強いんだろう。謙虚になるべきだ、すまない。

とはいえ、私は何年もの間、本当に愛することをやって働くことができ、それが友人や評価やお金をもたらしてくれたのだから、悪い取引だったと言うつもりはない。それでも、プロジェクトが人気を得た途端に、なんとか持ちこたえるのに苦労している人たちの気持ちは痛いほどよく分かる。このブログ記事は、彼らに捧げる。

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

コメント