最近、オープンソースソフトウェア(OSS)の開発者が一方的にその成果を利用する企業などから支援や報酬が得られないことへの反発が高まっています。オープンソースソフトウェアの開発インセンティブの問題やライセンスの問題は過去にも研究所でカバーされている話題ですが、ずっとくすぶり続けているテーマで最近噴出の勢いが強まっている感じです。

オープンソースソフトウェア開発者の被搾取感や負担感という問題は、ビットコインもOSSであり、ビットコイン周辺の多くのライブラリやツールもOSSであるため私達にとっても全く他人事ではありません。今日は今週話題となったfaker.js/color.jsの事件に触れ、ビットコインおよびビットコイン周辺のソフトウェアで類似の事件が起こった場合を想定します。

FAKER.JS/COLOR.JS事件

この記事を書くきっかけとなったのは、faker.jsおよびcolors.jsという2つのNodeJSライブラリの作者が意図的にこれらのライブラリに無限ループを含めたアップデートを公開し、その影響で多数のプログラムが動かなくなったという今週発生した事件です。2つ合わせて毎週2500万回ダウンロードされるほど広く利用されているライブラリに起こり話題となりました。

サボタージュの動機はあまりにも広く使われるようになったこのソフトウェアの維持に対して対価が払われていないことへの鬱憤とされています。詳しい経緯は不明ですが、本人も公開当初はこんなに広く使われると思わず、報酬や感謝を伴わない責任だけが大きくなっていくなかで、支援を要求しても応えてもらえず、負担感に耐えられなくなったのではないかと想像してしまいます。

確かに大規模なシステムの要となってしまっている、個人が開発したようなちょっとしたOSSはたくさん存在しています。xkcdにもその様子を皮肉った1コマ漫画があります:

https://xkcd.com/2347/

さて、今回の問題で被害を受けたのはバージョンを指定せずに(=自動的に最新版を利用する)これらのライブラリを使用するソフトウェアです。したがってユーザーはバージョンを指定していれば勝手にアップデートされることなく影響も受けませんでした。他人の書いたコードを無監査で実行しないために依存関係にあるライブラリのバージョン指定は重要ですが、残念ながらOSSをわざわざ監査して使っている人はかなり少数派という現実があります。(その割にバグやアップデートなどで開発者が責められる…)

また、開発者の方はライセンスを適切に設定・変更することで自分の意図したのと異なる使われ方をしないようにすることができます。今回のケースでは大企業の商用利用のみ有償とするライセンスなどが考えられます。もちろん、ライセンス違反を発見したり違反金をもらうための人的・法的コストが大きいので泣き寝入りになる可能性はかなりありますが…。

ビットコインに関係する類似事件を想定する

ビットコインの世界もこの事件とは無関係ではありません。むしろ多くの業界より更に現実的なリスクがあるとさえ感じます。ビットコイン自体と周辺ソフトに関して、類似事件が起こる可能性や対策を想定することにしましょう。

まずビットコイン自体もオープンソースソフトウェアであり、開発者たちは基本的に無給で新機能の開発やメンテナンスをしています。中にはグラントを通して特定の開発者を支援している企業や、GitHubなどを経由して個人的に寄付しているユーザーもいますが、大半のユーザーや事業者などはフリーライダーで開発者を搾取している側だという見方もできます。

被搾取感や負担感の問題は必ずしもお金で解決できるものではないというのも難しいです。いくら紙幣を印刷できても有限の資源は印刷できないように、いくらお金をかけてもできない・やりたくない仕事というものがありますし、自発的にやっていることに対して外発的な報酬を受け取ると動機が弱まってしまうというアンダーマイニング現象もあります。

最近は著名なビットコイン開発関係者が退くことを相次いで表明しており、単純に燃え尽きだという見方もありますが、ビットコイン開発者をターゲットにしたスラップ訴訟ハラスメントが原因という解釈が主流です。独創的なプロトコル提案をよくしているJeremy Rubin氏のツイートがよくまとまっています:「ビットコイン開発は無償でも進んでやりたい!残念ながら、実際は無償どころか精神衛生面で毎年100万ドル相当の赤字が発生してしまう」

https://twitter.com/JeremyRubin/status/1476658407817953291

幸運なことに、ビットコイン自体のコードはかなり多くの目に晒されている方であり、リポジトリの管理方法も透明性が高く、そしてバージョンアップが比較的少ない上にその緊急性・必要性も大抵低いのでcolors.js/faker.jsのようなことにはなりにくいでしょう。そもそもライブラリと同じ気軽さでノードはアップデートしませんし、取引所など多大な資本を持つ主体も自身の安全性に直結するため最低でも数社はアップデートのたびに監査していると考えられます。

一方でビットコイン関連のライブラリやツールには、少数のユーザーあるいは個人1人が作成しメンテナンスしているものが多数あります。ビットコイン関連というだけで悪意のあるコードを実行できた場合の金銭的リターンの期待値が高まり、開発者本人によるサボタージュのみならずGitHubアカウントのハック等による不正なアップデートの危険性も大きくなるので、大変リスクの高い状況です。

特に危ないのはLNノード管理ソフトなどのようにお手軽に開発できるがウォレットに接続するアプリでしょうか。次点で有名なdappsのフロントエンドなども当てはまるかもしれません。そのようなものは必ずコードをチェックし、できる限り安全な環境で使用し、なるべく使用しないのが良さそうです。これらが依存している先のライブラリやスクリプトを含みます。

個人的にはむしろcolors.jsやfaker.jsのような仮想通貨に直接関係のないが広く普及している、誰も意識していないライブラリにビットコインアドレスを書き換えようとするマルウェアなどが含まれる可能性が一番怖いです。

自衛するには

自分の使用するライブラリのコードはできる限り監査する、メンテナンスしている人員が多いものを使用する、使用するバージョンをロックする、自分で実装するなどといった対策が考えられます。厳密にはそのライブラリがさらに依存するライブラリまで監査していく必要があり、負担はめちゃくちゃ大きいです。

ですがこの負担から実際にチェックするユーザー、修正を提案するユーザーが少ないことがOSS開発者の負担感につながる直接的な要因の1つだと考えられるので、小規模なライブラリ等は余裕があれば自分で目を通し、問題があれば質問・指摘・修正するというのは多くのエンジニアにできる一種のOSS開発者への貢献です。

報酬を得るには

ライセンスを工夫するのは最近のトレンドで、Umbrelなどに関しても本コラムで話題にしました。何も考えずMITライセンスで公開するのも自由ですが、自分がどういう使われ方なら納得するかを重視してある程度制限のあるライセンスを選択するのも望まぬ被搾取感の予防につながります。(少なくともコンプライアンス意識の高い会社による違反は予防できる)

支援するには

OSS開発者を支援する方法として、GitHub Sponsorsという機能があります。これは特定のGitHubユーザーに対して金銭的な支援を月額で支払うもので、当該ユーザーが審査に通っていて機能を有効化していれば誰でも定期的な寄付をすることができます。また、幸か不幸かここのところビットコインの手数料水準が低いままなので、寄付用アドレスを見つけたら寄付するという手もあります。更新されていない場合もあるので、予め寄付したいことを伝えて新しいアドレスを教えてもらうのが無駄なGOXを防ぐ上でもプライバシー面でもベターです。

まとめ

・OSS維持の被搾取感から自分で開発したライブラリをサボタージュする事件が発生

・ビットコインもOSSとして開発者の負担感

・心労を問題として抱えている

・ビットコイン関連アプリなどは特に依存先に悪意のあるコードが存在しないか注意が必要・金銭的支援の方法も存在するが、問題は必ずしもお金じゃない