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標準先前還定義了一個符合公共語言規範的程式庫作為套用框架。