Mono 2.0 Release, 2008

Mono 2.0 is an portable and open source implementation of the .NET framework to Unix, Windows, MacOS and other operating systems.

Major Highlights

Mono 2.0 is a major milestone in the Mono project, and it supports the following features:

  • Microsoft Compatible API:
  • Mono APIs:
  • Third Party APIs bundled with Mono:
  • Compilers:
  • Tools


    Mono is an open source project, the class libraries and the C# compiler are licensed under the MIT X11 license, the runtime under the GNU LGPL and the SDK tools are released under the GNU GPL or the MIT X11 license.

    Licensing is available for statically linking Mono (for the Apple iPhone, Nintendo Wii platforms and other proprietary operating systems). For licensing information, you can contact us.

    Windows.Forms: New Controls

    Mono 2.0 contains an API complete implementation of .Net's System.Windows.Forms (winforms) namespace, allowing winforms applications to run on Linux, MacOX and other Unix systems.

    Thank you to everyone on the winforms team (past and present), everyone who has contributed code to winforms, and everyone who has submitted bug reports, helping to make winforms (and Mono!) what it is today!

    ToolStrip and MenuStrip

    Mono 2.0 contains complete implementations of .Net 2.0's ToolStrip/MenuStrip/StatusStrip/ContextMenuStrip controls, which look better and provide many more features than the orginial controls that they replace. (Don't worry, the old controls are still there!)


    Mono 2.0 contains a much better implementation of DataGridView. There are still some missing features, such as VirtualMode, which will be addressed in future Mono versions. However, this new version has considerably more features than previously.


    Mono 2.0 contains an implementation of WebBrowser that is based on Mozilla's Gecko HTML rendering engine.


    Mono 2.0 contains a complete implementation of TableLayoutPanel, allowing controls to be positioned using a simple column/row layout.


    Mono 2.0 contains a complete implementation of FlowLayoutPanel, allowing controls to be positioned by flowing to fill available space.


    Mono 2.0 contains an implementation of SplitContainer, which provides an easier way to make adjustable layouts than using Splitters.

    Windows.Forms: Putting it all together

    Some examples of public 2.0 applications running on Mono 2.0.


    Paint.Net hasn't been fully ported to Mono yet (due to p/invokes), but we can still see it using the new 2.0 controls.


    NClass is a UML modeling application written in C#.

    Changes Since Release 1.9

    These are the major changes that happened since the 1.9 release of Mono.

    All of the changes since 1.2 are documented in the following release notes: 1.2.1, 1.2.2, 1.2.3, 1.2.4, 1.2.5, 1.2.6, 1.9 and 1.9.1.

    Runtime: Performance

    The performance of operations on decimals has significantly improved.

    The performance of locking (Monitor.Enter/Monitor.Exit) is significally improved.

    The memory usage of the runtime is reduced, especially when using generics.

    Many race conditions and threading problems were fixed, improving reliability.

    Math.Min/Math.Max and some forms of Interlocked.CompareExchange (CAS) are now implemented using fast inline code on x86/amd64.

    There is now a MONO_DEBUG=dont-free-domains option that improves the performance of ASP.NET-based applications.

    Runtime: Features

    Some progress has been made on the Winx64 port [Bill Holmes, Jonathan Chambers]

    The runtime is now built using the dolt libtool replacement ( this speeds up runtime compilations by about 30%.

    The runtime build process is now less verbose on some platforms, similar to the way the linux kernel is built. To turn it off, use the --enable-quiet-build=no argument to configure, or pass the V=1 argument to make.

    There is now a --debug=casts command line option to the runtime which turns on the reporting of better InvalidCastException message details.

    The mono_method_get_unmanaged_thunk () function has been implemented for developers embedding Mono which simplifies calling managed methods from unmanaged code.

    Runtime bugs fixed/closed in this release


    This release introduce a new wizard-based GUI runner. It also add support for .MDB and .PDB debugging symbols, allowing source lines numbers inside reports.

    This release contains 151 rules (56 new and many updated) divided into 14 categories (2 new) and yet is faster than the version shipped with Mono 1.9. More...

    C# Compiler

    The compiler now support expression trees (turning expressions into an AST at compile time when the type of a parameter is a System.Linq.Expressions.Expression). This completes the C# 3.0 support.

    Over 60 reported bugs in the compiler were fixed and many of the internals have been cleaned up. Extensive refactoring and hardening of the C# 2.0 and 3.0 support are now better integrated.

    A major rewrite of the anonymous method/lambda support in the internals of the compiler now optimizes the resulting code, and fixes several bugs in this area.

    The compiler is now dual licensed under the MIT X11 and the GNU GPL version 2 (only).

    The compiler now supports #pragma checksum for use with ASP.NET debugging and #line hidden, as well as flagging more compiler-generated code properly (to avoid the debugger single-stepping into those bits).


    LINQ and LINQ to XML are now complete, support for expression trees is now available as well as the backend to support expression tree compilation.

    LINQ to Dataset has also been implemented.

    Performance Counters Implementation

    Mono now has a performance counters implementation that can be used to monitor various statistics of Mono processes. To access this API you use the System.Diagnostics.PerformanceCounter classes.

    Currently the counters can only be read from the same process, there is no setup to share across processes.

    ASP.NET: VirtualPathProvider

    This was one of the missing features from our ASP.NET 2.0 implementation, we now have a it available (Marek).

    ASP.NET now has support for *.browser files.

    Support for Native Methods.

    Support for native methods in assemblies was developed by Kornél Pál. These are assemblies that contain a mix of CIL bytecode as well as native code (x86 or x86-64 for now), generated by Microsoft's C++ compiler. Native methods are referred as "IJW" for it-just-works thunks.

    This feature is only supported for Windows.

    Big Arrays

    Mono now supports 64-bit indexed arrays on 64-bit systems. Although this is permitted by the ECMA standard, this today is a unique feature of Mono as .NET on Windows does not support 64-bit array indexes. This code was developed by Luis Ortiz at Interactive Supercomputing and integrated by Rodrigo Kumpera.

    This feature is useful for developers that needs to manipulate very large data sets with C# arrays.

    To use this feature, you must configure Mono with --enable-big-arrays.

    DTrace Support

    On MacOS and Solaris Mono supports DTrace probes.

    To use this feature, you must configure mono with --enable-dtrace.


    Several changes to improve the scaling and performance of both ASP.NET and ADO.NET (Christian, Gonzalo, Marek, Varadhan).

    Increased performance is now available if you use the option MONO_DEBUG=dont-free-domains option on ASP.NET sites.


    Windows.Forms now supports international keyboard input through XIM. This new support has been tested with both scim-anthy and Atok X3 (iiimx).


    Monodoc now supports extension methods and will display links to applicable extension methods from a type's Members page. Extension methods are displayed from all documentation sources registered with monodoc.

    The monodoc command line tools (e.g. mdassembler, monodocer, monodocs2html, and monodocs2slashdoc) have been wrapped into a single mdoc program to normalize and simplify usage.

    Installing Mono 2.0

    Binary Packages and Source Code Downloads:

    Source code and pre-compiled packages for Linux, Solaris, MacOS X and Windows is available from our web site from the download section.

    Quick source code installation:

    If we have no packages for your platform, installing from source code is very simple.

    Compile libgdiplus to support System.Drawing:

        $ tar xzf libgdiplus-2.0.tar.gz
        $ cd libgdiplus-2.0
        $ ./configure
        $ make
        $ make install

    Then compile Mono itself:

        $ tar xzf mono-2.0.tar.gz
        $ cd mono-2.0
        $ ./configure
        $ make
        $ make install

    Contributors to Mono 2.0

    These are the SVN commiters to this release:

    Aaron Bockover, Adar Wesley, Alan McGovern, Alejandro Serrano, Alexander Olk, Alexandre Gomes, Allan Hsu, Alp Toker, Andreas Faerber, Andreas Nahr, Andreia Gaita, Andres Aragoneses, Andrew Jorgensen, Andrew Skiba, Andy Henderson, Ankit Jain, Antonello Provenzano, Antti Oja, Arina Itkes, Atsushi Enomoto, Ben Motmans, Bill Holmes, Boris Kirzner, Brad Taylor, Brian Merrell, Brian Nickel, C.J. Collier, Calen Chen, Calvin Gaisford, Carlos Alberto Cortes, Cesar Octavio Lopez Nataren, Chris Toshok, Daniel Morgan, Daniel Nauck, David Elkin, David Hudson, David Makovski, Dean Brettle, Dick Porter, Duncan Mak, Eric Butler, Everaldo Canuto, Eyal Alaluf, Federico Di Gregorio, Fernando Herrera, Francisco Figueiredo Jr., Francisco T. Martinez, Gabriel Burt, Geoff Norton, George Giolfan, Gert Driesen, Gideon de Swardt, Gonzalo Paniagua, Guy Cohen, Hagit Yidov, Hector E. Gomez Morales, Hisham Mardam Bey, Igor Zalmanovich, Ilya Kharmatsky, Ivan N. Zlatev, Jackson Harper, Jacob Ilsø Christensen, James Willcox, Jared Hendry, Jb Evain, Jeff Stedfast, Joe Shaw, Joel Reed, Jonathan Pobst, Jonathan Pryor, Jonathan S. Chambers, Jordi Mas, Joseph Hill, Joshua Tauberer, Juraj Skripsky, Justin Cherniak, Karthik Kailash, Konstantin Triger, Kornél Pál, Larry Ewing, Laurent Debacker, Leonid Freydeovich, Leszek Ciesielski, Levi Bard, Lluis Sanchez, Luke Page, Manuel Alejandro Cerón Estrada, Marc Christensen, Marcos Cobena, Marcos Marin, Marek Habersack, Marek Safar, Marek Sieradzki, Mario Carrion, Mario Sopena Novales, Mark E Mason, Mark Probst, Mart Roosmaa, Martin Baulig, Massimiliano Mantione, Matej Urbas, Merav Soudri, Michael Hutchinson, Michal Dominik, Miguel de Icaza, Mike Gorse, Mike Kestner, Mike Krüger, Mirco Bauer, Mitchell Wheeler, Moty Mondiano, Nachiappan Palaniappan, Nagappan Alagappan, Neale Ferguson, Nestor Salceda, Neville Gao, Nick Granado, Noam Lampert, Paolo Molaro, Pedro Martinez, Peter Johanson, Peter Williams, R. Tyler Ballance, Radek Doulik, Rafael Mizrahi, Rafael Teixeira, Raja R Harinath, Ray Wang, Rob Loach, Robert Jordan, Rodrigo B. de Oliveira, Rodrigo Kumpera, Roei Erez, Rolf Bjarne Kvinge, Rusty Howell, Sandy Armstrong, Sasha Kogan, Scott Ellington, Scott Peterson, Sebastien Pouliot, Stephane Delcroix, Stephen Shaw, Tal Klar, Thomas Vanmachelen, Thomas Wiest, Todd Schavey, Veerapuram Varadhan, Vladimir Krasnov, Vladislav Spivak, Wade Berrier, Yaacov Akiba Slama, Yoni Klain, Zac Bowling, Zach Lute, Zoltan Varga and Olivier Dufour.

    We apologize in advance if the list is incomplete and your contribution is not listed. Please email any corrections.

    These are the contributors that sent patches: