変形合体ソフトウェア

Eclipseのプラグインシステムは3.1くらいからOSGiを使ったシステムへ変更された。
OSGiとはOpen Service Gateway Interfaceの略だ。
Eclipseでの利用例をみると、
各プラグインごとに必要なライブラリのみをJVMへロードするための仕組みだ。

例えばEclipseには「ソフトウェアの更新」機能や不要なプラグインを停止する機能があるが、
これはOSGiを使ってロードするプラグインを調整することで実現しているし、
大規模なアプリケーションになるとライブラリ間でのバージョンの依存関係が問題になるが、
これはそれを解決できる。また、クラスローダーは不要なクラスをロードしなくても
良いため、JVM上の領域の負担を軽減できる。

OSGiを使ったクラスの管理はプロジェクト内のライブラリ管理方法としてmavenでも開発されているので、今後増えていくと思う。

Eclipseが面白いのは拡張ポイントで一番最初に起動するクラスを決められるというのが面白い。
その拡張ポイントは org.eclipse.core.runtime.applications だが、この拡張ポイントは org.eclipse.core.runtime.IPlatformRunnable インターフェースを実装したクラスであれば何でも良く、Eclipseランチャーにある引数を与えるだけで起動するポイントを変えられるのだ。

eclipse.exe -application [プラグインのID].[拡張ポイントのID]

これはRCPアプリケーションのために用意されたシステムだが、
これによって起動するアプリケーションを同じクラスを使いながら
違うシステムにすることができる。

これが変形合体ソフトウェアだなーと思う理由なのだ。
かっこよくないですか?