開発者ブログ

OSS を育てるために僕らができること

開発部の海老原です。

先日、 htmlspecialchars() の文字エンコーディングのチェックが甘く、これを利用して XSS に利用される危険があるということで日本人の岩本さんがパッチを提供しましたが、却下されてしまっていました
(ただ現時点で、 id:moriyoshi さんにより Subversion 上の PHP では対応済みです。ありがとうございます)

この件について各所で議論がされていました。
大まかな流れについては、徳丸浩さんがブログでまとめておられます
このエントリ中で、「このあたりから、一連の流れが広く知られるようになって、『もっと効果的な訴求方法があるよ』とか、海老原昂輔さんからもバグレポートが投稿されるなどの働きかけが始まっているようです。海老原さんのレポートには私のエントリも英訳されていて、本当にありがとうございます。」という風に述べられているように、僕もバグレポートの reject に対して抗議をしたり、その抗議のよりどころとして徳丸浩さんのエントリid:t_komura のエントリを英訳し、レポートとしてまとめたりしました(お二方にはこの場を借りて厚く御礼申し上げます)(僕のひどい英語についてはとりあえず目を瞑ってください……)。

ここまで読んで、こんな疑問を思った方はいらっしゃるでしょうか。「なぜ手嶋屋というアプリ屋の人間が / OpenPNE の開発者が PHP 内部のことに口を出すのだろう」と。
僕個人はあまり PHP に愛着を持っているわけではありませんし、文字エンコーディングについて精通しているわけでもありません。ただ、僕は、ひとりの OSS 開発者としてこの問題を見過ごせなかったのです。

ちょっと長くなってしまいましたが、このエントリでは、「なぜ海老原がそんなことを」ということから「OSS を育てるには?」というところをお話ししたいと思っています。
もちろん一口に OSS といっても様々ですので、すべてのプロジェクトに当てはまるとは思っていませんが、みなさんが「自分ももっと OSS に貢献してみよう」と思うきっかけになれば幸いです。

僕は 2005 年 12 月、 17 歳の時から手嶋屋で OpenPNE プロジェクトに携わってきました。まだまだ未熟者ではありますが、 OSS 開発の素晴らしさや辛さを身をもって知り、 現在では OpenPNE の lead として毎日できるだけ多くの時間を OpenPNE を発展させるために注いでいます。

僕は日本大学芸術学部演劇学科を中退し、現職に就いています。細々と演劇をやってきた僕が最近思うのが、「ああ、 OSS と演劇ってすごく似ているな」ということです。
演劇の三大要素として「脚本」(もしくは「舞台」)、「役者」、「観客」というものがあります。 OSS でも、「ソフトウェア」、「開発者」はもちろんのこと、「ユーザ」の存在が重要だと思っています。

観客がいない芝居は存在しないのと同じです。観客を意識してこそ受け入れられる芝居作りができます。演劇は「今、ここに」の芸術で、何度同じ題目の芝居をやってもまったく同じ作品になるということはなく、その上演の観客のリアクションや会場の雰囲気、役者やスタッフのモチベーションや脚本への理解度など様々な要素によって大きく変化していきます。
これを OSS に置き換えて読んでみてください。なんとなく似ているなという気がしません?

OSS を支えるもっとも大きな力となっているのは開発者ではありません。ユーザです。
たとえば、 OpenPNE3 からは国際化対応が可能になったものの、実際はそれを希求するユーザが少なかったために優先度が下がっていました。ところが先ほど、台湾の Finjon Kiang さんから質問を受けチャットでお話しさせていただいたことをきっかけに、海老原が重い腰を上げて まずは第一歩として日曜日までに英語のドキュメントを揃える約束をしました。また、彼からフィードバックを受け、非日本語圏ユーザの対応を進める考えを持っています。彼から相談を受けなければ僕は現時点で行動することはなかったでしょう。ユーザの力というのはそれほど重要のものなのです。

ただ、 Finjon さんにはお会いしたことがあったり、たまたま僕の仕事が一段落したところで親切に対応する余裕があった、ということで前述の件はあくまでうまくいった例に過ぎません。実際はそんなに簡単に行かないこともあると思います。今回の htmlspecialchars() の件のように。

OSS 開発者も一人の人間ですから、認識が甘かったり視野が狭かったり思い込みが激しかったり体調が悪かったりなどあると思います。たとえば僕にはアラビア語のように右から左に読む言語についての知識が皆無ですし、アラビア語圏の人々に関する理解もまったくありません。そんななかで「OpenPNE をアラビア語に対応してくれ」と言われても渋ってしまうでしょう。しかし、たとえば、「アラビア語に対応するにはこんなビューの設計じゃダメだ、こうしなくては」と提案をもらったり、「エジプトでは SNS のようなコミュニティサイトが強く求められているのだ」というような要望をもらい続ければ、やはり人間ですから、「ああ、なんとかしなくてはな」と動き出すに違いありません。たとえそうならなかったとしても、公開の場で「この海老原というリードデベロッパーは頭の固い奴でアラビア語の一つもロクに対応してくれない卑劣な人間だ。なんとかしてくれ」と他の開発者やユーザに泣きつけば、僕がひどいバッシングを受けてしぶしぶ対応するか、もしくは他の意欲的な人が対応を進めてくれるかもしれません。
ただ、最初の要望の段階で「ああやっぱりアラビア語なんかには対応してくれないのか」と諦めてしまっては、そこで終わりです。たぶん僕も「ああその程度の熱意だったのね」と感じで別のバグや要望に取りかかって忘れ去ってしまうことでしょう。これは、ソフトウェアを使いたいユーザにとっても、ソフトウェアを使ってもらいたい開発者にとっても、お互いに損でしかありません。

僕は今回、htmlspecialchars() の問題を遠巻きに見ていましたが、今回パッチを提供された岩本隆史さんが諦めそうになっていたことを秋元さんのエントリで知り、とても辛い気持ちになりました。同じく OSS にかかわる人間として、 jani さんの対応はひどいなと思うのと同時に、 reject した彼の気持ちもわかるのです。 PHP のバグレポートの量やバグの複雑さといったら、とても OpenPNE の比ではないでしょう。そんななか PHP を進化させるためにバグレポートをトリアージしていく労力といったら、察するにあまりあるほどです。そこで一つのチケットを誤ってぞんざいに処理してしまったとしたら、それは非難されて当然とはいえ仕方がないことだともいえます。
一方で、岩本さんの辛さもわかるのです。僕もいくつかのプロジェクトにユーザとして英語でバグレポートを書いたりパッチを提供したりしていますが、そのうちのいくつかは通りいくつかは reject されました。せっかく慣れない英語で時間をかけてレポートを書き上げたのに理不尽な理由で reject されたときや、「もう 1 ヶ月前にその問題は自分が見つけたから待っててよ」などと言われた日には、ついふて腐れて反論する気も失せてしまいますよね。

ただ、ここまできてこの問題がそのままになってしまうのは、先ほども申し上げたとおり両者にとってデメリットです。僕は OSS にユーザと開発者の両方の立場で携わるものとして、一つのコントリビュートが死んでしまうのを見るのは耐えられなかったのです。そして、なんとかこの問題をあらゆる人が納得のいく結末まで持って行きたい、というその一心で、下手でめちゃくちゃな英語ですが ML に抗議をし、参考になる日本語のエントリを超訳で英訳するという行動を起こすに至ったのです。

秋元さんはかなりヘビーなところまで要求されていましたが、幸運にも本件はすぐに多くの人々から注目を浴び、多くの人が行動を起こし、ついに Subversion にコミットされるに至りました。
しかしこれはあくまでたまたまこれが注目を浴びたからであって、運が悪ければ、場合によっては秋元さんが挙げておられるような手段をいくらでも用いて、熱意を持って根気強く、対応されるまで努力し続ける必要があったとしてもおかしくありません。

OSS は言うなれば、「ユーザ参加型ソフトウェア」です。
ユーザは質のいいアプリケーションをほとんど自由に使うことができるようになると同時に、「品質向上のためには自分もユーザとして行動しなければならない」という責務を負います(もちろん質に満足していればその必要はないです)。
本当にソフトウェアをよくしたいのであれば、たとえ開発者がダメな人間ばかりであったとしても、行動するべきです。今回岩本さんをはじめとする多くの人々がそうしたように。

ということで、みなさん、普段使っている OSS に対して不満はありませんか? もしあれば、解決するために行動してみませんか? みなさんは既にユーザとしてソフトウェアをよくする切符を持っているわけで、それを使わないのはもったいないと思います。気が向いたときにでも是非やってみてください。 OSS の成長に貢献するのは、きっと想像以上に面白いはずですよ。
(もし不満のある OSS がないという方は、まだ発展途上の OpenPNE3 のユーザになってみてください。きっとやりがいがあるんじゃないかと思います)

OpenPNE�~�蓈���񋟃T�[�r�X�̂��m�点

  • ��K�̓z�X�e�B���O
  • �Z�p�T�|�[�g
  • �J�X�^�}�C�Y
  • OpenPNE Manager
  • ���q���܃T�|�[�g

ページの先頭に戻る