http://www.mono-project.com/Main_Page
?
http://zh.wikipedia.org/zh/Mono
?
Mono 是一個(gè)由 Novell 公司(先前是 Ximian )主持的項(xiàng)目。該項(xiàng)目的目標(biāo)是創(chuàng)建一系列符合 ECMA 標(biāo)準(zhǔn)( Ecma-334 和 Ecma-335 )的 .NET 工具,包括 C# 編譯器和 共通語言執(zhí)行平臺 。與微軟的 .NET Framework 不同,Mono項(xiàng)目不僅可以運(yùn)行于 Windows 系統(tǒng)上,還可以運(yùn)行于 Linux , FreeBSD , Unix , Mac OS X 和 Solaris 。
Mono現(xiàn)由Novell持有 雙重許可 ,這和 Qt 和 Mozilla應(yīng)用程序套件 的情況相似。Mono的C#編譯器及其相關(guān)工具發(fā)布于 GNU General Public License (GPL)之下,其運(yùn)行時(shí)庫發(fā)布于 GNU Lesser General Public License (LGPL)之下,其類庫發(fā)布于 MIT License 之下。這些均是 開源協(xié)議 因此Mono是一個(gè) 開源軟件 。如果你打算向Mono貢獻(xiàn)你的 源碼 ,則你須簽署一個(gè) 版權(quán)分派 給Novell以允許它將這些代碼在其它協(xié)議下再申請?jiān)S可,從而允許 Novell 保留其雙重許可的能力來持有Mono的商業(yè)協(xié)議。
微軟 開發(fā)了一個(gè)稱為 共享源碼公共語言基礎(chǔ) (Shared Source Common Language Infrastructure,Shared Source CLI)的可用于 FreeBSD ,Windows和Mac OS X的.NET實(shí)現(xiàn)版本。微軟的 共享源碼 協(xié)議并不是開源軟件協(xié)議,且可能對于社區(qū)來說也是不足夠的(它明文禁止了對軟件的商業(yè)用途)。我們還可以見到另外一個(gè).NET實(shí)現(xiàn)版本, Portable.NET 項(xiàng)目,該項(xiàng)目與Mono項(xiàng)目有著很多相同的目標(biāo)。
Mono虛擬機(jī)包含一個(gè) 即時(shí)編譯 引擎,該引擎可用于如下處理器: x86 , SPARC , PowerPC , ARM , S390 (32位模式和64位模式), x86-64 , IA64 和64位模式的SPARC。該虛擬機(jī)可以將代碼即時(shí)編譯或者預(yù)先編譯到原生代碼。對于那些沒有列出來的系統(tǒng),則使用的是代碼解釋器。
[ 編輯 ] 歷史
Miguel de Icaza 在.NET的文檔于 2000年 10月 發(fā)布時(shí)就馬上對.NET產(chǎn)生了興趣。在查看字節(jié)碼解釋器后,他發(fā)現(xiàn)對于元數(shù)據(jù)(metadata)沒有相應(yīng)的說明文檔。 2001年 2月 ,de Icaza在.NET郵件列表中索要到了那段缺失了的關(guān)于元數(shù)據(jù)文件格式的信息,并開始了采用C#編寫一個(gè)C#編譯器的工作,作為對C#的實(shí)踐。 2001年 4月 ECMA公布了那段缺失的文件格式,而在 GUADEC ( 2001年 4月6日 - 4月8日 )de Icaza展示了他的編譯器的一些特性(那個(gè)時(shí)候他的編譯可以解釋自身)。
Ximian內(nèi)部對如何創(chuàng)建能有效提升生產(chǎn)效率的工具進(jìn)行了大量的討論,他們的目標(biāo)是通過這些創(chuàng)建出來的工具讓使用者可以在更短時(shí)間內(nèi)創(chuàng)建出更多的應(yīng)用程序從而縮短開發(fā)周期和降低開發(fā)成本。經(jīng)過可行性研究后,他們清楚地見到創(chuàng)建這樣的一項(xiàng)技術(shù)是可行的,于是Ximian從其它的項(xiàng)目抽調(diào)人員并創(chuàng)建了Mono的開發(fā)小組。由于缺少人力來創(chuàng)建整個(gè).NET替代產(chǎn)品,他們在 2001年 7月19日 的 歐萊禮 大會創(chuàng)建了Mono的開源項(xiàng)目。
差不多三年后,Mono于 2004年 7月30日 發(fā)布了1.0版本。
[ 編輯 ] 架構(gòu)
[ 編輯 ] 類
類庫 為應(yīng)用程序開發(fā)提供一套廣泛而有效的工具類。這些工具類本是采用C#編寫的,但是由于.NET采用的 公共語言運(yùn)行時(shí) ,它們可以用于任何.NET語言。類庫被按命名空間進(jìn)行了結(jié)構(gòu)化,并被放置于稱為程序集的共享庫中。在我們談到.NET framework時(shí),我們多數(shù)是指這個(gè)類庫。
[ 編輯 ] 命名空間和程序集
命名空間 是一種用于將邏輯上相似的類按層次結(jié)構(gòu)分組的機(jī)制。這種機(jī)制防止了命名沖突。在這種結(jié)構(gòu)化采用被點(diǎn)號"."分隔的單詞來實(shí)現(xiàn)。通常最頂層的命名空間是System,例如System.IO和System.Net(完整的命名空間列表可以在 Mono文檔 中找到)。當(dāng)然還有別的頂層命名空間,例如Accessibility和Windows就是這樣的例子。新建的命名空間還可以以開發(fā)組織的名字開頭。
程序集 是這些類庫的物理載體。它們跟Win32共享庫一樣都是dll文件,盡管不完全一樣。一些程序集的例子有:mscorlib.dll,System.dll,System.Data.dll和Accessibility.dll。命名空間經(jīng)常被分拆到幾個(gè)程序集中,而一個(gè)程序集可以由幾個(gè)文件組成。
[ 編輯 ] 公共語言基礎(chǔ)和公共語言規(guī)范
公共語言基礎(chǔ) (Common Language Infrastructure,CLI),又叫公共語言運(yùn)行時(shí)(Common Language Runtime),已由Mono實(shí)現(xiàn)。該運(yùn)行時(shí)用于執(zhí)行已編譯的.NET應(yīng)用程序。公共語言基礎(chǔ)已被ECMA定義為標(biāo)準(zhǔn)ECMA-335。要運(yùn)行一個(gè).NET應(yīng)用程序,你必須使用相應(yīng)的參數(shù)調(diào)用運(yùn)行時(shí)。
在ECMA-335的第六章詳細(xì)說明了 公共語言規(guī)范 (Common Language Specification,CLS)并定義了提供給公共語言基礎(chǔ)的接口,例如對于枚舉類型的隱含表示類型的協(xié)定。Mono的編譯器負(fù)責(zé)生成符合公共語言規(guī)范的映射代碼,即公共中間語言(Common Intermediate Language,CIL)。Mono的運(yùn)行時(shí)將運(yùn)行這類代碼。ECMA標(biāo)準(zhǔn)先前還定義了一個(gè)符合公共語言規(guī)范的程序庫作為應(yīng)用框架。
[ 編輯 ] 托管與非托管代碼
在原生的.NET/Mono應(yīng)用程序中,所有代碼都是 托管 的,也就是說,是受管于CLI式的內(nèi)存管理和線程安全管理的。其它的.NET或Mono應(yīng)用程序可以通過使用System.InterOpServices庫創(chuàng)建C#綁定來調(diào)用已存的非托管代碼。很多移植到Mono的類庫使用了CLI的這個(gè)特性,例如Gtk#。
[ 編輯 ] 相關(guān)項(xiàng)目
現(xiàn)有大量與Mono相關(guān)的用于擴(kuò)展Mono的項(xiàng)目,這些項(xiàng)目允許開發(fā)者在他們的開發(fā)環(huán)境中使用Mono。這些項(xiàng)目包括:
- Cocoa# ,對原生Mac OS X工具包的一系列包裝( Cocoa )。
- Gecko#,一個(gè)對在Mozilla中使用的嵌入式布局引擎的綁定( Gecko ).
- Gtk# ,對使用 C 的 GTK+ 庫的C#的外包。
- Tao ,一個(gè)圖形及游戲庫的綁定。
[ 編輯 ] Mono與微軟的專利
人們對于微軟能否采用專利摧毀Mono項(xiàng)目進(jìn)行了大量的爭論。其實(shí),專利問題不在于已被提交到 ECMA 組織的核心技術(shù)或Unix/Gnome的專有部分,而在于由微軟基于.NET Framework創(chuàng)建的技術(shù),例如 ASP.NET , ADO.NET 和 Windows Forms 。這些技術(shù)在Mono中至今還沒有被完全地實(shí)現(xiàn),事實(shí)上,在開發(fā)Mono應(yīng)用程序時(shí)也不需要用到,然而,在開發(fā)基于Windows平臺的程序時(shí)卻是不可缺少的。Mono團(tuán)隊(duì)將目標(biāo)定為將這些技術(shù)納入到項(xiàng)目中,并制訂了一個(gè)三步走策略來處理它們:
- 采用其它實(shí)現(xiàn)方式來實(shí)現(xiàn)從而繞過專利問題
- 把包含專利的代碼清除出項(xiàng)目
- 找出“現(xiàn)有技術(shù)( prior art )”從而將專利變?yōu)榉菍@?
顯然,第一個(gè)選項(xiàng)并不總是可行的。對于一些問題,例如那些與協(xié)同工作和交互相關(guān)的,可能就只有一種解決方案。由于這個(gè)相同的原因,盡管第二個(gè)選項(xiàng)總是可行的,它卻可能導(dǎo)致一個(gè)開發(fā)出來的產(chǎn)品并不能作為.NET的替代品。第三個(gè)選項(xiàng)則是昂貴的,甚至不可能的,這需要一定程度的運(yùn)氣。
[ 編輯 ] 使用Mono開發(fā)的軟件
- Banshee 是一個(gè)用于 GNOME 的音樂管理和播放軟件。
- Beagle 是一個(gè) 桌面搜索 軟件。
- Blam! 是一個(gè) RSS ? 新聞聚集器 ,特別適合于閱讀如 Planet Gnome 這樣的 行星 資訊。
- Bless 是一個(gè) 十六進(jìn)制編輯器 。
- CDCollect 是一個(gè) CD ? 編目 應(yīng)用程序。
- Diva 是一個(gè)用于GNOME的視頻編輯器。
- F-Spot 是有個(gè)由 Novell 開發(fā)的圖片便捷管理程序。
- Galaxium 是一個(gè) MSN ? 即時(shí)通訊軟件 客戶端。
- GLyrics 是一個(gè) 歌詞 搜索器。
- Gpremacy ? is an implementation of the ? board game ? Supremacy written in Mono/Gtk#.
- iFolder 3 (by Novell)讓你使用點(diǎn)對點(diǎn)協(xié)議( peer-to-peer )或Novell的群集服務(wù)器產(chǎn)品與其它計(jì)算機(jī)和用戶共享文件。
- imeem ? a social networking software. Mac client and servers run Mono while the Windows client uses Microsoft.NET.
- MindFire 是一個(gè)用于輔助速讀( speed reading )的跨平臺電子書閱讀器
- MonoDevelop 是一個(gè)用于創(chuàng)建Mono應(yīng)用程序的 集成開發(fā)環(huán)境 。該軟件原先是 SharpDevelop 向Gtk#的一個(gè)移植,而現(xiàn)今該軟件已獨(dú)立開發(fā)。該軟件在Windows上有測試版的可用版本。
- Pinta 是一個(gè)簡單的 位圖形編輯軟件 。
[ 編輯 ] 備注
- ^ ?For more information about the licensing, see ? Mono FAQ: Licensing
[ 編輯 ] 參考文獻(xiàn)
- 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.
[ 編輯 ] 國際站點(diǎn)
- 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.
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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