読者です 読者をやめる 読者になる 読者になる

COPYING 多すぎ問題と libGPL

> locate COPYING | wc
    987     993   43240

これは大変なことです。要するにディストリビューションがライセンスをドキュメントとしてくっつけるから、同じ GPL の COPYING が大量発生しているわけ。

http://shinh.skr.jp/binary/libgpl.tgz

そこで libGPL です。 libGPL は GPL に「汚染」されるためのライブラリです。static/dynamicリンクするだけでそのソフトは GPL になります。 LGPL で無いのに -lgpl でリンクします。その恩恵として、 libGPL がリンクされたソフトウェアは自動的に --copying オプションに反応して GPL ライセンスを表示するようになります。 --copying オプションは libGPL によって解釈された後に除去される (argc がデクリメントされ、argv の要素がズレる) ため、既存のプログラムに簡単に導入することができます。

http://shinh.skr.jp/binary/gpl.c

短いわりにこっち系の小細工が割と色々入ってる感じ。やってること。 .ctor のリストに入れてある gpl_init が main の実行前に main のメモリ保護を外し、 main の最初の部分を gpl_main への jmp に書き換え、 gpl_main で main を戻して、メモリ保護を復活させ、んでから argv から --copying を探して、 argc を減らす時はスタックを書き換えて、そんでから main の少し後に jmp 。要するにどうしようもなく GCC & x86 依存。

COPYING をバイナリに埋め込む部分は高林さんの記述を参照しました。なんというか COPYING もソースの一部。

期待してもらっておいて環境依存なことやってます…そのあたりでぼんやり考えていること。

  • SDLヤロウは環境非依存にものすごいこだわる。(b2conでも環境依存については私一人やたらこだわっていた気がする)
  • 際どい部分ラップ思想はすごい好きだし素晴らしいしこだわりたい。
  • でも SDL やら libffi やらほど完璧にやるとのは無理に近い。(大きすぎる、際どすぎる)
  • ある程度の大きさのもの(まぁゲームとか)に安心して取り込めるのはPCLをいじったものくらいが限度かなと。
  • 開発者が使うだけでリリース時に関係の無いものならそこまでの信頼性はいらない。DTRとかスタックトレースするphobos.libとか。
  • そういう考え方なら DWARF2 依存とかは別にいいか。 dumper 。これがシリアライザなら依存してはいけないだろう。
  • それはそれとしてネタはネタで面白い。

要するに DTR と dumper はマジメに作ろうというだけの話でした。

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