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