http://www.mono-project.com/Main_Page
?
http://zh.wikipedia.org/zh/Mono
?
Mono 是一個由 Novell 公司(先前是 Ximian )主持的項目。該項目的目標是創建一系列符合 ECMA 標準( Ecma-334 和 Ecma-335 )的 .NET 工具,包括 C# 編譯器和 共通語言執行平臺 。與微軟的 .NET Framework 不同,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的商業協議。
微軟 開發了一個稱為 共享源碼公共語言基礎 (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-64 , IA64 和64位模式的SPARC。該虛擬機可以將代碼即時編譯或者預先編譯到原生代碼。對于那些沒有列出來的系統,則使用的是代碼解釋器。
[ 編輯 ] 歷史
Miguel de Icaza 在.NET的文檔于 2000年 10月 發布時就馬上對.NET產生了興趣。在查看字節碼解釋器后,他發現對于元數據(metadata)沒有相應的說明文檔。 2001年 2月 ,de Icaza在.NET郵件列表中索要到了那段缺失了的關于元數據文件格式的信息,并開始了采用C#編寫一個C#編譯器的工作,作為對C#的實踐。 2001年 4月 ECMA公布了那段缺失的文件格式,而在 GUADEC ( 2001年 4月6日 - 4月8日 )de Icaza展示了他的編譯器的一些特性(那個時候他的編譯可以解釋自身)。
Ximian內部對如何創建能有效提升生產效率的工具進行了大量的討論,他們的目標是通過這些創建出來的工具讓使用者可以在更短時間內創建出更多的應用程序從而縮短開發周期和降低開發成本。經過可行性研究后,他們清楚地見到創建這樣的一項技術是可行的,于是Ximian從其它的項目抽調人員并創建了Mono的開發小組。由于缺少人力來創建整個.NET替代產品,他們在 2001年 7月19日 的 歐萊禮 大會創建了Mono的開源項目。
差不多三年后,Mono于 2004年 7月30日 發布了1.0版本。
[ 編輯 ] 架構
[ 編輯 ] 類
類庫 為應用程序開發提供一套廣泛而有效的工具類。這些工具類本是采用C#編寫的,但是由于.NET采用的 公共語言運行時 ,它們可以用于任何.NET語言。類庫被按命名空間進行了結構化,并被放置于稱為程序集的共享庫中。在我們談到.NET framework時,我們多數是指這個類庫。
[ 編輯 ] 命名空間和程序集
命名空間 是一種用于將邏輯上相似的類按層次結構分組的機制。這種機制防止了命名沖突。在這種結構化采用被點號"."分隔的單詞來實現。通常最頂層的命名空間是System,例如System.IO和System.Net(完整的命名空間列表可以在 Mono文檔 中找到)。當然還有別的頂層命名空間,例如Accessibility和Windows就是這樣的例子。新建的命名空間還可以以開發組織的名字開頭。
程序集 是這些類庫的物理載體。它們跟Win32共享庫一樣都是dll文件,盡管不完全一樣。一些程序集的例子有:mscorlib.dll,System.dll,System.Data.dll和Accessibility.dll。命名空間經常被分拆到幾個程序集中,而一個程序集可以由幾個文件組成。
[ 編輯 ] 公共語言基礎和公共語言規范
公共語言基礎 (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標準先前還定義了一個符合公共語言規范的程序庫作為應用框架。
[ 編輯 ] 托管與非托管代碼
在原生的.NET/Mono應用程序中,所有代碼都是 托管 的,也就是說,是受管于CLI式的內存管理和線程安全管理的。其它的.NET或Mono應用程序可以通過使用System.InterOpServices庫創建C#綁定來調用已存的非托管代碼。很多移植到Mono的類庫使用了CLI的這個特性,例如Gtk#。
[ 編輯 ] 相關項目
現有大量與Mono相關的用于擴展Mono的項目,這些項目允許開發者在他們的開發環境中使用Mono。這些項目包括:
- Cocoa# ,對原生Mac OS X工具包的一系列包裝( Cocoa )。
- Gecko#,一個對在Mozilla中使用的嵌入式布局引擎的綁定( Gecko ).
- Gtk# ,對使用 C 的 GTK+ 庫的C#的外包。
- Tao ,一個圖形及游戲庫的綁定。
[ 編輯 ] Mono與微軟的專利
人們對于微軟能否采用專利摧毀Mono項目進行了大量的爭論。其實,專利問題不在于已被提交到 ECMA 組織的核心技術或Unix/Gnome的專有部分,而在于由微軟基于.NET Framework創建的技術,例如 ASP.NET , ADO.NET 和 Windows Forms 。這些技術在Mono中至今還沒有被完全地實現,事實上,在開發Mono應用程序時也不需要用到,然而,在開發基于Windows平臺的程序時卻是不可缺少的。Mono團隊將目標定為將這些技術納入到項目中,并制訂了一個三步走策略來處理它們:
- 采用其它實現方式來實現從而繞過專利問題
- 把包含專利的代碼清除出項目
- 找出“現有技術( prior art )”從而將專利變為非專利
顯然,第一個選項并不總是可行的。對于一些問題,例如那些與協同工作和交互相關的,可能就只有一種解決方案。由于這個相同的原因,盡管第二個選項總是可行的,它卻可能導致一個開發出來的產品并不能作為.NET的替代品。第三個選項則是昂貴的,甚至不可能的,這需要一定程度的運氣。
[ 編輯 ] 使用Mono開發的軟件
- 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)讓你使用點對點協議( peer-to-peer )或Novell的群集服務器產品與其它計算機和用戶共享文件。
- imeem ? a social networking software. Mac client and servers run Mono while the Windows client uses Microsoft.NET.
- MindFire 是一個用于輔助速讀( speed reading )的跨平臺電子書閱讀器
- MonoDevelop 是一個用于創建Mono應用程序的 集成開發環境 。該軟件原先是 SharpDevelop 向Gtk#的一個移植,而現今該軟件已獨立開發。該軟件在Windows上有測試版的可用版本。
- Pinta 是一個簡單的 位圖形編輯軟件 。
[ 編輯 ] 備注
- ^ ?For more information about the licensing, see ? Mono FAQ: Licensing
[ 編輯 ] 參考文獻
- This article incorporates text from Mono's ? homepage ,which is in the ? GNU Free Documentation License .
- Miguel de Icaza . ? [Mono-list] Mono early history. ? (mailing list). 2009-10-13 ? [December 6 2005] . ?
- Eugenia Loli-Queru . ? Mono Applications? Aplenty! . ? OSNews . 2005-02-22 ? [December 6 2005] . ?
[ 編輯 ] 外部鏈接
- GotMono?, ? Mono community homepage
- Mono Forum
- Mono Live ,LiveCD website
- Running .NET on Linux or Windows
- Ximian Forum
- Slashdot: Fedora Core 5 includes Mono
- Novell, Inc.
[ 編輯 ] 國際站點
- Mono France ,A French Mono WebSite
- MonoBrasil ,A Brazilian Mono WebSite
- MonoColombia ,A Colombian Mono WebSite
- MonoGermany ,A German Mono WebSite
- MonoHispano ,A Spanish Mono community
- Japanese Mono ? Mono web site translation to Japanese.
- MonoPoland ,Polish Mono Web site.
- Mono Netherlands ,Dutch Mono site.
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
