Mono是一个由Novell公司(由Xamarin发起)主持的项目,并由Miguel de lcaza领导的,一个致力于开创.NET在Linux上使用的开源工程。它包含了一个C#语言的编译器,一个CLR的运行时,和一组类库,并实现了 ADO NET和ASP NET。能够使得开发人员在Linux用C#开发程式。该项目的目标是创建一系列符合标準ECMA (Ecma-334和Ecma-335)的.Net 工具, 包括C #编译器和共同语言(CL 即 Common Language)执行平台(Platform).与微软的.Net不同, Mono项目不仅可以运行于Windows系统内,还可以运行于Linux, FreeBSD, Unix, Mac OS X和Solaris。
Mono现由Novell持有双重许可, 这和Qt、Mozilla应用程式套件的情况相似.Mono的C #编译器及其相关工具发布于GNU General Public License (GPL)之下,其运行时库发布于GNU Lesser General Public License (LGPL)之下,其类库发布于MIT License之下.这些均是开源协定因此Mono是一个开源软体.如果你打算向Mono贡献你的源码,则你须签署一个着作权分派给Novell以允许它将这些代码在其它协定下再申请许可,从而允许Novell保留其双重许可的能力来持有Mono的商业协定[1].
微软开发了一个称为共享源码公共语言基础(Shared Source Common Language Infrastructure, Shared Source CLI)的可用于FreeBSD, Windows, Mac OS X的.NET实现版本.微软的共享源码协定并不是开源软体协定,且可能对于社区来说也是不足够的(它明文禁止了对软体的商业用途).我们还可以见到另外一个.NET实现版本, Portable NET项目,该项目与Mono项目有着很多相同的目标.
公共语言基础(Common Language Infrastructure,CLI),又叫公共语言运行时(Common Language Runtime),已由Mono实现。该运行时用于执行已编译的.NET应用程式。公共语言基础已被ECMA定义为标準ECMA-335。要运行一个.NET应用程式,你必须使用相应的参数调用运行时。
在ECMA-335的第六章详细说明了公共语言规范(Common Language Specification,CLS)并定义了提供给公共语言基础的接口,例如对于枚举类型的隐含表示类型的协定。 Mono的编译器负责生成符合公共语言规范的映射代码,即公共中间语言(Common Intermediate Language,CIL)。 Mono的运行时将运行这类代码。 ECMA标準先前还定义了一个符合公共语言规范的程式库作为套用框架。