Monoの解説を始める前に、まずは、.NET Frameworkの構造を簡単に説明しておこう。.NET Frameworkは、仮想マシンとして動作するアプリケーションの実行環境として構成されている。
.NET Frameworkでは、従来のWindowsアプリケーション(Win32アプリケーション)のように、CPUに依存したバイナリコードを利用しない。代わりに、CPUやOSへの依存がない「MSIL」と呼ばれるコードを使うのだ。MSILとしてコンパイルされたバイナリは、「アセンブリ」と呼ばれる。
開発者は、C#やVB.NETなどの.NET Framework対応の開発言語を使ってソースコードを記述する。それらのソースコードをVisual Studio.NETなどのコンパイラを使いビルドすると、アセンブリができるというわけだ。このアセンブリの構造や実行の仕様を定めたものが、「CLI(Common Language Infrastructure)」と呼ばれる。
.NET Frameworkの実行環境をインストールしたWindowsには、CLI機能を提供する「CLR(Common Language Runtime)」と呼ばれる仮想マシンが搭載されている。CLRは、CLI仕様に則り、実際のOSやCPUに依存したバイナリコードに変換して実行する機能を備える。つまりWindowsでは、アセンブリがCLRによって最終的なWin32のバイナリコードに変換され、実行することになる(画面1)。
|
C#とCLIの仕様は、標準化団体のECMAによってそれぞれECMA-334、ECMA-335として標準化されている。仕様はオープンになっており、誰でも閲覧できる。そのため、これらの仕様に則ってコンパイラやCLRを作成すれば、他のOSでも、.NET Frameworkアプリケーションを実行できる可能性を持つのだ。
しかし、現実にはCLRを移植しただけでは、.NET Frameworkのプログラムをそのまま動作させることはできない。なぜならば、.NET Framework用のプログラムは、マイクロソフトの.NET Frameworkに付属する多数のクラスライブラリの機能を使っているためだ。
|
たとえば.NET Frameworkでは、Windowsアプリケーションを構成するために「Windows Form」を使う。そしてWebアプリケーションを構成するのには「ASP.NET」、データベースアクセスには「ADO.NET」など、多数のクラスライブラリを利用する。そのため、.NET Frameworkで作られた多くのプログラムをそのまま実行するには、CLRだけでなく、クラスライブラリも移植する必要があるのだ。
クラスライブラリの仕様は、ECMAによって標準化されておらず、非公開だ。また、マイクロソフトが保有する著作物でもあるから、勝手にコピーして利用するわけにもゆかない。そこで、他のOSで.NET Frameworkを動かすためには、MSDNライブラリなどで示されるクラスライブラリの仕様を見て、同じ動作をするクラスライブラリを作っていく必要がある。
ここまで説明してきたように、.NET Frameworkを他のOSで動かすためには、「CLR」とともに「クラスライブラリ」の移植が必要だ。Monoでは、CLRはもちろん、クラスライブラリも移植することで、多くの.NET Frameworkアプリケーションを、そのままUNIX上で動かすことを目的としている。
Monoは、2001年に.NET FrameworkをUNIX上に実装することを目的として始まったプロジェクトだ。Monoのバージョン1.0は、2004年の第2四半期のリリースが予定されている。原稿執筆時点でのバージョンは、バージョン1.0β3で、リリース目前といった感であり、正式リリースの1.0では、次の仕様をサポートする。
.NET Framework 1.0/1.1のCLR
C#
PPC、x86、SPARC
Mono 1.0は、実際にはVB.NETにも対応しているもの、Unstable(非安定版)という位置づけとなる。また、JScriptは対応しない。
ただし、VB.NETやJScriptで作られた.NET Frameworkアプリケーションが動作しないという意味ではない。上記は、「Monoに付属するコンパイラ」の話であり、VB.NETで記述したソースをWindows上のVisual Studio.NETなどでコンパイルしたアセンブリは、Mono上でも動作する。つまり、UNIX上でVB.NETのソースファイルをコンパイルするためのコンパイラ自身の動作保証をしないというだけの話である。
|
マイクロソフトの.NET Frameworkは、今後、「Whidbey」という開発コードで知られる「.NET Framework 2.0」へとメジャーバージョンアップすることが予定されている。Monoもそれに伴い、Mono 2.0で新しいバージョンに対応する見込みだ。Monoの詳細なリリースや仕様については、「Mono Project Roadmap」を参照してほしい。
Copyright © ITmedia, Inc. All Rights Reserved.