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