Android
Kotlin
GPL
OSS
LGPL

Kotlinが使用しているOSSにGPL(LGPL)がいる話

Kotlin(1.2.10)のライセンス周りについて調べていました

Kotlin自体はApache License 2.0
https://github.com/JetBrains/kotlin/blob/v1.2.10/license/LICENSE.txt

以下、Kotlinが使用しているOSSのライセンスまとめです

https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party にまとめられているOSS

  1. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/aosp_license.txt
    Apache License 2.0

  2. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/args4j_LICENSE.txt
    MITライセンス

  3. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/asm_license.txt
    BSDライセンス

  4. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/boost_LICENSE.txt
    MITライセンス

  5. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/closure-compiler_LICENSE.txt
    Apache License 2.0

  6. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/dart_LICENSE.txt
    BSDライセンス

  7. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/gradle_license.txt
    Apache License 2.0

  8. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/gwt_license.txt
    Apache License 2.0

  9. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/jquery_license.txt
    MITライセンス

  10. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/jshashtable_license.txt
    Apache License 2.0

  11. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/json_LICENSE.txt
    MIT

  12. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/maven_LICENSE.txt
    Apache License 2.0

  13. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/pcollections_LICENSE.txt
    MIT

  14. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/prototype_license.txt
    MIT

  15. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/scala_license.txt
    BSD License

  16. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/rhino_LICENSE.txt
    MPL 1.1 / GPL 2.0 dual licensed

  17. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/trove_license.txt
    LGPL v2.1

gradlewのdependenciesコマンドで依存関係を出力した結果から依存していたOSS

出力結果

+--- org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.10
| \--- org.jetbrains.kotlin:kotlin-stdlib:1.2.10
| \--- org.jetbrains:annotations:13.0
  1. org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.10
    https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-jre7
    Apache License 2.0

  2. org.jetbrains.kotlin:kotlin-stdlib:1.2.10
    https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib
    Apache License 2.0

  3. org.jetbrains:annotations:13.0
    https://mvnrepository.com/artifact/org.jetbrains/annotations/13.0
    Apache License 2.0

GPLとLGPLがある

 16. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/rhino_LICENSE.txt
MPL 1.1 / GPL 2.0 dual licensed

 17. https://github.com/JetBrains/kotlin/blob/v1.2.10/license/third_party/trove_license.txt
LGPL v2.1

16(rhino)はKotlinの初期バージョンから(1.0.3ですでに入っていた)、17(trove)は1.1.2から追加されたようです。

GPL(LGPL)とコピーレフト

GPLには強いコピーレフト、LGPLには弱いコピーレフトを持っています。
コピーレフト
https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%94%E3%83%BC%E3%83%AC%E3%83%95%E3%83%88

リンク先抜粋

著作物の利用、コピー、再配布、翻案を制限しない
改変したもの(二次的著作物)の再配布を制限しない
二次的著作物の利用、コピー、再配布、翻案を制限してはならない
コピー、再配布の際には、その後の利用と翻案に制限が無いよう、全ての情報を含める必要がある(ソフトウェアではソースコード含む)
翻案が制限されない反面、原著作物の二次的著作物にも同一のコピーレフトのライセンスを適用し、これを明記しなければならない

この条件は時に(コードを開示したくないとき)やっかいなものです。

Kotlinで作成されたアプリにコピーレフトが適用されるのか

16に関してはデュアルライセンスなので、MPLを選択すればコピーレフトは適用されないかと思います
17は微妙なところです、LGPLはOSSを使用しているソフトウェアにコピーレフトの制限がかかりますが、継承義務はありません
つまり今回でいうとtrove(LGPL) -> Kotlin(apache2.0)が許されます

そのため、Kotlinで作成したアプリケーションにtroveが入るかどうかがポイントになるかと思います。

これに関してはまだ調査の途中でtroveがKotlin内でどのような使われ方をされているのかまだわかりません。
ただKotlinで今回作成したアプリのapkをでコンパイルしてtroveが入っているか確認したところ、入っておりませんでした。

なので、現時点での結論はKotlinで作成したすべてにコピーレフトを持たなければいけないと言うわけではない。という釈然としない感じになってました。。。

個人的な意見としてはAndroidの公式言語になった開発環境で作られたアプリケーション全てにコピーレフトがつくかもしれないってヒヤヒアしながらつくる環境にはしないようなきがするよなぁ