複製鏈接
請複製以下鏈接發送給好友

mono

(Xamarin公司開發的跨平台 .NET運行環境)

鎖定
Mono是一個由Xamarin公司(先前是Novell,最早為Ximian)所主持的自由開放源代碼項目。 [1]  該項目的目標是創建一系列匹配ECMA標準(Ecma-334和Ecma-335)的.NET工具,包括C#編譯器通用語言架構 [1] 微軟的.NET Framework(共通語言運行平台)不同,Mono項目不僅可以運行於Windows系統上,還可以運行於LinuxFreeBSD,Unix,OS XSolaris,甚至一些遊戲平台,例如:Playstation 3,Wii或XBox 360。 [2] 
軟件名稱
Mono
軟件平台
跨平台(Windows、Linux、Unix、Mac OS X、iOS、Android)
軟件語言
英語
開發商
Xamarin公司
軟件授權
GPL、LGPL與MIT許可證,或雙重許可

mono背景介紹

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 XSolaris [3] 
mono mono
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項目有着很多相同的目標.
Mono虛擬機包含一個實時編譯引擎,該引擎可用於如下處理器: x86, SPARC, PowerPC, ARM, S390 (32位模式和64位模式), x86-x64, IA64和64位模式的SPARC.該虛擬機可以將代碼實時編譯或者預先編譯到原生代碼.對於那些沒有列出來的系統,則使用的是代碼解釋器.

mono歷史背景

Miguel de Icaza在. NET的文檔於2000年10月發佈時就對. NET產生了興趣.在查看字節碼解釋器後,他發現對於元數據(metadata)沒有相應的説明文檔.2001年2月, deIcaza在. NET郵件列表中索要到了那段缺失了的關於元數據文件格式的信息,並開始了採用編寫一個C #編譯器的工作,作為對的實踐C #. 2001年4月ECMA公佈了那段缺失的文件格式,而在GUADEC (2001年4月6日- 8月4日) deIcaza展示了他的編譯器的一些特性(那個時候他的編譯可以解釋自身).
Ximian內部對如何創建能有效提升生產效率的工具進行了大量的討論,他們的目標是通過這些創建出來的工具讓使用者可以在更短時間內創建出更多的應用程序從而縮短開發週期和降低開發成本.經過可行性研究後,他們清楚地見到創建這樣的一項技術是可行的,於是Ximian從其它的項目抽調人員並創建了的開發小組Mono.由於缺少人力來創建整個. NET替代產品,他們在2001年7月19日的O'Reilly大會創建了的開源項目Mono.
差不多三年後, Mono於2004年7月30日發佈了1.0版本.

mono類庫

類庫為應用程序開發提供一套廣泛而有效的工具類。這些工具類本是採用C#編寫的,但是由於.NET採用的公共語言運行時,它們可以用於任何.NET語言。類庫被按命名空間進行了結構化,並被放置於稱為程序集共享庫中。在我們談到.NET framework時,我們多數是指這個類庫。

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

mono空間和程序集

命名空間是一種用於將邏輯上相似的類按層次結構分組的機制。這種機制防止了命名衝突。在這種結構化採用被點號"."分隔的單詞來實現。通常最頂層的命名空間是System,例如System.IO和System.Net(完整的命名空間列表可以在Mono文檔中找到)。當然還有別的頂層命名空間,例如Accessibility和Windows就是這樣的例子。新建的命名空間還可以以開發組織的名字開頭。
程序集是這些類庫的物理載體。它們跟Win32共享庫一樣都是dll文件,儘管不完全一樣。一些程序集的例子有:mscorlib.dll,System.dll,System.Data.dll和Accessibility.dll。命名空間經常被分拆到幾個程序集中,而一個程序集可以由幾個文件組成。

mono託管與非託管

在原生的.NET/Mono應用程序中,所有代碼都是託管的,也就是説,是受管於CLI式的內存管理和線程安全管理的。其它的.NET或Mono應用程序可以通過使用System.InterOpServices庫創建C#綁定來調用已存的非託管代碼。很多移植到Mono的類庫使用了CLI的這個特性,例如Gtk#。

mono與微軟專利

人們對於微軟能否採用專利摧毀Mono項目進行了大量的爭論。其實,專利問題不在於已被提交到ECMA組織的核心技術或Unix/Gnome的專有部分,而在於由微軟基於.NET Framework創建的技術,例如ASP NET,ADO NET和Windows Forms。這些技術在Mono中至今還沒有被完全地實現,事實上,在開發Mono應用程序時也不需要用到,然而,在開發基於Windows平台的程序時卻是不可缺少的。 Mono團隊將目標定為將這些技術納入到項目中,並制訂了一個三步走策略來處理它們:
採用其它實現方式來實現從而繞過專利問題
把包含專利的代碼清除出項目
找出“現有技術(prior art)”從而將專利變為非專利
顯然,第一個選項並不總是可行的。對於一些問題,例如那些與協同工作和交互相關的,可能就只有一種解決方案。由於這個相同的原因,儘管第一個選項總是可行的,它卻可能導致一個開發出來的產品並不能作為.NET的替代品。第三個選項則是昂貴的,甚至不可能的,這需要一定程度的運氣。

mono相關項目

現有大量與Mono相關的用於擴展Mono的項目,這些項目允許開發者在他們的開發環境中使用Mono。這些項目包括:
Cocoa#,對原生Mac OS X工具包的一系列包裝(Cocoa)。
Gecko#,一個對在Mozilla中使用的嵌入式佈局引擎的綁定(Gecko).
Gtk#,對使用C的GTK+庫的C#的外包。
Tao,一個圖形及遊戲庫的綁定。

mono開發軟件

以下是使用Mono API和C#編寫的部分程序:
Banshee是一個用於GNOME的音樂管理和播放軟件。
Beagle是一個桌面搜索軟件。
Blam!是一個RSS新聞聚集器,特別適合於閲讀如Planet Gnome這樣的行星資訊。
Bless是一個十六進制編輯器.
CDCollect是一個CD編目應用程序。
Diva是一個用於GNOME的視頻編輯器
F-Spot是有個由Novell開發的圖片便捷管理程序
Galaxium是一個MSN即時通訊軟件客户端。
GLyrics是一個歌詞搜索器。
Gpremacy is an implementation of the board game Supremacy written in Mono/Gtk#.
iFolder 3 (by Novell) lets you share files across multiple computers and with other users through peer-to-peer or Novell's groupware server products.
imeem a social networking software. Mac client and servers run Mono while the Windows client uses Microsoft NET.
Muine music player
MindFire是一個用於輔助速讀(speed reading)的跨平台電子書閲讀器
MonoDevelop是一個用於創建Mono應用程序的集成開發環境。該軟件原先是SharpDevelop向Gtk#的一個移植,而現今該軟件已獨立開發。該軟件在Windows上有可用版本。
參考資料