プログラマの日記とか書きながら
[プログラミング]カテゴリーの投稿が1つも無かった。いかんいかんと言う事で初投稿をば。
C++で色々な機能を持つクラス群を管理するクラスを書いていた。共通な項目は管理クラスに書いて実際の機能クラスへのポインタを管理して、管理クラス自体はstd::vectorで管理して…と考えた。テンプレートを使えば管理クラスで各種機能クラスへのポインタを持たせる事は簡単だが、テンプレートでは使用時に確定してしまうので同じvectorでは管理出来ない事に気付く。
う~むどうしたものか…機能クラスへのポインタはvoidポインタにしてしまおうか…でもそれではあまりにもあんまり。と言う事でokaさんに相談してみた。なんか
boostでそんな機能があったような…と調べてくれたのが
boost::anyでした。例えば、
static char* hw = "hello world.";
boost::any a, b;
a = 100; // 整数を入れる
b = hw; // 文字列を入れる
a = b; // any同士の代入
b = Point(10,20); // ユーザー定義型でも入っちゃう
と何でも入ってしまう、さすがエニー。なおPointはユーザ定義の型。これを使う時には例えば、
Point c = boost::any_cast<Point>(b);
とany_castを使ってキャストすれば良い。う~ん便利!しかも失敗するとちゃんと例外も投げてくれる。このboost::anyを使って目的のクラスの実装は無事完了したのでした。自分でも似たような物は作れなくも無い気がするが、こちらの方がエレガントで使い易い。作者様に感謝しつつ使わせて頂きます。
ITmediaニュース:HP幹部:「DRMとオープンソースは相容れない」と言うニュースが。
実は私が開発している
ソフトにはDRMの機能もあるが有料でソース非公開である。かつターゲットとしているのはサーバ側ではオープンソース系のシステムである。なのでこの記事に興味があるのであった。
まずなぜDRMとオープンソースが相容れないと言われているかだが、DRMは暗号を応用して正規ユーザのみが利用可能なデータやプログラムを実現する技術であるが、正規ユーザであれば正しい鍵を取得しているのでこの点を考えるとアルゴリズムが判れば破る事も可能となってしまう点がある。普通は耐タンパ(難読化)技術を使って判りにくくするようにして、かつ出来るだけアルゴリズムが判っても破れない公開鍵暗号のような技術を使う事になる。しかしながらソースを公開するにはやはり難しい点があると言えるかもしれない。
つまりオープンソースなDRMの実現は困難であると言う事になる。しかし待って欲しい。オープンソース系の開発では、全てがオープンソースのソフトだけで構築しなければならないのだろうか?もちろん
全てのソースは公開されるべきだと言う人も大勢いるでしょう。しかし有用なソフトでAPIがちゃんと公開されていればソースが公開されていないソフトでも使ってくれると言う開発者もいるのではないでしょうか。
ちなみに単に暗号アルゴリズムだけであればオープンソースにしても大丈夫であるし、オープンソースでは無い暗号アルゴリズムは評価を十分に受けていないと言う事で、やはりオープンソースの暗号アルゴリズムが望ましいと言う事になる。
オープンソース系の開発者に受け入れられる為には、単機能に絞り使い易いAPIをきちんと公開すれば良いのでは無いかと考えている。これならDRMとオープンソースは相容れると思うだが、さてどうでしょうか。