現代のソフトウェア開発において、異なるプログラミング言語で書かれたコードを同一のプラットフォーム上で動作させ、さらに異なるOSやハードウェア間での互換性を維持させることは極めて重要です。この課題を解決するために策定された技術標準がCommon Language Infrastructure (CLI)です。
CLIは、実行可能なコードの形式と、それを動作させるためのランタイム環境を定義したオープン仕様です。これにより、開発者は特定のCPUアーキテクチャに合わせてコードを書き直すことなく、複数の高レベル言語を異なるコンピューティングプラットフォームで利用できるようになります。つまり、CLIはプラットフォームに依存しない(プラットフォーム・アグノスティックな)設計となっているのが最大の特徴です。

Key Facts
- 標準化団体: ISO/IEC (ISO/IEC 23271) および Ecma International (ECMA-335) によって標準化。
- 開発主導: Microsoft、Hewlett-Packard、Intelなどが共同で開発。
- 主要な実装: .NET、.NET Framework、MonoなどがCLIに基づいている。
- 動作原理: ソースコードを一度「共通中間言語 (CIL)」にコンパイルし、実行時に各環境の仮想実行システム (VES) がマシン語へ変換する。
- ライセンス: RAND (合理的かつ非差別的) 条件に基づき、特許が提供されている。
CLIを構成する5つの主要要素
CLIの仕様は、相互運用性と移植性を実現するために以下の5つの重要なコンポーネントで構成されています。
1. 共通型システム (CTS: Common Type System)
CTSは、CLI準拠のすべての言語が共有して使用するデータ型と操作の定義集です。これにより、ある言語で定義されたデータ型を別の言語でも正しく認識し、利用することが可能になります。
2. メタデータ (Metadata)
プログラムの構造に関する情報を、特定の言語に依存しない形式で保持する仕組みです。メタデータがあることで、開発者が使用していない言語で書かれたコードであっても、ツールや他の言語から容易に参照し、連携させることができます。
3. 共通言語仕様 (CLS: Common Language Specification)
CLSはCTSのサブセットであり、異なる言語間でコンポーネントを相互利用させるための共通ルールです。ライブラリ開発者やコンパイラ作成者は、このルールに従うことで、他のCLI準拠言語からのアクセスを保証できます。
4. 仮想実行システム (VES: Virtual Execution System)
VESは、CLI互換プログラムをロードして実行する心臓部です。すべての言語はまず共通中間言語 (CIL: Common Intermediate Language)という抽象化された形式にコンパイルされます。実行時にVESがこのCILを読み取り、ターゲットとなるOSやハードウェアに最適化したマシン語へ変換します。Microsoftの実装では、この役割をCommon Language Runtime (CLR) が担っています。
5. 標準ライブラリ (Standard Libraries)
ファイルの読み書きなど、汎用的な機能を提供するライブラリ群です。その中核となるのがBase Class Library (BCL) であり、開発者に共通のAPIを提供します。
標準化のプロセスとライセンス
CLIの標準化は2000年にMicrosoftやIntel、HPなどの企業によって開始されました。2001年にEcmaで批准され、2003年にはISO/IECの標準として正式に認められました。最新の第6版は2012年6月に発行されています。
知的財産権に関しては、実装に不可欠な特許を「合理的かつ非差別的 (RAND)」な条件で提供することが義務付けられています。また、Microsoftは「Microsoft Community Promise」を通じて、C#およびCLIの特定エディションを実装する者が特許訴訟の懸念なく開発できるよう保証しています。
CLIの実装には、定義されたプロファイルへの準拠が必要です。最小構成である「カーネルプロファイル」は非常に小規模な型セットのみをサポートしますが、仕様に基づいた拡張(新しいメソッドや型の追加など)が認められています。ただし、インターフェースへの新しいメンバー追加は禁止されており、これによりプログラムの動作一貫性が保たれています。
CLIの主な実装例
| 実装名 | 特徴 | プラットフォーム |
|---|---|---|
| .NET Framework | Microsoftによる初期の商用実装 | Windows専用 |
| .NET (旧 .NET Core) | オープンソースの後継バージョン | マルチプラットフォーム |
| Mono | オープンソースの代替実装 | モバイル・ゲーム開発中心 |
| .NET Compact Framework | ポータブルデバイス・Xbox 360向け | 組み込み/専用機 |
| .NET Micro Framework | リソース制限のあるデバイス向け | 超小型デバイス |
| DotGNU | GNUプロジェクトによる代替試行(現在は停止) | オープンソース |
Frequently Asked Questions
CLIと.NETは何が違うのですか?
CLIは「仕様(ルールブック)」であり、.NETはその仕様に基づいた「実装(実際の製品)」です。CLIという標準があるため、Microsoft以外の団体がMonoのような異なる実装を作成することが可能になります。
CIL(共通中間言語)にするメリットは何ですか?
ソースコードを直接マシン語にするのではなく、一度中間形式(CIL)にすることで、実行環境(VES)さえあれば、どのようなOSやCPU上でも同じコードを動作させることができるためです。
CLS(共通言語仕様)を守らないとどうなりますか?
CLSに準拠していないコンポーネントを作成した場合、他のCLI準拠言語からその機能を利用できない可能性があります。言語間の完全な相互運用性を確保したい場合にCLSの遵守が重要となります。
CLIは現在も更新されていますか?
標準仕様としての最新版は2012年に発行されていますが、それをベースにした実装である.NETなどは、現代のニーズに合わせて継続的に進化し、機能拡張が行われています。
RANDライセンスとは具体的にどのようなものですか?
特許保持者が、その技術を必要とする第三者に対して、合理的(Reasonable)かつ非差別的(Non-Discriminatory)な条件でライセンスを提供することを約束するものです。これにより、特定の企業による技術独占を防ぎ、業界全体の普及を促進します。
References
- "ISO/IEC 23271:2012 - Information technology -- Common Language Infrastructure (CLI)". ISO. Archived from the original on July 2, 2023.
- "ECMA-335". ECMA International. June 2012. Archived from the original on October 16, 2023.
- "Introduction to Advanced Windows Store App Development using HTML5 and JavaScript". Microsoft Press Store. October 15, 2013. Archived from the original on March 30, 2023.
- de Icaza, Miguel (September 15, 2011). "WinRT demystified". Archived from the original on November 30, 2023.
- Galli, Peter (July 6, 2009). "The Ecma C# and CLI Standards". Port 25. Archived from the original on July 9, 2009. Retrieved September 26, 2009.
- v-alje (March 16, 2023). "[MS-DEVCENTLP]: Microsoft Community Promise". Microsoft Learn. Retrieved May 1, 2023.