VOICEVOX/voicevox_core

ダウンローダーにLGPL-3.0が入っている

Closed this issue · 8 comments

不具合の内容

#1006 ではbatというツールを、ライブラリとしてダウンローダーの依存に含めました。ここでbatのライセンスはMIT OR Apache-2.0なのですが、batの依存であるansi_coloursのライセンスがLGPL-3.0-or-laterとなっています。

これについての詳細は sharkdp/bat#792 にあります。どうやらansi_coloursの作者本人であるmina86氏がansi_coloursを導入するPRを出し、ansi_coloursがLGPLv3であることに気付かずにbatの作者がマージし、第三者が指摘したというのがこのissueのようです。最終的には、バイナリとして配布する分には問題ないでしょというmina86氏の言葉によってそのままcloseされています。ただ

It’s true that if someone was to take bat and turn it into closed-source program, they might be in violation of ansi_colour’s license, however, I wouldn’t consider that an issue that bat or Gentoo needs to resolve.

らしいので、まあbatをライブラリとして使うような人は知ったことではないという結論になったのでしょう。

ansi_coloursが入っているのは現状ダウンローダーのみで、おそらくダウンローダーのみなら許容できると思うのですが、CIのcargo-deny周りが厄介になると思います。ライブラリ層にLGPLが入るようなことは起きないようにしないといけません。

[追記] ちなみに署名についてはこれでいいと思います。
I use public key cryptography to sign my code to assure its authenticity. Is it true that GPLv3 forces me to release my private signing keys?

現象・ログ

error[rejected]: failed to satisfy license requirements
  ┌─ registry+https://github.com/rust-lang/crates.io-index#ansi_colours@1.2.3:4:12
  │
4 │ license = "LGPL-3.0-or-later"
  │            ━━━━━━━━━━━━━━━━━
  │            │
  │            license expression retrieved via Cargo.toml `license`
  │            rejected: license is not explicitly allowed
  │
  ├ LGPL-3.0 - GNU Lesser General Public License v3.0 only:
  ├   - **DEPRECATED**
  ├   - OSI approved
  ├   - FSF Free/Libre
  ├   - Copyleft
  ├ ansi_colours v1.2.3
    └── bat v0.25.0
        └── downloader v0.0.0

再現手順

期待動作

VOICEVOXのバージョン

OSの種類/ディストリ/バージョン

  • Windows
  • macOS
  • Linux

その他

気づけたの素晴らしいですね!!!

あ、issueのゴールが見えないかもです!
理想的な状態はどういう感じでしょうか?👀


今目指してる方針は、ダウンローダーだけLGPLにすることでしょうか?
であればこれは相当時間がかかる(予想外のあれこれがいろいろ出てくる)ので、少なくとも0.16では避けた方が良い気がしています。
理由は、ライセンスというのは影響しうる範囲がグローバルなためです。
なので、今見つかってる課題は少なくともdenyだけでも、あとどこに影響がありうるのか、問題は起こらないのか等、考えないといけない範囲が広すぎるので避けるのが無難そうです。

冷静に考えると、今はcargo denyの対応をするのではなく、依存外すのがベストなのではと感じます。
0.16ではページャーを見送り、次から導入するか検討するのはどうでしょうか。
まあ進むも戻るも時間はかかりますが、おそらく戻るほうがかかる時間の期待値が短いのでは、と…。

仮にページャーを削る場合、「これとこれに同意が必要です、次に進むにはsを押してください」→「全文表示」→「これとこれに同意しますか?」の流れにする、などはどうでしょうか。

(ページャーの依存は無くしたほうが開発が楽になって幸せになれそう、という直感もあっての意見です)

ページャーを失くす場合、下にVOICEVOX ONNXRUNTIMEの規約だけが表示されるのはいずれ危なくなる(規約がそれだけだと勘違いされる)ので、もう今のうちからonnxruntime側の規約表示はなくしても良いかも。

batはページャーではなく、複数のファイルをいい感じに表示するやつですね。ターミナル表示という意味では一緒ですが。

よく考えたら何もbatの各機能が必要なわけではないので、我々の場合軽く雑に手作りできそうな気がします。
(色表示も不要だしターミナル幅を意識する必要もないので、利用規約を雑にそれっぽい罫線で囲うだけでOKなはず)

たしかにページャーを雑に作るのはできるかもですが、ページャーは0.16ではなしの方向が良い気がします。
まずページャー無しで表示するバージョンを作って0.16を完成させ、そのあとどうするか考える、というのはどうでしょうか?

仮にその方針で行く場合の流れは
「これとこれに同意が必要です、次に進むにはsを押してください」→「全文表示」→「これとこれに同意しますか?」
で良い気がしてます。
(これは更に良い案もありそう)

あ、書き方がよくなかったのですが、ページャーであるminusについては別に問題無いため、名無し。さんが言っていた手作りページャーとは別ですね。多分見た方が早いと思うので #1011 を出しました。

すみません、整理させてください!
LGPLの問題はそもそもなぜ生じて、なぜ #1011 では解決するのでしょうか?

#1006 ではbatというCLIツール兼ライブラリと、minusというライブラリの2つを導入しました。

batは「複数のファイルの中身をいい感じに表示するやつ」です。中身が大きいときはページャーのように振る舞いますが、これは中でless(1)を呼んでいるだけです(なのでWindowsにおいてはMSYS2/Git Bashが前提だったりします)。LGPL入りはこっちです

minusは「ページングを行うライブラリ」です。こちらはライセンス的に問題ないことが確認できています

#1006 では複数の利用規約をbatでまとめ、それをminusで表示するということをしていました。 #1011 ではbat抜きでそれっぽい整形をすることによってbatを外し、LGPLを依存グラフから外します。
(そもそもbatの役割がそんなに大きくなかったため、コード量的には数行も膨れていないと思います)

あ~わかりました、なぜかminusがbatに依存しているのだと勘違いしていました。すみません。。
(どうすれば気づけただろう・・・。)

レビューします!