Closed6

mimemagic問題についての情報を集めていく場所

ピン留めされたアイテム
catnosecatnose

以下追記です。

Rails 5.2.5, 6.0.3.6, 6.1.3.1 で対応済

これらのリリースでmimemagicが他のライブラリ(Apache Tika)に置き換えられたため特に対応が不要となりました。

https://weblog.rubyonrails.org/2021/3/26/marcel-upgrade-releases/

carrierwaveも2.2.1で対応済み

https://github.com/carrierwaveuploader/carrierwave/blob/master/CHANGELOG.md#221---2021-03-30

これで使用者の多いGemではmimemagic問題が解決されたと思われます。

catnosecatnose

mimemagic の件でruby界隈が混乱していますね。このスクラップはそのへんの情報をまとめたいと思ってます。

注意

  • 2021/03/26時点では色々と動きが激しいです。ここに書いてある情報をそのまま参考にはせず、最新の情報か確かめるようにしてください。
  • 推測を含んだコメントを投稿するかもしれません。誤りや補足があれば返信コメントをどうぞ。

mimemagic の何が問題だったのか

この部分はすでに多くの人がツイートや記事にしていると思うので、軽くまとめておきます。

  • mimemagic というMIMEタイプを検出するライブラリ(gem)がもともとMITライセンスで公開されていた。
  • しかし mimemagic に含まれていたfreedesktop.org.xmlのライセンスがGPLだと発覚。
  • GPLのライブラリに依存している場合、それを使っているライブラリはMITライセンスで配布できなかったりする(このあたりはMITとGPLライセンス?とかを読んでもらえば)
  • Rails や Carrierwave といった人気のライブラリが mimemagic に依存していたため影響範囲がとんでもなく大きい。

なぜこれまで気づかれなかったのか

  • mimemagic が freedesktop.org.xmlをソースコードの一部として配置していたから、というのはありそう。機械的に判断しようがない。画像はv0.3.5の時点のもの。
  • 2016年から全く更新されていなかったから中身まで見る人が少なかった(?)

mimemagicの新バージョンリリースと旧バージョンの配布停止

  • 上記の問題を解決するためにmimemagic v0.3.6にてMITからGPLへとライセンスが変更される
    • それ以下のバージョンはyanked(配布停止)されてダウンロードできなくなった。
    • この時点ではライセンスが変更されただけだったので、自分が担当するプロジェクトがGPLライセンスで良いならmimemagicをv0.3.5からv0.3.6にアップデートするだけで良かった。
  • その後すぐにv0.3.7がリリース。これが「freedesktop.org.xmlを除くことでMITに戻す」という破壊的な変更を含むものだった。しかも v0.3.6もyankedされてしまいダウンロードできなくなった。
    • freedesktop.org.xmlの部分は自分で用意しなければならなくなった。
  • その後もこまめにパッチバージョンがリリースされる。

現状の対処法

2021/03/26時点の話です。GPLでも問題のないプロジェクトは以下のように対処すれば良さそうですが、MITでなければならないような場合はどうしようも無さそう?

選択肢1. shared-mime-infoが使用できる環境を整えたうえでmimemagicをアップデート

これを書いている時点で最新の mimemagic バージョンv0.3.9ではGPLであるfreedesktop.org.xmlが既に含まれなくなっているため自分で用意する必要があります。freedesktop.org.xmlshared-mime-infoというパッケージに含まれています。

Linuxではshared-mime-infoが既にインストールされているようです(この認識は合っている?)。Macならbrew install shared-mime-infoでインストールする必要があります。

もしくはfreedesktop.org.xmlソース)だけをプロジェクト内のどこかのディレクトリに配置して環境変数ENV["FREEDESKTOP_MIME_TYPES_PATH"]でそのファイルのパスを指定することもできるようです。

詳しくはソースコードを見てもらうのが早そうです。

※ 注意点はmimemagic(v0.3.9)はMITでも、shared-mime-infoはGPLということです。

そのうえでbundle update mimemagicでgemをアップデートすれば動くようになります。

選択肢2. RailsのActiveStorageを使わないようにする

詳しくはRailsユーザーはどうすればいい?- mimemagicの最新動向 - HackMDが参考になりそうです。

今後のRailsの対応

追記:対応されました

メンテナのpixeltrixさんのコメントによるとmimemagicを使わないように修正されることになりそうです。

...略...
we're planning to release a fix this week based upon a database of file signatures licensed under the Apache 2.0 license
...略...

↓ こちらのIssueでワークアラウンド的な対処法などが議論されています。

https://github.com/rails/rails/issues/41757

↓ Rails自体の対応としてはこちらのIssueに続報が投稿されるのではないかと予想しています(コメントは既にロックされています)。

https://github.com/rails/rails/issues/41750

tchikubatchikuba

dockerで軽量版Linuxでよく用いられているalpineではshared-mime-infoがデフォでは入ってないので明示的に入れる必要がありました。
ただ他のライブラリが依存関係もってて明示しなくても入ってるケースだと動く現象があって環境差異の問題でそれなりに嵌りました。。

catnosecatnose

なるほど、alpineだと入っていないのですね。情報ありがとうございます。

このスクラップは2021/03/31にクローズされました