Mono 1.1.18 Release

Mono was branched at version 1.1.13 to become the stable version of Mono that is distributed by Novell on its enterprise products. That series of releases are only getting bug fixes.

Before each release we run all of the regression tests on Mono, so we consider this release usable for deployment, but there are still a few changes in various areas.

All of the changes since 1.0 are documented in the following release notes: 1.1.1, 1.1.2, 1.1.3, 1.1.4, 1.1.5, 1.1.6, 1.1.7, 1.1.8, 1.1.9, 1.1.10, 1.1.13, 1.1.14, 1.1.15, 1.1.16 and 1.1.17.

This release is mostly a bug-fix release, there are very few new developments.

Changes since Mono 1.1.17

Runtime and C# will now correctly list all generic interfaces implemented by a given method; This fixes several bugs in the C# generics support as well as in the class libraries [Martin Baulig]

New IO Portability Layer

This release includes Dick’s Porter portability layer into Mono that will address those problems without requiring changes to your code. This will remove a large component of the porting cycle as a whole class of obnoxious problems are gone.

The new portability framework is enabled by setting the environment variable MONO_IOMAP (which we will likely rename to something shorter) to one of the following values:

  • case: makes all file system access case insensitive.
  • drive: strips drive name from pathnames.
  • all: enables both case and drive.

In addition, if any of those options are enabled, the directory separator mapping is also turned on. So this basically means that you have to type this, or include this in your script that launches your application:

export MONO_IOMAP=all
mono myapp.exe

For ASP.NET applications hosted with mod_mono, you can add the following directive to your Apache configuration file:

MonoSetEnv MONO_IOMAP=all

Security

Major speed improvements (as much as 10x) for Rijndael [Kazuki Oikawa];

SSL/TLS can now renegotiate security parameters during an existing session [Sebastien Pouliot]

SSL/TLS optimizations by reducing memory allocations, creating less objects, like streams (in general) and transforms (while encrypting) for block ciphers. It now only allocates one third of the memory it used to allocate, which has a nice performance side effect [Sebastien Pouliot]

HTTPS session now honor ServicePointManager.SecurityProtocol to control SSLv3 and/or TLSv1 sessions. [Sebastien Pouliot]

Couple of bug fixes to XML Signature and XML Encryption [Gert Driesen, Atsushi Enomoto]

Mono Documentation

MonoDoc now has generics support and will display generic types [Jonathan Pryor] and now documents custom attributes with their actual constructor calls, and monodocs2html now includes inherited members on type pages [Joshua Tauberer].

Windows.Forms update

There have been over 100 bugs fixed in Windows.Forms and System.Drawing by the Winforms team and Mono contributors.

2.0 ToolStrip and FlowLayout from Jonathan Pobst.

Plenty of stability work on Windows.Forms, some of the changes include:

  • TextBox (jackson, eno)
  • FileDialog (alex)
  • PropertyGrid (jchambers, various others)
  • ListView (mkestner, Gert)
  • DataGrid (toshok)
  • NotifyIcon (jackson, toshok)
  • MDI (jackson)
  • Focus (jackson, andreia)
  • Splitter (toshok)
  • TreeView (jackson)
  • WM styles (toshok)
  • ComboBox (mkestner)

Printing support in System.Drawing [Jordi Mas]

Support for the #- heap

The #- heap is a heap used for “incremental” builds in Visual Studio and its usually only used with debugging builds. In the past Mono has not been able to cope with binaries that had this table.

Zoltan implemented the support for this feature, which means that it is no longer necessary to tell developers to rebuild their software without the incremental flag.

Also, some compilers did not offer the option to create regular executables (ISE Eiffel for example), so this feature will allow these applications to run on Mono unmodified.

