広く使われているオープンソースソフトウェア(OSS)において、開発者が意図的に「改悪」したバージョンをリリースしたことが話題になっています。いったい何が起きたのでしょうか。

今回、問題が起きたのは「colors.js」というJavaScript製のライブラリです。このライブラリはJavaScriptの実行結果を色分けすることで読みやすく出力する機能を提供しており、パッケージ管理システムであるnpmからは(自動化されたビルド処理などを含めて)1週間に2000万回以上ダウンロードされています。

しかし1月8日、このライブラリに悪意のある改変を加えたバージョンがリリースされたことで、これを利用する多数のシステムが影響を受けました。たとえばアマゾンが提供しているAWS開発者向けのツール(AWS CDK)において、画面表示がおかしくなる現象が報告されています。

その被害規模もさることながら、問題となった改変を加えたのがライブラリの作者であることが話題になっています。GitHub上のソースコードによれば、作者自身が意味のない無限ループを実行するなどの処理を加えたことが分かります。実装ミスなどによる偶発的なバグではなく、意図的に無限ループを発生させる書き方といえます。

問題となった無限ループを実行するコード(colors.jsのGitHubリポジトリより)
問題となった無限ループを実行するコード(colors.jsのGitHubリポジトリより)

直接の動機は不明ですが、2020年10月に作者が投稿したツイートによれば、火災で大きな損害を被り、寄付を募っていたようです。その後の投稿からは、オープンソース活動に対して世の中から十分な還元がされないことに不満を抱えていたことがうかがえます。

これほど広く使われているにもかかわらず、なぜ利益を得られないのでしょうか。このライブラリは、著作権表示をするなど一定の条件に従うことで誰でも無償で利用できる「MITライセンス」で提供されています。ライセンス上は、GAFAMのような大企業であっても無償で利用でき、開発者に収益を還元する義務はないといえます。

無償である代わりに、多くのオープンソースライセンスでは開発者は何の保証もしておらず、責任も負っていません。ソースコードが無償で公開されている以上、利用者は自分で中身を確認し、問題があれば開発者に修正を提案するか、自分でソースコードを書き換えればよいというわけです。

それでは、開発者が意図的に悪意のあるコードを混入した場合はどうでしょうか。この場合、何をもって「悪意がある」とするのか、また各国の法制度との兼ね合いもあって議論が分かれるところです。本件については、GitHubは開発者のアカウントを停止する措置を取ったようです。

あくまでオープンソースソフトウェアの利用は自己責任というのが原則ですが、だからといって、利用者全員がソースコードの中身を疑ってかかるというのはあまりにも高コストです。開発者に適切な利益がもたらされる仕組みがあれば、「反乱」を起こす金銭的な動機付けは失われ、社会全体にメリットがあると考えられます。

善意に頼るだけでは限界がある?

ソフトウェア開発者がオープンソースのプロジェクトに取り組む理由はさまざまです。必ずしも無償というわけではなく、たとえば企業に所属して、報酬を得ながら活動をしている人もいます。

あるいは、オープンソース活動では企業という枠を超えて自分の実績やスキルを可視化できます。これは採用においてプラスに働く場合があり、筆者の知り合いでもオープンソース活動をきっかけに転職に成功した人がいます。

もちろん、そうした実利とは関係なく、プログラミングが好きだから、あるいは自分が書いたソフトウェアを多くの人に使ってほしいから、といった動機で取り組む人も多いでしょう。しかしそうして作られたものが世界規模で使われるとなると、話は変わってきます。

最近、世界を揺るがした「Log4j」の脆弱性問題では、本業を別に持っている開発者たちが、ボランティアで対応に追われたことが注目を浴びました。寄付を募る仕組みはあるとはいえ、善意に頼るだけでは限界があるのではないか、という懸念があらためて浮き彫りになったといえそうです。