Mono 1.2.5 Release, 2007

Mono 1.2.5 is an update to Mono 1.2.4 in the Mono 1.2 series, it is a bug fix release for all the supported components, but also includes updates on the 2.0 stack.

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

New in Mono 1.2.5

Some statistics:

Dynamic Language Runtime

This release fixes various issues that were exposed by IronPython 2.0 preview release and the Dynamic Language Runtime from Microsoft. They are both functional on this release.

C# Compiler

Scott Petterson and Marek Safar implemented the following C# 3.0 features:

Marek Safar continued work on the LINQ grammar support and the underlying System.Core assembly support for it.

The C# 3.0 support is enabled by passing the -langversion:linq option to the compiler. In addition to the above the C# 3.0 compiler also supports: extension methods, lambdas and anonymous method generic type inference.


AOT now provides some support for 2.0 assemblies (although generic calls are still not pre-compiled) [Zoltan].

Devirtualization optimization for sealed classes and methods, improving IronPython 2.0 pystone performance by 4%. Other programs can expect similar improvement [Rodrigo].

Invocation speed of non-multicast delegate methods has been increased by calling directly into the delegate, this improves IronPython 2.0 (pystone) performance by 25% [Zoltan Varga].

Math.Min and Math.Max are now inlined for signed integers and String.OrdinalCompare has been tuned to use these, which results in a 2-3% performance increase in running PyStone with IronPython.

Massi and Paolo implemented a mechanism that reduces virtual table sizes for interface method invocations. The most visible change is in significant memory reduction for applications loading many interfaces (this happens for many 2.0 apps because of the many additional interfaces arrays implement).

Optimized double to int conversions using SSE2 on x86 [Paolo Molaro].

Implemented proper caching of generic methods (provides a very large speedup for virtual generic method invocations) [Paolo Molaro].

It is now possible to force Mono to use a single CPU by using the MONO_NO_SMP flag.


Rodrigo Kumpera has added an IL verifier to Mono. IL verifiers are not very useful for applications that run at full-trust level (their only use is to help in compiler development and sanity checking). But we are now working towards supporting Silverlight in Mono which needs to provide limitations on what code can do, and cope with malicious code.

HttpWebRequest can now be used with X.509 client certificates (only possible in the 2.0 profile) [Sebastien]

Added support X.509 Client Certificate Chains for SSL/TLS [Roy Versteeg]

Fixed SSL/TLS not to require exportable private keys for client certificates [Roy Versteeg]

Implemented import and export of DSA keys CryptoAPI-compatible BLOB (2.0) [Randolph Chung]

Added SafeBag handling to Mono.Security's PKCS#12 [Jay Miller]


Completed support for RegionInfo.

Dictionary: Optimize and add implementation notes. Use a "mini-heap" to store the linked lists instead of the regular heap. Split arrays of structs into separate arrays to make the GC's life simpler (see bug 81879 for details). Make class serialization compatible with MS.NET.

Environment.GetFolderPath: Now checks for the existance of the XDG_DESKTOP_DIR, XDG_MUSIC_DIR and XDG_PICTURES_DIR environment variables when trying to find the requested path.


LocalFileSettingsProvider implementation is contributed [Noriaki Okimoto]. With this code, ApplicationSettingsBase now works like .NET (per-user settings are created in the user's (local) application data directory.


Fresh implementation of TimeZoneInfo [Stephane Delcroix].


System.Data.SqlClient: 99% of API's is now compatible with MS.NET 2.0 profile [Nagappan]

Implemented SqlBulkCopy in SqlClient. With this the data can be imported in bulk from client to MS-SQL server [Nagappan].


New 2.0 controls:

  • MaskedTextBox implementation [Rolf Bjarne].
  • BindingNavigator [Alan, Olivier]
  • 2.0 version of many controls are now complete.

    AutoSize is now supported [Jonathan]

    ToolStripPainter, ToolStripSystemRenderer [Jonathan Pobst]

    Roughly 150 submitted bugs were resolved.

    System.Drawing / Libgdiplus

    Libgdiplus has been updated to use Cairo 1.4.6 [Sebastien]

    Libgdiplus header, types and enums names are now much closer to MS GDI+. This should make it easier to use from C/C++ even if this was not the primary goal. [Sebastien, Yves Bastide]

    Added support for 2bpp PNG and fixes for 4bpp PNG image palettes [Sebastien]

    Added support for interlaced GIF bitmaps [Sebastien]

    Added support for ColorMatrixFlag and Gray ColorMatrix in ImageAttributes [Sebastien]

    Implemented GdipDrawImagePointsRect[I] functions [Sebastien]

    Multiple printing fixes (e.g. text size/position) [Vladimir Dimitrov, Sebastien]


    The Mono Cairo API has been updated (Alp Toker), it will now expose Cairo 1.2 API entry points. Application code should call CairoAPI.Version to obtain the version and determine if the needed features are available.

    Visual Basic.NET

    Added support for late binding in vbnc (Option Strict Off and Option Explicit Off) [Rolf Bjarne].

    Several bug fixes in vbnc and vbruntime [Rolf Bjarne].

    Better error reporting (it's now possible to get line numbers in stack traces) [Rolf Bjarne].


    New contributors to this release: Mike Morano, Stephen A. Jazdzewski, Sanghyeon Seo, Juraj Skripsky, Jason Madden,

    Installing Mono 1.2.5

    	$ ./configure --prefix=/devel

    Binary Packages and Source Code Downloads:

    Source code and pre-compiled packages for SUSE, SLES, Fedora Core 3, 4, Solaris, RHEL, MacOS and Windows in a variety of platforms 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.


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

    Then compile libgdiplus:

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