写真提供:マイナビニュース

写真拡大

「数行のコードを削除しただけで、たった1人のプログラマがインターネットを麻痺させるまで」

Quartzに3月27日に掲載された記事のタイトルである。「そんなことあった?」と疑問に思った人も少なくないと思うが、先月末にbabelやatomなど数多くのnpmパッケージが突然機能しなくなるというトラブルが起こった。原因は、left-padという数多くのnpmパッケージが利用していたJavaScriptライブラリを作者がnpmから取り下げてしまったからだ。

なぜ、そんなことになってしまったのか? npmでkikというモジュールを公開していたAzer Koçulu氏(left-padの作者でもある)に、「Kik Messenger」を開発するKik Interactiveが「kik」という名称の変更を要求したのが発端だ。Kik InteractiveはKikを広く国際的に商標登録している。しかし、Koçulu氏はオープンソース・プロジェクトとしてKikを使用してきた権利を主張して変更を拒否。そこでKik Interactiveの代理人はnpm, Incに解決を求めた。

npmはパッケージの名称に関して、名前を似せたスパム、入力ミス、誤解を招く名前、そしてKikのようなもめ事まで様々な問い合わせを受けており、「npmユーザーがパッケージに対して想像する通りの名称で提供する」というポリシーを設けていた。そしてKikという名前については、2億人以上のユーザーを持つKikメッセンジャーに関するパッケージと見なされると判断し、Kik Interactiveに名称を管理する権利を認めた。その判断にKoçulu氏が激怒、「オープンソースの貢献者を脅す企業の特許弁護士の側に(npmが)付くとは夢にも思わなかった」と273個のパッケージ全てをnpmから取り下げてしまった。その中にleft-padが含まれていたため、大混乱に陥ったというのが経緯である。

その後の顛末は、left-padに起因するnpmエラーが発生し始めた直後に、Cameron Westland氏がleft-padと同等の機能のパッケージをleft-pad 1.0.0としてパブリッシュした。しかし、バージョン番号に紐付いたエラーが収まらず、そこでnpmは混乱を収めるために、オリジナルの0.0.3を再パブリッシュするという前例のない処置を実行した。

この騒動に関しては、Koçulu氏、Kik Interactive 、npmがそれぞれブログで経緯を説明している。

・Koçulu氏:I’ve Just Liberated My Modules

・Kik Interactive:A discussion about the breaking of the Internet

・npm::「kik, left-pad, and npm」

経緯に関して3つのブログ投稿に矛盾はない。だが、それぞれの立場で主張は全く異なる。

Koçulu氏の投稿を読めば「I do open source because, Power To The People」という一文が響くし、ビジネスとしてオープンソース・コミュニティと関わるKik Interactiveの姿勢も分かる。プラットフォームを正しく機能させることを最優先するnpmの判断も理解できる。3つのブログ投稿を読むと、アプローチの違いはあれども、それぞれがオープンソースの発展を望んでいることを互いに尊重した議論になっていたら結果は違っていただろうと思える。実際には、Koçulu氏とKik Interactiveの代理人のとげとげしいコミュニケーションで始まり、それぞれが立場を主張するだけの交渉から大きなトラブルに発展してしまった。

この騒動は様々な問題を浮き彫りにした。オープンソースの利用において、1人のプログラマが大混乱の引き金になったこと。left-padは空白行を含めてもわずか17行の文字詰めモジュールであり、そんなシンプルな機能までパッケージに頼っているプログラマの依存過多。そうした依存をnpmが仕切ることの危うさ、npmの信頼性。個人が簡単に自分のパッケージを取り下げられるnpmの仕組み。オープンソースにおける企業と個人(人々)の対立、等々。

この騒動に関しては、Nadia Eghbal氏の「There is no “my” in open source」の中で、Karl Fogel氏がユニークなコメントを残している。「my(私の)」という言葉、「私の自転車」「私の携帯」など所有を示すが、「私の父親」という場合は所有ではなく、自分と父親の関わりを表す。「オープンソースにおける”my”は関連を意味する。オープンソースに所有の”my”は存在しない」とFogel氏は指摘している。つまり、Koçulu氏がその意志で消せるのはコードとの関わりだけであり、オープンソースにおいては作者といえどもパブリックなコードを奪うことはできない。実際、Koçulu氏の取り下げで空いた273個の空白はオープンソースコミュニティの力によって瞬く間に埋められた。この見方、GitHub世代からは疑問視する声が少なくないが、個人的には納得できるものだ。

Koçulu氏は混乱を引き起こしたことを謝罪し、その上で破壊を目的とした行動ではなかったと説明、長期的にはnpmに代わってオープンソースコミュニティのためになるソリューションが作られるきっかけになる、と理解を求めている。npmは、アンパブリッシュなどの仕組み、名称の権利を割り当てるポリシーなどを改善するという。またコミュニティ内のトラブル解決において、全スタッフが同じように対応できるように内部ポリシーをアップデートしている。

(Yoichi Yamashita)