关于 Mono 的使用
Mono 项目包括以下开放源码实现:
- C# 编译器
- 虚拟执行系统(Virtual Execution System),包括 JIT 编译器、无用单元回收程序、装载器和线程引擎
- .NET 类库实现
- 可视化开发工具和调试器
Mono 项目工具可运行在不同硬件和操作系统上,包括 Linux、Windows 和 Mac OS X。
Mono 项目目前在不同程度上支持下列语言:
- C#
- Java
- Boo
- Nemerle
- Visual Basic.NET
- Python
- JavaScript
- Oberon
- PHP
- Object Pascal
- 等等
注意,并非每一种都像 C# 运行时那样完整。比如,没有直接支持 Java,而是将 Java 字节码即时转换成 IL。
实现程度不同的另一个例子是,Python 实现最近似乎停止了。需要 Python 的开发人员可能想使用 Boo,这是一种更完整的脚本语言实现(虽然类似于 Python,但是是为 .NET 框架设计的)。谈到支持 Mono 的语言,需要提一下 Nemerle 是一种新的 .NET 平台混合编程语言(函数型、面向对象型和命令型)。
一些政治问题
有人可能奇怪,开放源码的倡导者为何要接受 Microsoft 产品并欢迎它。事实上,很多人最初都好奇 Microsoft 为何允许这种事情。
原因最终被证明是,Microsoft 一直遵守关于标准化 C# 和 CLI 的承诺。由于标准化和规范化,所以 Mono 团队能够为 C# 和公共语言基础设施建立自己的 ECMA 标准的开放实现。事实上,编译器和语言本身也都明确规定让他人实现。
关于 Mono 的大量纷争更多来自关于提供类库对于开放式规范是否必需的讨论。最终必然导致了关于专利权的激烈争论,以及作为攻击 Linux 的更大战略的一部分 Microsoft 是否会利用专利权攻击 Mono。最终,Mono 开发人员提供了两套独立的库。
一套是 Microsoft .NET 库的重新实现,用于和 Microsoft .NET 应用程序兼容。其中包括 ADO.NET、System.Windows.Forms 和 ASP.NET。
以已有的开放源码库和技术为基础,Mono 开发人员还从头创建了自己的一套强大的库,目的是提供同样的功能而避免专利侵权问题。比如,Mono 提供了称为 Gtk# 的窗口技术、用于 gtk+ 的一套 C# 绑定和种类齐全的 GNOME 库。这就使得应用程序开发人员能够使用 Mono 编写完全原生的 GNOME 应用程序。可以将其看作 Microsoft System.Windows.Forms 库的开发源码对照版。
Mono 运行在什么平台上?

Mono 已经成功移植到多种硬件平台上的 Linux、FreeBSD、Windows 和 Mac OS X。估计涵盖了桌面市场的 99%。