• LGPL3.0がすごい

    ライセンスについて色々と調べていたところLGPL3.0がとんでもなくすごいライセンスだということに気づきました。LGPL3.0がいかにすごいかを紹介したかったのでちょっと記事を書きます。あと、ここに書いてることはすべて鵜呑みにしないでください、あくまで参考程度にとどめておくようにお願いします。

    GPL

    オープンソースライセンスとして有名なのは、「GPL」ではありますが、GPLはGPLとして配布されているソフトウェアもしくはライブラリを使用した場合はそのすべてのソフトウェアやライブラリをGPLとして公開してね、という超強力なコピーレフトを備えている恐ろしいライセンス。

    オープンソースと聞くと、この超強力なコピーレフトが嫌な人も多いと思う。自分もそうで、このGPLのせいでオープンソースのことをちょっと食わず嫌いしていた時期もありました。

    GPL汚染

    ソフトウェアをオープンソースとしてGPLを使用するのは別にいいとは思うのですが、それがライブラリだとすると話が変わってきます。ライブラリ、つまり、モジュールです。ソフトウェアにそのライブラリを組み込んで機能の一つ、いわゆる一部分としてだけ使いたいのに、GPLだとソフトウェアすべてのソースコードを開示しなくてはならないという、オープンソース界隈ではない人にとっては嫌な存在になるわけで。

    LGPL

    そこで、そのGPL汚染を解決するために LGPLっていうのができた。これだとライブラリとして使用する分には、ソースコードを公開しなくてもいいよ。ただ著作権表示とか免責事項だけは明記してねっていうのがLGPLで、これを使えばソフトウェア全体としてソースコードを開示する義務を追わなくてすむので、オープンソース界隈ではない人にとっては大喜びのライセンスだったりします。

    あと、LGPLとして配布されていたソースコードを改変して使用したいという場合はその改変した部分のソースコードだけを開示すればOK。ソフトウェア全体のコードを開示しなくてもいい。

    しかしこれにもちょっとした問題があって、論争がまた起きてる。

    LGPLで配布されているものは、DLLとかSO形式のものでダイナミックリンクしないとだめだ
    アプリケーションの内部に組み込んだら違反だ!ソフトウェア全体のコード開示しろ!
    いや、同じファイルにまとめたとしても、ちゃんと別々になってるし、そもそもソースコード改変してないしソフトウェア全体とは別物だし開示しなくてもいいだろ
    などなど・・・。いろんな考え方があります。

    そこでLGPL3.0

    GNU 劣等一般公衆利用許諾書 (GNU Lesser General Public License)
    http://sourceforge.jp/magazine/07/09/05/017211

    このページがGoogle検索にひっからなかったのでちょっと探すのに苦労したのですが、sourceforgeでオープンソースプロジェクトを作成する場合は、このライセンスが選べるようになっていたりします。

    このライセンスに書いてあることを一部抜粋すると、

    5. 結合されたライブラリ
    あなたは、『ライブラリ』を基にした作品であるライブラリ機能を、『アプリ ケーション』ではなく、かつ本許諾書で保護されていない他のライブラリ機能 と一緒に、単一のライブラリ内で並置し、そのような結合されたライブラリを あなたが選んだ条項に従って伝達することができる。ただしその場合、以下の 両方を行わなければならない。
    結合されたライブラリに、他のいかなるライブラリ機能とも結合されて おらず、本許諾書の条項に従って伝達される、元のままの『ライブラリ』を基 にした作品のコピーを添付する。
    その一部が『ライブラリ』を元にした作品である結合されたライブラリ に、対応する結合されていない形式の同じ作品がどこで見つかるかを説明した 目立つ告知を載せる。

    これを自分の解釈なりに言い表してみると(間違ってるかも)

    あなたがLGPL3.0のライブラリを使用したソフトウェアで、そのライブラリを動的リンクによって外部ファイルとして扱うのではなく、異なるライブラリと一緒にまとめて一つのファイルにし利用する場合は以下のルールに従わなければならない
    一つのファイルとしてまとめられたファイルに含まれるLGPL3.0のライブラリを、異なるライブラリと完全に分離された状態で、元のままのライブラリの形(改変しない)として本来のインターフェースによって使用すること
    一つのファイルとしてまとめられたファイルの中に含まれるLGPL3.0のライブラリのまとめらてない状態のライブラリがどこにあるかを示したURLまたはファイル名の説明書きを行うこと

    となった。つまりこれって、前者の問題を解決してることになるんじゃないだろうか。うまく読み進められてないけど、とにかくLGPL3.0はすごいと思った。

  • だ、大丈夫? はてブが無料化

    はてなブックマークプラス(有料プラン)向けに提供してきた一部の機能を無料化します
    http://hatena.g.hatena.ne.jp/hatenabookmark/20120725/1343200425

    とのことで、はてなブックマークの有料プランの機能の一部(というかほとんど)が無料化されたのだけど、はてな採算とれるんだろうか。

    無料化したした機能はこちら

    マイブックマーク全文検索機能を無料化
    非公開ブックマーク機能を無料化
    はてなブックマークプラスの魅力もアップ。広告非表示の機能を追加
    この無料化は変更は2012年8月8日から行われる。

    はてブのコメント欄でも「大丈夫?」との声がちらほら見かけて笑ってしまった。

  • idとclassを使用しないjQueryコーディング

    idとclass

    通常HTMLとJavascriptの関係といえば、予めHTML要素としてidまたはclass属性を指定しておき、その属性に対してjavascript側からidやclassを指定して要素を特定しますが、jQueryを使うことによってidやclassを一切かかなくてもjavascriptで操作することが可能になるみたいです。

    jQueryで要素を作成

    よくある方法として、

    var hoge = $(document.body).append('<div>test</div>');Code language: JavaScript (javascript)

    のようにして要素を追加をするやり方がありますが、これだとhogeには要素の追加先であるdocument.bodyの要素が参照されます。

    しかしこれだと追加した要素を操作することができないためidかclass属性を使用するか $(“document.body:last”)というスマートじゃない方法を使用するしかないです。

    これを解決するには、こうします。

    var hoge = $('<div>test</div>');
    $(document.body).append(hoge);Code language: JavaScript (javascript)

    やってることは上と一緒ですが、このやり方だとhogeにはjavascriptによって操作したい要素がそのまま参照されるので、このhogeを自由に書き換えることができます。しかも、javascriptで準備してから、appendで画面に表示ということができるので、準備時間があり、ローディング時において画面が瞬間的に点滅したり表示が崩れている様子を隠すこともできます。