Can you summarize the following document?
        
  當Microsoft在2000年6月第一次公佈.NET Framework時,它被描述為一個以因特網標準為基底的新的平臺。並且在12月發表了基本的共通語言架構開放標準的形式(ECMA-335),提供了無相依性實作的可能。Ximian的 米格爾·德伊卡薩在.NET的文件於2000年10月釋出時就馬上對.NET產生了興趣。在檢視位元組碼直譯器後,他發現對於後設資料(metadata)沒有相應的說明文件。2001年2月,德伊卡薩在.NET郵件列表中索要到了那段缺失了的關於後設資料檔案格式的資訊,並開始了採用C#編寫一個C#編譯器的工作,作為對C#的實踐。2001年4月ECMA公佈了那段缺失的檔案格式,而在GUADEC(2001年4月6日-4月8日)德伊卡薩展示了他的編譯器的一些特性(那個時候他的編譯可以解釋自身)。  Ximian內部對如何建立能有效提升生產效率的工具進行了大量的討論,他們的目標是通過這些建立出來的工具讓使用者可以在更短時間內建立出更多的應用程式從而縮短開發週期和降低開發成本。經過可行性研究後,他們清楚地見到建立這樣的一項技術是可行的,於是Ximian從其它的專案抽調人員並建立了Mono的開發小組。由於缺少人力來建立整個.NET替代產品,他們在2001年7月19日的歐萊禮大會建立了Mono的開源專案。  差不多三年後,Mono於2004年7月30日釋出了1.0版本。Mono逐步從一開始的重點為Linux桌面應用程式開發者平臺,到支援寛廣範圍的架構和作業系統,包含了嵌入式系統。  在2011年4月,Attachmate收購Novell後,針對Novell釋出了上百位人力的解僱。在3月16號德伊卡薩在他的blog釋出在被Novell解僱後,他找到一家公司將透過Xamarin繼續支援Mono。原本的Mono團隊也被移到新的公司。Xamarin計劃維持在Mono的工作。由於在這時間點Novell仍然擁有MonoTouch和專為Android的Mono,所以計劃針對iOS和Android上重寫商業化的.NETstacks。  在這發表之後,這個專案的未來被質疑。因為,專屬 Android的MonoTouch and Mono變成跟現存Attachmate所屬的商業化商品有直接競爭,也考量了Xamarin團隊為了相同的作品而不使用之前在Novell開發的技術,證實是有困難的。無論如何,在2011年七月Novell、Attachmate的子公司及Xamarin發表了對Xamarin for Mono, MonoTouch and Mono for Android的永久性許可證,正式地帶起這個案子的管理方式。

  Mono目的的版本為3.10.0(2014年10月)。這個版本提供了.NET Framework的核心API、Visual Basic.NET的支援、C#版本2.0,3.0,及4.0、LINQ to Objects、XML及SQL等。在C#編譯器的目前操作的預設模式是C# 4.0。Windows Forms 2.0也有被支援,但沒有積極地被開發,因此,它在Mono的支援不完整。Mono的目標是達成在.NET 4.0的完整功能支援,除了Windows Presentation Foundation(WPF)和Limited Windows Communication Foundation(WCF)。 在實驗性質mono的開發.NET Framework的一些遺失部分稱做Olive Mono專案也建立了Visual Basic.NET編譯器與一個runtime的VB.NET的應用程式。它目前一直由Rolf Bjarne Kvinge進行開發。

  Moonlight是一個Microsoft Silverlight的開源實作,自從Mono 1.9起即包含了這實作。在2009年1月20日釋出的Moonlight 1.0支援Silverlight 1.0 APIs。而Moonlight 2.0支援Silverlight 2.0。Moonlight 3.0則在2010年2月被髮表,包含了Silverlight 3.0的支援。Moonlight最終在2012年3月29日被放棄。依據米格爾所言,兩個因素扼殺了這個專案的命運:Microsoft增加了“人為限制”...這造成了桌面程式無用武之地...",並且在Web上的技術沒有獲得足夠的配合。

  Mono組成元件包含了以下三類:  "核心元件"包含了C# 編譯器,Common Language Infrastructure虛擬機器器,以及核心類別程式庫。這些元件都是基於Ecma-334 and Ecma-335標準,而使得Mono能夠提供與標準相容、免費、並且是開放原始碼的CLI 虛擬機器器。微軟曾經宣告這些標準都是基於Community Promise license的社群保護承諾之下。  "Mono/Linux/GNOME開發堆疊"則是提供了工具以用於開發應用軟體。這些工具使用了既有的GNOME以及自由並且開放原始碼程式庫,它們包含了針對圖形使用者介面(GUI)開發的Gtk#、可套用Gecko rendering engine的Mozilla程式庫、Unix整合程式庫(Mono.Posix)、安全性推疊、以及XML schema語言RelaxNG。Gtk# 讓Mono應用程式融入Gnome桌面環境而成為原生程式。資料庫程式庫則提供了與物件關連式資料庫連結的能力,這些資料庫包含了 db4o、Firebird、Microsoft SQL Server(MSSQL)、MySQL、Open Database Connectivity(ODBC)、Oracle、PostgreSQL、SQLite等等。在網站上可看見Mono專案一直都在持續更新維護資料庫程式庫。  "微軟相容堆疊"則是提供了一種方式來使得Windows.NET應用程式可以被移植到GNU/Linux上。這個堆疊包含了ADO.NET、ASP.NET以及Windows Forms等等。不過,由於這些元件並沒有被上述所說Ecma標準所涵蓋,因此部分元件有所謂專利恐懼與疑慮的問題。

  

  Mono程式的執行包含一個程式碼運作引擎,它會將ECMA CIL的byte code轉譯為原生碼(Native Code),它支援了以下處理器:ARM、MIPS(只有32位元模式)、SPARC、PowerPC、S390(64位元模式)、x86、x86-64以及IA-64 64位元模式。  程式的轉譯有三種模式:  從2.6版起,Mono開始支援使用LLVM來產生執行碼,而非原本自帶的方式。這對於高效能計算方面非常有用,因為在這種場合下,程式的執行效能比啟動速度來得重要。  從2.7 Preview版開始,使用者不再需要在程式編譯前的Configuration時就必須選定執行碼產生引擎,執行碼的產生可以在程式啟動時以codice_1或codice_2的引數來指定即可,預設是以自帶的引擎為主,因為它的產生速度比較快。

  當2.8版推出時,Mono runtime提供了兩套垃圾回收器:generational collector以及Boehm conservative collector。在Mono 3.1.1版之前,預設的垃圾回收器("Boehm-Demers-Weiser Conservative Garbage Collector"),跟商業環境如Java Virtual Machine或.NET framework的垃圾回收器相比,一直有很大的限制,在某些狀況的應用軟體上會發生記憶體洩漏的現象,這使得Mono無法用於需要長時間執行的伺服器應用。 ,一個稱之為「Simple Generational GC」(SGen-GC)的新一代垃圾回收器開始用於Mono中,在3.1.1版之後就直接變成是預設的垃圾回收器。對於Mono 2.8到3.1.0,使用者可以以傳入引數codice_3來讓Mono runtime啟動時使用SGen垃圾回收器。這個新的垃圾回收器相較於傳統基於保守型掃描方式的回收器,有很多優點,它使用了generational garbage collection,從物件一開始被配置、到各個週期,所有活著的物件都會被轉移到較早代的記憶體池,這個想法是來自於因為許多物件都只是短暫使用的,因此可以被快速回收再利用,只有少數物件是長期性的存活在應用程式的整個生命期中。另外,為了改善效率,這個回收器對每個執行緒配置了個別的記憶體池,讓執行緒不需要跟別的執行緒打交道就可以自行配置記憶體區塊。對於前述所說,物件的轉移到較早代記憶體池的做法則是,在轉移之後,將所有目前指向該物件的指標都更新為新的位址。由於這樣的做法在大型物件時比較浪費記憶體,因此SGen為大型物件使用了獨自的記憶體池(Large Object Section),並且對這些物件使用mark-and-sweep演算法。  目前SGen是以比較保守的方式來對待堆疊與暫存器,並且,那些可被參考到的物件是由它們的root來負責pin的動作。未來版本的Mono將會以精確方式來掃描託管的堆疊,藉此減少那些被pin的物件。

  類別庫為應用程式開發提供一套廣泛而有效的工具類。這些工具類可以用於任何.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)是一套標準(ECMA335),公共語言執行時(Common Language Runtime)即CLR是CLI標準的實現,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。這些專案包括:

  Mono是透過Xamarin的雙重授權,相似於其他產品,如Qt和Mozilla application Suite。Mono's C#編譯器與工具是依照GNU Leasser General Public License(LGPLv2 only)來釋出(開始於Mono 2.0,Mono C#的編譯器原始碼在MIT X11 License仍然是有效的),屬於GNU Leasser General Public License(LGPLv2 only)的runtime函式庫及屬於MIT X11 License的類別函式庫。  有完全免費的軟體與開源授權,因此Mono是免費的開源軟體。  C#編譯器的授權改變是從GPL到MIT X11授權,允許編譯器的程式碼在少許的GPL限制例子中被重複使用,如例:  * Mono互動介面的Shell

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

  以下是使用Mono API和C#編寫的部分程式:

  2011年4月,Novell公司被Attachmate公司所併購,而原先在Novell公司裡的Mono開發者被大量資遣。2011年5月,原先Mono的開發者另外成立一家Xamarin的公司,仿Mono發行他們的Xamarin跨平臺.NET套件,在Windows下能與整合到Microsoft Visual Studio的IDE之中。2011年7月,Attachmate公司旗下的Novell公司批准了Mono相關專案到Xamarin的授權。
Mono是一個由Xamarin公司(先前是Novell,最早為Ximian)所主持的自由開放原始碼專案。該專案的目標是建立一系列符合ECMA標準(Ecma-334和Ecma-335)的.NET工具,包括C#編譯器和通用語言架構。與微軟的.NET Framework(共通語言執行平臺)不同,Mono專案不僅可以執行於Windows系統上,還可以執行於Linux、FreeBSD、Unix、OS X和Solaris,甚至一些遊戲平臺,例如:Playstation 3、Wii或XBox 360。Mono的標誌是一個猴子格式的臉。