SDL_d.dll

D 用の SDL はマクロを関数で展開しているのは LGPL的に copy left の伝播が来ないか、という話があった。

http://pc5.2ch.net/test/read.cgi/tech/1091185216/149

で、私の言っていた LGPL のそういうことへの配慮だと思ってた部分。

http://www.gnu.org/licenses/lgpl.html

If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)

http://www.opensource.gr.jp/lesser/lgpl.ja.html (mhattaさん訳)

もしそのようなオブジェクトファイルが、数字のパラメタやデータ構造のレイアウト、アクセス機構または小さなマクロや小さなインライン関数(長さが 10 行かそれ以下)のみ利用するならば、そのオブジェクトファイルの利用は、それが法的に派生物とみなされようとみなされまいと制限されない。(このオブジェクトコードに加えて『ライブラリ』の一部を含む実行形式は依然として第 6節の条件下に置かれるであろう)。

このへんはちょっとしたラッパ部分を使うくらいなら気にせんでええよ、ってことだと思う。ただこれってたぶん #include を想定していて、 D の場合、 LGPL なラッパ部分を static link してしまったらマズいと思われるのだけど、 D の仕様には短い関数は自動的に inline 展開されるよーとか書いてあって、微妙と言わざるを得ない、んじゃないかなと思う。

まあとりあえず可能かどうかを調べるために SDL_d.dll を作ってみた。こちらからどうぞ。

http://shinh.skr.jp/d/porting.html

これは LGPL なラッパ部分を SDL_d.dll に持っているので、 copy left の伝播は起きないはず。その場合、リンク時は SDL*.d をコンパイルせず、 SDL_d.lib をリンクするだけにして下さい。ちなみに作った方法としては gdcコンパイルして gcc -shared で dll にしただけです。 gcc -shared の方は cygwin.dll をリンクしないために少し面倒。 dmd でやりたい人はたぶん ilink32 あたりで dll 作ればいいでしょ。あああとひょっとして gdc の Winバイナリって需要あるのかな。

正直 GPL らぶな人間としてはこんなことするのはめんどいということ、上記の配慮は D の場合にも適用できるかもしれないってこと、もっと良い解決があるかもしれないということ、あと多分このくらい深く考えなくても誰も怒らない、という理由から他の import library 用の _d.dll はとりあえず作りません。欲しい人は以下のどれかを選択して下さい。私にメール、自分で dll 作る、 GPL らぶに転向、その他。あとこのへんの話に詳しい方、何か教えて頂けると嬉しいです。 SDL の他バインディングでも問題になりそうだし、過去ログでもあさってみるか。

ああちなみに LGPLC++ の template のおはなし。

http://pc5.2ch.net/test/read.cgi/tech/1091185216/160

恐らく LGPL は static link は絶対に copy left 伝播、 #include の場合もマクロや構造体定義以外の処理が入っていれば伝播する、というように書いてあると思います。

あと D言語スレとか見ててよく思うんですけど、 Win プログラマってオブジェクトとかリンクとかの概念の理解が少なめな人がちょっと多くない?もちっと勉強して欲しいかも(したら慣れない dll とか配布しなくてすみそうでラクだし)。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h