はじめに
ライセンスがLGPLのライブラリを使いたい、しかしソースコードは開示したくない、という問題に悩まされております。
具体的には、一年前のAndroidアプリにおけるCIFS/SMB対応についてという投稿と同じく、CIFS/SMBのライブラリを使用したいです。
今回はFlutterではなく.NET MAUI(C#や.NET Core)で使用できるCIFS/SMBのライブラリを探していますが、やはりライセンスがLGPLのものしか見つかりません。
そこで改めてどうしたら良いか調べましたので、後で見直せるように投稿しておきます。
ソースコード開示義務がある条件は?
まずソースコードの開示義務の条件は、「動的リンクの場合はソースコードの開示は不要。静的リンクの場合はソースコードまたはオブジェクトコードの開示が必要」となりそうです。
参考1:GPL v2 / LGPL v2.1 のデュアルライセンスについて(yotiky Tech Blog)
参考2:LGPLに対する動的リンクの誤解
参考3:GPL系のOSSライセンスとソースコード開示義務(IT法務.COM)
参考4:とほほのライセンス入門
参考4では「モジュールをライブラリとして呼び出すだけであれば、開発コードの公開は不要」と説明されており、この文章を読んだだけでは静的リンクの場合もソースコードやオブジェクトコードの開示は不要と読めてしまうので、少し謎が残ります。
iOSアプリやAndroidアプリで動的リンクできるのか?
次にiOS(iPhone)アプリやAndroidアプリで動的リンクができるかどうかは、Androidの場合は可能そうです。
「ユーザーがライブラリを差し替える」ことができればOKのようです。
参考5:LGPLのライブラリをライセンスに抵触せずにAndroidアプリへ組み込む方法
参考6:LGPLとAndroidのジレンマ
参考7:AndroidアプリとLGPLライセンスについて問題ないという解釈のツイート
ただ今回は.NET MAUIでアプリを作ろうとしており、.NET MAUIで動的リンクができるかどうかについては調査中です。
分かり次第投稿したいと考えいます。
オブジェクトコードとは?
静的リンクの場合は、ソースコードまたはオブジェクトコードの公開が必要となります。
オブジェクトコードとは、ソースコードをコンパイルした後の、リンカでリンクされる前のコードです。
.NET MAUIの場合はオブジェクトコードに相当する段階があるのかどうか、調査中です。
そもそも.NET MAUIは簡単に逆コンパイルできるのでは?
オブジェクトコードについて書いていて思い出しましたが、そもそもC#で作成したWindows向けアプリは簡単に逆コンパイルすることができます。
もうほとんどソースコードに近い状態(最適化がされた程度)まで戻すことができたと記憶しています。
.NET MAUI(≒Xamarin.Forms)も同様に逆コンパイルできそうです。(詳細は調査中)
そして、LGPLライブラリを使用する場合はアプリケーションのリバースエンジニアリングを許可する必要があります。(参考2)
.NET MAUIでも従来の.NETと変わらずに逆コンパイルができるのであれば、わざわざ動的リンクにする手間って何? となりますよね。(多少の難読化はできるのでしょうが)
おわりに
調査中の項目については調べてまた投稿したいと思います。
この投稿を書いていると、「ソースコードを公開しちゃえばいいのではないか」という考えに傾いてきました。
ソースコードを公開するのと逆コンパイルでソースコードを見られるのでは、精神的には差がありますが…
コメント
[…] 前回の投稿(ライセンスがLGPLのライブラリについて)の続きです。.NET MAUIはRelease Candidate1(RC1)を使用しています。 […]