事件の流れ
- kik パッケージの作者のもとに同名の会社の弁護士からモジュール名の変更要求が届く
- 作者が拒否したところ弁護士は npm の運営にコンタクトする
- 運営が作者の許可なくパッケージを unpublish する
- 作者がこれに反発し自身が所有するパッケージをすべて unpublish する
- I’ve Just Liberated My Modules — Medium
- unpublish されたパッケージは npmjs.com からダウンロードできなくなる
- unpublish されたうちのひとつである left-pad に依存したパッケージが多数あったため世界中でビルドがぶっ壊れる
- 作者が npm 上の left-pad の所有権を他人に譲り渡す
- 新しい所有者が left-pad の再 publish を試みるも、同一バージョンは再 publish 不可
- 世界中でビルドがぶっ壊れ続け npm 社の CTO が居ても立ってもいられなくなる
- 新しい所有者の要求を受け、 CTO が管理者権限により unpublish の取り消しを実行する
- ビルドがぶっ壊れなくなったため、 CTO はぐっすり眠れそうとのこと
何が問題だったのか
- 法務関係の事態とはいえ、作者の許可を得ずにパッケージを unpublish したこと
- 騒動が広がったため、 npm 社内の合意もおろそかに unpublish の取り消しを実行したこと
- パッケージの所有者がパッケージを unpublish できるようになっていること
- メジャーなパッケージマネージャの多くは unpublish に相当する操作を提供しない
- 代わりとして unlist (NuGet) や yank (Cargo) といった操作を提供することがある
- unlist/yank されると、パッケージリポジトリのバージョン一覧には表示されなくなるが、パッケージを直接ダウンロードすることは可能
- unpublish されたパッケージのネームスペースを他人が乗っ取れるようになっていること
- 同一バージョンの再 publish はできないものの、別のバージョンで悪意のあるコードをアップロードすると依存元パッケージを攻撃できる可能性がある