質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • C++

    4431questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Qt

    185questions

    QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

ライセンスとやるべきこと

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 7
  • VIEW 3,316

BeatStar

score 1264

私は趣味でC++をやっています。

Qtというライブラリを使ってGUI/CUI作ろうとしています。

ですが、聞いたところによるとQtはLGPLというライセンスらしいです。

私は趣味でやっていて、法にも疎いのでどうすればいいのかわかりません。

知りたいことは「私はどうすればいいか」です。

Wikipedia等で調べてもLGPLというのはライセンスで誰々が開発した云々で、私の理解力では全く理解できません。

背景や大雑把なイメージが知りたいのではなくて、「何をすべきか」が知りたいのです。

例えば( あくまでイメージ ),

LGPLと認定されるにはLGPL用のファイルがあり、所定のサイトから取得して、DLLまたは実行可能ファイルのような、LGPLを付与したいプログラムがある
ディレクトリに入れ、
LGPLと認識させる部分とそれを使う部分を公開する必要がある。

とかです。

ソースコードを公開する方法と範囲も知りたいです。

いろいろ調べても、「改変する場合は~」「くっつける場合(呼び出す場合)は~」としか書かれません。

くっつけるって...C/C++なら libファイルをリンクする場合もくっつけるですし、dllでもそうです。oファイル( objファイル )でもそうです。

曖昧過ぎて理解できないのです。

もしかして、Qt等のようなライセンス付きのものの配布方法から考えるのでしょうか?

例えばoファイル,objファイル,libファイル,aファイル( lib*.a ) ...のようにすでにバイナリファイルになっているバージョンを使用すると公開義務がなく、
cppファイル, cファイル等のようソースコードとして配布されている場合は公開義務がある...みたいな感じなのでしょうか?

例えば、Qtには QMainWindowというクラスがあり、メインとなるウィンドウ用のクラスです。

これを継承して QtWindow::MainWindowとして自分が使いやすくしたクラスが入っているライブラリ libqtusing.a ( MinGWの場合。VC++なら qtusing.libか )

を作り、コンパイルにかかる時間を縮小するとします。

もちろん、QMainWindowクラス以外のQtをさらに使いやすくしたクラス等も libqtusing.a にあり、Qtをまったく利用していないクラス群もあるとします。

このとき、公開する範囲はどれなのでしょうか?

  1. QtWindow::MainWindow等のようにQtを直接使用する範囲
  2. libqtusing.a にある範囲すべて
  3. libqtusing.a 及び それをリンクする実行ファイル
  4. Qtそのものをソースコードからコンパイルして使用するとき、その元のファイルに修正を加えた場合のみ公開義務あり

また、今は基本的なlibqtusing.aを作っている最中ですが、最初は自分用のソフトになると思います。
その場合でも公開義務はあるのでしょうか?

このライセンスは「編集許可がある」という明示だと思うので、自分で使うだけなら公開義務はなさそうですが、Qtというライブラリを使っているので、公開義務があるのかないのか...

それと、公開する場合、どういう風にすればいいのでしょうか?

例えば readme.txtか *.chm 等の「お世話になったサイト」等の謝辞? のところに"Qt" と明示し、
オンラインストレージにその公開すべき範囲をアップして、
そのURLをreadme.txt 等に記述...みたいな感じでしょうか?

つまり知りたいことは:

■ LGPLライセンスのライブラリを使用する場合、何をすべきか

■ 公開義務はどこからどこまでか

■ 自分のためのソフト( 一括処理等 ) の場合でも公開義務があるのか

です。

お手数ですが、どなたかお願い致します。


[追記]

ご回答ありがとうございます。

追加で、「配布時はどうすればいいか」もお願い致します。

例えば、

実行ファイル及び必要なDLLはもちろん、readme.txt が同梱されているものとします。

readme.txt に

使用ライブラリ: Qt 5.6
URL: ( ここに オンラインストレージのURL )

みたいに記載して、オンラインストレージにアップロードして URLのところに記述...っていう感じになるのでしょうか?

いくら「配布する場合はソースコードを公開しろ」と言われてもどうすればいいか...

もしかしたら それ専用のサイトでしか許可されないとかありえそうだし...

ライセンスの本文を読めばわかるかもしれませんが、こういう情報は載っていないと思うので...

( これが分かれば、読みやすいのですが... )

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+8

こんにちは。

■ LGPLライセンスのライブラリを使用する場合、何をすべきか