This is one of the oldest bugs in Mono (#38532).

ServiceProcess

An implementation of the ServiceProcess APIs for Win32, previously we only had this available on Linux [Gert Driesen].

Platform Support

Updated Alpha port, it is now able to bootstrap itself, but there are still known limitations in the port. The port is now considered a beta port. [Sergey Tikhonov]

Initial support for the new ABI on the Nokia 770 for floating point operations (This is still a work in progress) as well as various fixes for better supporting the ARM processors as well as the long standing exception bugs . [Paolo Molaro].

Tuning

Reduced the size of our string collation tables [Paolo Molaro].

Improved the performance of Rijndael encryption from 2Mb/s to 21.9Mb/s (in our measures its 2.89 to 12.99 speed increase depending on key size) [Kazuki Oikawa].

We identified a poll that was being used every 100ms that is now eliminated.

Reduced runtime relocations and some internal data structures [Paolo Molaro]

5% performance increase on array creation operations [Paolo Molaro].

2.0 support

It is now possible to apply the new [SpecialName] attribute [Paolo Molaro]

ASP.NET

mod_mono fix for virtual hosts and auto-hosting [Joshua Tauberer]

Continued work on improving our ASP.NET 2.0 support, but it is still not complete, it still makes up for a large part of changes for this release [Mainsoft team, Gonzalo Paniagua, Marek Habersack]

C# Compiler

The mcs and gmcs code bases have now been unified, which will help us reduce our maintenance cost of the two compilers. Only the tokenizers and parsers remain split [Martin Baulig, Harinath Raja]

Redesign of the anonymous method and iterator infrastructure, this fixes all open anonymous methods bugs as well as countless problems that were lurking on the previous design [Martin Baulig]

Support for default(T) expressions and constant extraction for default(T) is supported, so the compiler is now able to do constant folding on these expressions [Marek].

The compiler will now detect NullReferenceException for code like this [Marek]:

void Foo (T t) where T : class
{
    System.Console.WriteLine (t.ToString ());
}

New IntPtr and UIntPtr conversions supported. These were not on the C# specification as they were intended to be explicit operator definitions on the IntPtr and UIntPtr classes but due to historical reasons (see the bug 59800 for Microsoft’s explanation) the conversions remained hard-coded into the C# compiler. MCS and GMCS now have these conversions hardcoded as well.

Tail call bug

There was a bug in tail call support that made certain constructs in F# fail, this bug has now been fixed [Zoltan].

OSX and CrashReporter

When a NullReference is caught by Mono, it will no longer trigger the CrashReporter (#74869), this bug was fixed by Robert Jordan.

A bug in the GC was fixed that caused crashes in some multi-threaded applications [Allan Hsu]

System.Drawing and GDI+

Updated libgdiplus to Cairo version 1.2.4 [Sebastien Pouliot]

First release with no unit test failures on big endian architectures (e.g. PPC and SPARC).

Extensive rendering bug fixes, parameter checks and bug fixes.

New GDB routines

New helper routines for low-level debugging with GDB to describe variables and parameters and objects in memory [Paolo Molaro].

void mono_object_describe        (MonoObject *obj);
void mono_object_describe_fields (MonoObject *obj);
void mono_value_describe_fields  (MonoClass* klass, const char* addr);
void mono_class_describe_statics (MonoClass* klass);
void mono_debug_print_vars       (gpointer ip, gboolean only_arguments);

Use mono_object_describe to get a small description of the object obj.

Use mono_object_describe_fields to get a small description of all the fields on the given object.

Use mono_value_describe_fields to prints to stdout a small description of each field of the value type stored at @addr of type @klass.

Use mono_class_describe_statics to prints to stdout a small description of each static field of the type @klass in the current application domain.

Use mono_debug_print_vars to prints to stdout the information about the local variables in a method (if @only_arguments is false) or about the arguments.

The information includes the storage info (where the variable lives, in a register or in memory). The method is found by looking up what method has been emitted at the instruction address @ip.

A sample session is:

(gdb) r --debug --break 'System.Buffer:BlockCopy' tests/console.exe
We can now write to the console
Program received signal SIGTRAP, Trace/breakpoint trap.
[Switching to Thread -1210435904 (LWP 634)]
0xb7a2b97f in ?? ()

(gdb) call mono_pmip ($eip)
$1 = 0x8279750 " System.Buffer:BlockCopy (System.Array,int,System.Array,int,int)
    + 0x17 (0xb7a04968 0xb7a04b93) [0x21f00 - console.exe]"

(gdb) call mono_debug_print_vars ($eip, 1)
Arg src (0) in memory: base register %ebp + 8
Arg srcOffset (1) in memory: base register %ebp + 12
Arg dest (2) in register %ebx
Arg destOffset (3) in register %esi
Arg count (4) in register %edi

(gdb) call mono_object_describe (*(char**)($ebp+8))
System.Char[] at 0x43e58, rank: 1, length: 1

(gdb) call mono_object_describe ($ebx)
System.Char[] at 0x55000, rank: 1, length: 1024

Debugger Binary Symbol Store

A contribution from Joachim Ante, allows debugging information to be embedded in a binary instead of having to load it from a separate file.

Ahead-of-Time Compilation

AOT compilation on selected platforms no longer requires the operating system assemblers and linkers, Mono will now generate native shared libraries on its own [Paolo Molaro].

Source Code

The source code in Mono has been converted to UTF-8, it is no longer locale-dependent (it used to be for the most part in Latin-1 encoding) [Kornel Pal]

P/Invoke, new features

It is now possible to apply P/Invoke remapping features based on the architecture and the operating system, this allows developers to ship a single .config file for mapping to different library names on different operating systems.

For examples and more information see the DllMap documentation and the sample usage.

Mono.Posix

Drop bindings for crypt(3), encrypt(3), setkey(3). These use an encryption algorithm which was broken years ago and could be cracked in minutes on a modern machine. This also removes a libcrypt.so dependency, which means you don’t need to have development packages installed to use these either (since “crypt” wasn’t ‘d). These are still present, but marked [Obsolete] and throw a SecurityException when invoked.

Generics

Array and other special classes properly expose the virtual methods that they implement. This was originally exposed by the Visual Basic.NET compiler.

Console

Update the Console to better track the state of the screen, but it still is known to contain a few bugs, the console is also hooked up to some internal streams (to allow users that were manipulating the streams directly to use it) [Gonzalo Paniagua].

The updated Console will no longer throw an exception if its output is redirected.

Tools

The mkbundle tool (used to generate self-contained executables) now supports compressed images (-z) on Windows as well [Robert Jordan]

New mget testing tool for testing HTTPS downloads with TLS/TLS certificates and SSLv3 and TLSv2 protocols.

OracleClient

Leszek Ciesielski integrated the test suite for the OracleClient database library and has contributed various bug fixes for problems reported.

Visual Basic Runtime

Many bug fixes and improvements to the new Visual Basic runtime [Rafael Mizrahi, Kornel Pal, Miguel de Icaza]

Integrated old VB tests into the new implementation [Rafael Mizrahi].

Windows Support

The Registry API will now support Remote keys [Gert Driesen]

Installing Mono 1.1.18

./configure --prefix=/devel

You can then setup your PATH to include /devel/bin to access the Mono 1.1. Alternatively you can replace your Mono installation with 1.1.18

Binary Packages and Source Code Downloads:

Source code and pre-compiled packages for SUSE, SLES, Fedora Core 3, 4, 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.

mono:

tar xzf mono-1.1.18.tar.gz
cd mono-1.1.18
./configure
make
make install

Then compile libgdiplus:

tar xzf libgdiplus-1.1.18.tar.gz
cd libgdiplus-1.1.18
./configure
make
make install

Contributors

The following is a partial list of contributors to the 1.1.18 release of Mono, if your name is missing, please contact us.

Aaron Bockover, Adrian Johnson, Alexander Olk, Alexandre Miguel Pedro Gomes, Alp Toker, Andreia Gaita, Andrew Skiba, Ankit Jain, Atsushi Enomoto, Ben Maurer, Boris Kirzner, Carlos Alberto Cortez, Carl Worth, César Octavio López Natarén, Chris Toshok, Dean Brettle, Dick Porter, Duncan Mak, Eyal Alalouf, Francisco Figueiredo Jr., Geoff Norton, Gert Driesen, Gonzalo Paniagua Javier, Hagit Yidov, Hubert FONGARNAND, Igor Zelmanovich, Jackson Harper, Jakub Boqusz, Jb Evain, Joachim Ante, John Luke, Jonathan Chambers, Jonathan Gilbert, Jonathan Pobst, Jonathan Pryor, Joost Evertse, Jordi Mas, Joshua Tauberer, Juraj Skripsky, Kazuki Oikawa, Klain Yoni, Konstantin Triger, Kornél Pál, Leszek Ciesielski, Lluis Sanchez Gual, Marek Habersack, Marek Safar, Marek Sieradzki, Martin Baulig, Mart Roosmaa, Matt Hargett, Merav Sudri, Miguel de Icaza, Mike Kestner, Nagappan A, Neale Ferguson, Paolo Molaro, Peter Dennis Bartok, Rafael Mizrahi, Rafael Teixeira, Raja R Harinath, Ricardo Fernandez Pascual, Robert Jordan, Roei Erez, Rolf Bjarne Kvinge, Sebastien Pouliot, Senganal T, Sergey Tikhonov, Tal Klahr, Todd Berman, Vladimir Krasnov, Wade Berrier, Yoni Klain, Zoltan Varga,