特集:全1回 .NET FrameworkをUNIXで動かす「Mono Project」dev .NET(2/9 ページ)

» 2004年06月24日 22時45分 公開
[大澤文孝,ITmedia]

.NET Frameworkの構造と標準化仕様

 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)。


CLIとCLRとの違いは分かりづらいかもしれない。「CLI」とは、MSILの仕様であり、「CLR」は実際にCLI機能を実装したプログラムのことだ。Windows用のCLRは、Windowsでそのコードを実行するのが目的のため、最終的にWin32のバイナリコードに変換される(もちろん、64ビットWindowsの場合には、Win64のバイナリコードに変換することになる)。それに対し、他OS用のCLRは、そのOSで動作する独自のバイナリコードに変換される。
画面1■.NET Framework実行の仕組み

C#とCLIの仕様は標準化されている

 C#とCLIの仕様は、標準化団体のECMAによってそれぞれECMA-334、ECMA-335として標準化されている。仕様はオープンになっており、誰でも閲覧できる。そのため、これらの仕様に則ってコンパイラやCLRを作成すれば、他のOSでも、.NET Frameworkアプリケーションを実行できる可能性を持つのだ。

クラスライブラリは非公開

 しかし、現実にはCLRを移植しただけでは、.NET Frameworkのプログラムをそのまま動作させることはできない。なぜならば、.NET Framework用のプログラムは、マイクロソフトの.NET Frameworkに付属する多数のクラスライブラリの機能を使っているためだ。


クラスライブラリは、MSILで記述されたアセンブリである。ただしクラスライブラリでは、Win32APIを呼び出していることもあり、純粋なMSILのみのコードではないので、他のOSにそのままコピーしても動かないことがほとんどである。

 たとえば.NET Frameworkでは、Windowsアプリケーションを構成するために「Windows Form」を使う。そしてWebアプリケーションを構成するのには「ASP.NET」、データベースアクセスには「ADO.NET」など、多数のクラスライブラリを利用する。そのため、.NET Frameworkで作られた多くのプログラムをそのまま実行するには、CLRだけでなく、クラスライブラリも移植する必要があるのだ。

 クラスライブラリの仕様は、ECMAによって標準化されておらず、非公開だ。また、マイクロソフトが保有する著作物でもあるから、勝手にコピーして利用するわけにもゆかない。そこで、他のOSで.NET Frameworkを動かすためには、MSDNライブラリなどで示されるクラスライブラリの仕様を見て、同じ動作をするクラスライブラリを作っていく必要がある。

.NET FrameworkをUNIX環境で動かすMonoの仕組み

 ここまで説明してきたように、.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

 .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のソースファイルをコンパイルするためのコンパイラ自身の動作保証をしないというだけの話である。


ただしVB.NETでは、Microsoft.VisualBasic名前空間に存在するいくつかのクラスを利用することがある。このクラスライブラリの移植度の問題で、VB.NETのプログラムは、場合によっては完全に動かないこともある。JScriptについても同様である。

 マイクロソフトの.NET Frameworkは、今後、「Whidbey」という開発コードで知られる「.NET Framework 2.0」へとメジャーバージョンアップすることが予定されている。Monoもそれに伴い、Mono 2.0で新しいバージョンに対応する見込みだ。Monoの詳細なリリースや仕様については、「Mono Project Roadmap」を参照してほしい。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