LGPLライセンスをちゃんと読んで、それに則って使用するべきです。ごくごく当たり前のことです。
LGPLを読まないでLGPLのプログラムを使うということは、契約書を読まないで契約書にサインするのと全く同じですから。

とはいえたいへんですよね。せめて概要くらいは把握しておくべきと思います。

基本は、Qtプログラムを一切改造しないで使うこと、自身のプログラムのリバース・エンジニアリングを禁止しないことです。

■ 公開義務はどこからどこまでか

LGPLプログラムの使い方にもよりますが、単にQtを使うだけならソースの公開義務はないと思います。

■ 自分のためのソフト( 一括処理等 ) の場合でも公開義務があるのか

Qtの使い方によっては、実行形式を配布した人に対して自身のプログラムのソースを配布する義務があります。


GPL/LGPLの大雑把な理解としてはたぶん下記で良いだろうと思います。

  1. ライセンス(使用許諾)の意味
    GPLで配布されているプログラムは、GPLで使用許諾されています。つまり、GPLの条件に則れば使って良いし、則らないなら使ってはいけないということです。
    例えば、お金を借りる時何らかの条件(例えば、いついつまでに返却する。法定内利息を払うなど)に則って借りるのと同じような意味合いです。その条件を満たせない場合はお金を借りることができません。
    GPLで配布されているプログラムも同様で、GPLの条件に従えばそのプログラムを使えるし、従わないなら使えないというだけです。

  2. GPLで配布されているライブラリを自分のプログラムで使った場合
    自分のプログラムで使った場合(リンクしただけでも)、自分のプログラムを配布する時は、GPLと同等のライセンスで使用許諾することがGPLの条件に記載されています。
    この条件に従わないならQtをGPLでは使ってはいけないということになります。
    (逆にこの条件に従ってQtをGPLで使うという選択肢はあったと思います。)

  3. GPLで配布する意味
    GPLで配布するということは、そのプログラムの実行形式を配布した人から要求があれば、その人にその実行形式を生成できるソースやプロジェクト・ファイル等を配布する義務があるという意味です。
    使用したGPLで配布されているプログラムの、自分が使用したソース等についても自分で配布する義務がある筈です。

  4. その結果
    ビジネス的には、自身で開発したソース・コードは非公開にしたいものですが、GPLで配布されているプログラムを自分のプログラム内に取り込んだ場合は、実行形式を配布した人に対してソース・コードを非公開にすることができません。求められたら配布する義務を負います。

  5. LGPLの場合
    上記の「2. GPLで配布されているライブラリを自分のプログラムで使った場合」が緩和されています。
    LGPLで配布されているプログラム(この場合、Qt)を一切修正せず、かつ、リンクしただけ(たぶん#includeも許諾されているだろうと思いますが、未確認です)、かつ、自身の実行形式のリバース・エンジニアリングを禁止しなければ、自身のプログラムのソース・コードの公開義務がありません。

ところで、通常の回答と同様、改めて書くまでもないのですが、上記の回答について一切の保証はできません。法の問題は法律家に相談するのがベストです。ただGPLに詳しい弁護士さんを探すのは難しいかもしれません。弁護士.comで探せば見つかるかも?


ところで、「自分のプログラムで使った場合」の使い方が色々あるので複雑です。

例えば、GPLで配布されているC++コンパイラのgccで自分のプログラムをコンパイルした場合、ややこしいです。
コンパイラに入力したコードが自分のコードだけなら、その出力にgccのライセンスは及びません。
Excelで何かの計算処理を行った時、そのxlsファイルの著作権は純粋にそれを書いた人のもので、マイクロソフトは完全に無関係なのと同じです。

しかし、通常は標準ライブラリのヘッダを#includeしてますし、標準ランタイムをリンクします。
これらは GNU が開発しているので GNU が著作権を持ってます。それを勝手に配布すると犯罪です。
更にしかし、gccの標準ライブラリもGPLですが、例外規定があり普通に使うだけなら、自身のプログラムをGPLで配布する必要がありません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/26 13:05

    ご回答ありがとうございます。

    キャンセル

checkベストアンサー

+5

 注意事項

通常の回答と同様、改めて書くまでもないのですが、下記の回答について一切の保証はできません。必要なら、法律の専門家(いるのか?)に相談してください

 回答

LGPLと認定されるにはLGPL用のファイルがあり、所定のサイトから取得して、DLLまたは実行可能ファイルのような、LGPLを付与したいプログラムがある
ディレクトリに入れ、
LGPLと認識させる部分とそれを使う部分を公開する必要がある。

LGPL用のファイルがあるというのは違います。すべてのLICENSEは告知が必要で、一般にLICENSEないしLICENSE.mdというファイルに記述した上で、その概略ないし全文もしくは参照をソースコード中にも記載します。

大文字じゃないと強調されてないとかいう馬鹿げた判決が過去あった気がするのですが、そのせいで一般にライセンス条文は大文字で書かれた英語で宣言されますが、べつにそれは義務ではありません。


LGPLが弱いコピーレフトと呼ばれるのは、日本語版Wikipediaの解説でいえば

  • ライブラリAにリンクしたプログラムBを頒布する場合、Bのライセンスにリバースエンジニアリングを禁止する条項を含めてはならない。(LGPLv2第6節、LGPLv3第4節)[注釈 7]

  • ライブラリAに静的リンクしたプログラムBを頒布する場合、Bのソースコードまたはオブジェクトコードの頒布に制限があってはならない。(LGPLv2第6節a、LGPLv3第4節d0)

の部分が該当するからです。

例えば「Qt」というライブラリ、それを利用するライブラリ「A」、最終成果物「B」の3つの登場人物を考えたとき、

  1. A, Bともに上記2項を満たさないといけない(弱いコピーレフトの強要)
  2. よって最終成果物ではないAはLGPLと互換がないOSSライセンス(MIT, BSD, BSL, etc)はAには適用できない  
    => AのライセンスをLGPLにしてしまうのが無難(GPLやMPLなども可ではあるがより厳格、おれおれライセンスは好まれない)
  3. 最終成果物Bには上記2項をコピーレフトする条項である必要はないが、自身が満たす必要はある  
    =>一般的なOSSライセンスならよい

また、今は基本的なlibqtusing.aを作っている最中ですが、最初は自分用のソフトになると思います。
その場合でも公開義務はあるのでしょうか? 

binaryないしソースコードを頒布する必要が出たときに初めて考慮するのがLICENSEだと思われます。頒布というのは公開の場にソースコードないしビルドした実行ファイルを晒すことです。


そういうわけで頒布する必要があるなら、個人的におすすめなのは

  1. libqtusingをQt依存部分とそれ以外で分け、非依存部分は一般的なOSSライセンスを適用する(MIT, BSD, BSLなど)。依存部分はLGPLにする
  2. 最終成果物は上記3で述べた通り

です。


なおLGPLなQt本体にバグを見つけたなどの理由で改変を加える場合は、改変patchはLGPLで公開されなければなりません


各国の著作権法制で解釈があいまいなのは、動的リンクするものにコピーレフトが及びうるのか(GPL的には及ぶという見解)、という部分で、これが二次的著作物か二次利用かで明快な結論を得ていません。Be on the safe sideの原則から言ってGPLの見解を採用し、動的リンクするものにコピーレフトが及ぶと思って行動するべきと思っています。


LICENSE告知を頒布時にどうするかですが、ようは現実的な手段でLICENSEを確認できればいいです。

スマートフォン向けゲームなんかだと、プログラムのあるdirectoryを見に行くのは現実的ではないのでプログラム中からLICENSEを確認できるべきですし、PC向けのプログラムなら、単にbinaryとおなじdirecoryにライセンスを記したファイルを置いておけばいいです。

ソースコード公開は上述のとおりです。

 追記

頒布方法ですが、たとえLICENSEでソースコード開示が義務付けられていてもソースコードを同梱する必要はなく、請求があったときに開示すればよいです。極端な例でいえば請求されたらDVDとかにソースコードを焼いてDVD代および輸送費実費と引き換えに渡す、とかでも構いません。

が、さすがにそれはお互い面倒なので、普通はソースコードがある場所のURLを記載するかソースコードを同梱します。

注意点として、ソースコード開示が義務付けられているLICENSEで、ソースコードがある場所のURLが死んだ場合、その成果物たる実行ファイルを頒布・再頒布することはできません。

例としては、AviSynthのとあるプラグインでGPLなライセンスを採用していたが、ソースコードを公開するのに使っていたWebサービスが終了し、かつ作者との連絡手段も喪失したことで、そのプラグインを二次配布することもできなくなってしまった例があります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/21 13:54

    私の頭が弱くて...

    要は、QtならQtを直接呼び出している範囲はLGPLで、それ以外は他のライセンスでもいいし、LGPLでもいいということでしょうか?

    また、もし頒布するなら、どのようにすればいいのでしょうか?

    例えば、その公開義務がある範囲を同ディレクトリに入れるとか。
    後、その場合でも、aファイルとかにしてもいいのでしょうか?

    キャンセル

  • 2018/01/21 13:59

    >後、その場合でも、aファイルとかにしてもいいのでしょうか?

    どういうことでしょう?

    キャンセル

  • 2018/01/21 14:00 編集

    >要は、QtならQtを直接呼び出している範囲はLGPLで、それ以外は他のライセンスでもいいし、LGPLでもいいということでしょうか?

    違います。ライブラリの依存ツリーを考えてください。コピーレフトは親方向に適応されます。直接的かどうかが問題ではありません

    キャンセル

  • 2018/01/21 14:05

    ソースコードじゃなくてバイナリファイルではダメですよね?
    ソースコードを晒すこと自体はいいですが、
    私が組んでいる環境では( 趣味なので ) 私用の環境でしかできないようなつくりです。

    例えばCドライブ直下に "programming/cpp" ディレクトリがあり、その中に
    library/includeにヘッダを
    library/libにソースコードを
    libraryディレクトリと同じところに projectディレクトリがあり...
    という風に VC++ぽい感じでやっています。

    その場合、#includeで指定するパスが変わるのでリリースするには書き換えないといけないですよね?
    なので大変。

    といっても、すでにどのぐらいか組んでいるので最初からやり直すのはアレなので...

    キャンセル

  • 2018/01/21 14:11

    >その場合、#includeで指定するパスが変わるのでリリースするには書き換えないといけないですよね?
    なので大変。

    公開義務が発生したソースコードがコンパイル可能であることは要求されていません(利用者はこまるから普段からcmakeとかqmakeでその辺柔軟にできるようにしておいてほしいけど

    キャンセル

  • 2018/01/26 13:04

    なるほど。

    最悪、「請求されたとき」に発行すればいいのですね。

    「開示義務がある」云々としか書かれていないので、"常に"ソースコードも晒さないといけないと思っていました...

    キャンセル

  • 2018/01/26 13:12

    その場合でも請求方法の記載は必要ですよ!

    キャンセル

  • 2018/01/26 14:35

    >> その場合でも請求方法の記載は必要です

    請求方法は、
    「このメールアドレスで"要開示"のようにしてください」的文章でいいのしょうか?

    キャンセル

  • 2018/01/26 15:07

    はい。ですがメール対応ってぶっちゃけ面倒極まりないと思うので、どこかに上げてURL貼ることを強く推奨します

    キャンセル

  • 2018/01/26 15:39

    了解しました

    キャンセル

  • 2018/03/13 14:23

    時間がかなり立っていますが、追記質問宜しいでしょうか?
    開示方法についてはわかりましたが、
    ライセンスの明示について。

    >> 一般にLICENSEないしLICENSE.mdというファイルに記述した上で...

    これって、内容はどのようにすべきなのでしょうか?

    人によって書き方が違うのか、LGPL(そのもの)を考案した方のサンプルというか条文をコピペでいいのでしょうか?
    また、実行ファイルは窓の杜等のサイトにアップし、
    ソースコードはOSDNのようなサイトにアップするとき、
    ライセンス告知は 実行ファイル側は
    readme.txt に

    ライブラリ: Qt
    ライセンス: LGPL

    程度でいいのでしょうか?
    それともソースコードと同様に明示する( LICENCEファイル ) 必要があるのでしょうか?

    宜しくお願い致します。

    キャンセル

  • 2018/03/13 20:06

    >これって、内容はどのようにすべきなのでしょうか?

    その昔、大文字で書かれていないものは有効なライセンス宣言じゃないとかそんなかんじの糞判決があって、多くのLICENSE文が大文字で書かれていたりします。

    それはさておき、普通はLICENSEが指定する条文をそのまま書きます。省略する場合でも条文が閲覧できる場所へのリンクが必要です。

    LICENSEないしLICENSE.mdというファイルに記述することが義務というわけではないですが、READMEにはもっと重要なことをかかないと(プログラムの説明とかな)行けないだろうからファイルを分けたほうがスッキリするんじゃないでしょうか。

    キャンセル

  • 2018/03/16 11:52

    なるほど!

    キャンセル

同じタグがついた質問を見る

  • C++

    4431questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Qt

    185questions

    QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。