ライセンスシミュレータ

というわけで、ちょっと考えてみた訳だが。現実をオブジェクト指向で落とし込もうとするとハマると聞いたことがあるが、やっぱしなかなか大変なモンですね。

とりあえず、Person(権利主体)、Product(著作物)、License(許諾内容)があればいけるのかな。あと、enum Actionで「活動」を示して…。

// 登場人物
Person author = new Person();
Person user = new Person();

// GPL著作物創造
Product program = author.create(Program.class);
program.setLicense(new GPLv2());

// そのままの形で再配布可能
user.action(Action.DISTRIBUTE, program);

// 派生物の作成
Product derivative = user.createDerivative(Program.class, program);
derivative.setLicense(new ApacheLicense());

// 派生物はApacheLicenseで配布できない(UngrantableExceptionが飛ぶ)
user.action(Action.DISTRIBUTE, derivative);

derivative.setLicense(new GPLv2());

// 派生物はGPLv2で配布できる(例外飛ばず)
user.action(Action.DISTRIBUTE, derivative);

んー? Product#setLicense(License l) よりも、Person#setLicenseTo(Product p, License l) のがいいのか? この辺り、自分のオブジェクト脳の甘いところ(笑)

あー、なんかオモシロイようなオモシロクナイような…。なんかプログラム化してるウチに、自分自身がライセンスを深く理解し出したからなのか。

CodeReposに投げてしまおうかとも思うが、こんなゴミ突っ込むのも気が引けるorz このエントリーに☆がいっぱいついたらCodeReposに突っ込ませてもらおうかなw