Release Notes Mono 2.0

Table of contents

Mono 2.0 Release Notes

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

Release Date: October 6th, 2008

Major Highlights

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

Microsoft Compatible APIs

  • ADO.NET 2.0 API for accessing databases.
  • ASP.NET 2.0 API for developing Web-based applications.
  • Windows.Forms 2.0 API to create desktop applications.
  • System.XML 2.0: An API to manipulate XML documents.
  • System.Core: Provides support for the Language Integrated Query (LINQ).
  • System.Xml.Linq: Provides a LINQ provider for XML.
  • System.Drawing 2.0 API: A portable graphics rendering API.

Mono APIs

  • Gtk# 2.12: A binding to the Gtk+ 2.12 and GNOME libraries for creating desktop applications on Linux, Windows and MacOS X.
  • Mono.Cecil: A library to manipulate ECMA CLI files (the native format used for executables and libraries).
  • Mono.Cairo: A binding to the Cairo Graphics library to produce 2D graphics and render them into a variety of forms (images, windows, postscript and PDF).
  • Mono's SQLite support: a library to create and consume databases created with SQLite.
  • Mono.Posix: a library to access Linux and Unix specific functionality from your managed application. With both a low-level interface as well as higher level interfaces.

Third Party APIs bundled with Mono

  • Extensive support for databases: PostgreSQL, DB2, Oracle, Sybase, SQL server, SQLite and Firebird.
  • C5 Generics Library: we are bundling the C5 generics collection class library as part of Mono.

Compilers

These compilers are part of the Mono 2.0 release:

  • C# 3.0 compiler implementation, with full support for LINQ.
  • Visual Basic 8 compiler.
  • IL assembler and disassembler and the development toolchain required to create libraries and applications.

Tools

Mono includes profiling tools, the standard development kit tools that are part of the .NET framework

  • Debugger: this is the first release when we support a debugger for managed code.
  • Gendarme: is an extensible rule-based tool to find problems in .NET applications and libraries. Gendarme inspects programs and libraries that contain code in ECMA CIL format (Mono and .NET) and looks for common problems with the code, problems that compiler do not typically check or have not historically checked.
  • Mono Linker: a linker that allows developers to reduce the size of their executables and libraries by removing features from libraries using an XML definition of the desired public API.
  • Mono Tuner: a tool to apply arbitrary user-defined transformations to assemblies. Mono uses this library to produce the Silverlight core libraries from the main system libraries.
  • Mono Documentation Tools: the Mono Documentation framework has been upgraded to support documenting generics and extension methods. The tools can be used to produce online and offline documentation for any any APIs, and are used by the project to document our own APIs.

License

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

More Detail

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!)

Notepad.png

DataGridView

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.

  • Much better rendering
  • Table/Cell styles
  • Column sorting
  • Full row/column selection
  • Row/column hide supported

Datagridview.png

WebBrowser

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

Ieclone.png

TableLayoutPanel

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

Tablelayoutpanel.png

FlowLayoutPanel

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

Flow1.jpg

Flow2.jpg

SplitContainer

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

Splitcontainer.png

Windows.Forms: Putting it all together

Some examples of public 2.0 applications running on Mono 2.0.


Paint.Net

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.

Monopaint.png

NClass

NClass is a UML modeling application written in C#.

Nclass.png

Changes Since 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 (http://dolt.freedesktop.org/) 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.

Gendarme

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 versionshipped 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

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, details about this feature are available on the DTrace page.

ASP.NET and ADO.NET

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

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

Monodoc

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 Downloads 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

These are the SVN commiters to the Mono 2.0 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 miguel@novell.com any corrections.

These are the contributors that sent patches: