Mono 1.1.10 Release

We consider Mono 1.1.10 stable to recommend it for all users. Those upgrading from the 1.0.x series should note that these notes only contain the differences between 1.1.9 and 1.1.10. 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 and 1.1.9.

What is new in Mono 1.1.10

mod_mono Auto-Configuration

Mod_mono, the apache module for providing ASP.NET support has historically been difficult to configure and it required system administrators to manually register all the directories that contained an ASP.NET application. This was troublesome for many and also stopped mod_mono from being adopted for multi-user systems.

mod_mono 1.1.10 features a new auto-configuration system which allows ASP.NET applications to work without having to make any configuration changes to Apache.

The experience of the new auto-configuration system is similar to PHP: any file that has one of the ASP.NET extensions will automatically be handled by Mono.

The feature can be turned off if desired, see our documentation page for more details.

mod_mono and virtual hosts

Mod_mono now works correctly with virtual hosts, and it is possible to use the mod_mono control panel to restart individual servers.

Windows.Forms

Control drawing performance improved (background drawing handling).

libgdiplus now support turning off anti-aliasing.

Drag and Drop for X11 has been implemented.

Support for auto-sizing is implemented.

Menu improvements on X11.

Extensive bug fixes.

Kornél reimplemented the ImageList control.

DataGridView widget for 2.x: by Pedro Martínez Julia, made possible by the Google Summer of Code and Jordi which acted as the mentor.

Code Access Security

System.Drawing doesn’t require permissions to call unmanaged code to work (big speedup when running with the security manager active).

Many CAS permissions (and tests) were added for System.dll and System.Webdll (work in progress);

Class library / Security

ProtectedData is now working under Mono. It use a managed implementation on Linux/POSIX and native DAPI (p/invoke) on Windows (requires Windows 2000);

ProtectedMemory is working on Windows (requires Windows 2000 SP3 or later);

MozRoots

MozRoots is a new command-line tool to download and import the list of Mozilla’s trusted root certificates into Mono’s trust store.

Mono by default does not have any root certificates on its certificate store and it is up to each deployment to add the certificates that they trust to the store. This has caused some confussion with people using TLS and SSL with Mono. The MozRoots tool makes it simple to import a set of root certificates from Mozilla into the Mono store.

Security Tools

sn: assemblies can now be signed with RSA key pairs ranging from 384 to 16384 bits;

XSP

Sebastien added support to XSP for PKCS#12 private key/certificates;

JavaScript compiler

From Cesar and Florian:

Compiler: added support for: multiple file compilation and import statement.

Run-time: Florian Gross added support for performing late binding operations in System.Object derived objects.

Status 6981 successful tests out of 7229 from Mozilla’s test suite.

ASP.NET

Completed ViewState MAC, a cryptographic checksum to prevent tampering with the view state.

Input/output filtering works again.

Many bug fixes and performance improvements are available in this version thanks to Gonzalo.

LDAP

  • Changes in Connection.cs regarding appropriate handling in method ServerCertificateValidation.
  • Added support for error code 113 SSL_HANDSHAKE_FAILED.
  • Added two files ResultCodeMessages.txt and ExceptionMessages.txt in Novell.Directory.Ldap.Utilclass
  • Added support for subordinate subtree scope.
  • Removed hard coded dependency on Mono Security
  • Fix for a race condition in Connection.cs
  • Updated with support for Interactiveness of SSL Handshake, Ldap Events, Edir Events, Intermediate Response
  • Connection.cs class is modified by synchronizing the stream threads so as to avoid the memory consumption and handle consumption.
  • Changed version from 2.1.1 to 2.1.4 in Connection.cs.
  • Updated ChangeLog so that latest changes are on the top.

Mono.Posix assembly

Filenames exported from Mono.Unix and Mono.Unix.Native may be in a special UnixEncoding format so that arbitrary filenames may be accessed (i.e. filenames outside of UTF-8 or the MONO_EXTERNAL_ENCODINGS value). See the post “Mono.Unix Filename Marshalling”

The Mono.Unix namespace is being reorganized for easier maintenance, easier documentation, and CLS compliance. The low-level Syscall and Stdlib and related types will move into the Mono.Unix.Native namespace. The UnixConvert, UnixDirectory, UnixFile, UnixGroup, and UnixUser classes are obsolete and will be removed in a future release. The types of existing members will change in the next release.

This release is still 100% compatible with previous releases. Impacted members have been marked [Obsolete] with messages to indicate the replacement method. The next release will be an API break (changing the return type of effected properties & methods), and obsolete types will be removed in the following release.

Mono.Unix is targeting API stability for 1.2. If you have any suggestions for improvement, I would love to hear them.

See also: “Mono.Unix Reorganization” and “Mono.Unix Future Directions, Questions”

MonoDoc

Rafael contributed a hierarchical storage for bookmarks to the Monodoc GUI browser.

GtkHTML# is now an optional dependency as well as GeckoSharp.

Relocatable

Mono is now relocatable. This means that a Mono package or RPM can be relocated to any directory and will continue to work. This works on Linux systems and Solaris 10.

Important: If you embed Mono, you must now call the can call instead mono_assembly_setrootdir($libdir) and mono_set_config_dir ($sysconfdir) to set the library directory and the system configuration directories.

Cairo bindings

Idan contributed some large changes to Mono.Cairo to polish the API:

Matrix:

  • Removed Matrix_T struct and associated properties,
  • Added ==, != operators
  • Implemented ICloneable
  • Overrode Equals, GetHashcode, ToString
  • Made constructors a little simpler, New matrices are constructed as the identity matrix.
  • Added IsIdentity
  • Fiddled a bit with Multiply, now there is void Multiply (Matrix b) – multiplies this matrix by b static Matrix Multiply (Matrix a, Matrix b) – multiplies a by b and returns the result.
  • Threw out all references to “Identify”, it’s the “Identity”.

CairoAPI: fix out/ref issues (it was previously segfaulting).

Graphics:

  • convert [Inverse]Transform(Point/Distance) properties to methods so you can transform arbitrary points/distances.
  • Added Transform (Matrix m)
  • Fixed Matrix {get; set;} to use updated CairoAPI.
  • Fixed FontSetMatrix (this should be made into a property for consistency)

C# compiler

The default encoding for the compiler has changed from the hardcoded ISO-28591 to be the default encoding used in your system. This will help developers compile code that was written in the editor they are using.

The last two features of C# 2.0 have been completed by Carlos Alberto: Friend Assemblies and External Alias qualifiers.

We are only missing the late semantics changes that were introduced for nullable types and boxing in C# for a fully compatible implementation.

.NET 2.x updates

Chris Toshok continues to work on the System.Configuration framework for ASP.NET 2.x on which many of the new features are built.

Roozbeh Pournader contributed a PersianCalendar implementation. Roozbeh described the Persian calendar to Microsoft originally so we have a very good implementation.

Our Calendars now support half of the new 2.x features.

Atsushi updated parts of System.XML method signatures to match RTM.

Various Changes

Support for contravariant and covariant delegates in the System.Delegate class for 2.x operations.

Updated ICSharpCode.SharpZipLib to the latest version.

Runtime will no longer turn segfaults in unmanaged code into a NullReferenceException. Now faults in unmanaged code will abort the program execution and display the stack trace (managed/unmanaged). This was useful to uncover a number of real bugs in a few applications and some of our own libraries.

Performance, Memory Usage

Our quest to reduce memory consumption continues. Thanks to Jon Trowbridge for implementing a new heap profiler (the heap-buddy module on git) which has helped tremendously in identifying the fat in the class libraries and spots for easy optimization.

Some areas that received attention: StreamReader.ReadLine is much more efficient memory-wise.

Zoltan implemented a feature to track the page access to the executable images. Which was used by Zoltan and Ben to reduce the number of page faults required to run an application (AOT and regular uses). Paolo reduced the amount of memory used by our internal data structures.

In this release region-locking of files has been turned off by default which will improve IO for some applications, it can be turned on by setting the MONO_STRICT_IO_EMULATION variable.

A new profiler: `mono-profiler-aot’ has been created that tracks the usage patterns for executables. The output of this profile can be fed back into Mono’s AOT compiler to order the functions on the disk to produce precompiled images that have methods in sequential pages.

Zoltan implemented frame pointer elimination on x86-64 platforms.

Patrik Torstensson and Zoltan improved the performance of methods with exception clauses when the exception object is not used (Bug #62150).

Patrik ported the mul_imm optimizations from the old JIT engine to mini.

Ben optimized DateTime parsing.

Installing Mono 1.1.10

Important: Mono 1.1.10 can not be installed in parallel with Mono 1.0.x series on the same prefix. To work around this issue, you must use a different prefix at configure time, for example:

./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.10

Source Code and Binary Packages:

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.10.tar.gz
cd mono-1.1.10
./configure
make
make install

Then compile libgdiplus:

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

Contributors to Mono 1.1.10

Based on the ChangeLogs 91 developers contributed code to this release.

Zoltan Varga, Yaacov Akiba Slama, Wade Berrier, Vladimir Vukicevic, Vladimir Krasnov, T senganal, Tomas Kukol Todd Berman, Tobias Käs, The Software Team (software@solmersa.com), Tambet Ingo, Svetlana Zholkovsky, Suresh Thangavel, Sebastien (shoehn@web.de), Sebastien Pouliot, Roozbeh Pournader, Robert Jordan, Ritvik Mayank, Ray Molenkamp, Raphael Slinckx, Raja R Harinath, Rafael Teixeira, Rafael Ferreira, Peter Williams, Peter Johanson, Peter Dennis Bartok, Paolo Molaro, Palaniappan, Mike Welham, Mike Kestner, Miguel de Icaza, Michal Moskal, Michael Hutchinson, Mart Roosmaa, Martin Baulig, Mario Sopena Novales, Marek Sieradzki, Marek Safar, Marc Haisenko, Maksim Vorobiev, Lluis Sanchez, Kornél Pál, Konstantin Triger, Kazuki Oikawa, Juraj Skripsky, Joshua Tauberer, Jordi Mas, Jon Trowbridge, Jonathan S. Chambers, Jonathan Pryor, Jonathan Gilbert, John Luke, Joe Shaw, Jeroen Zwartepoorte, Jb Evain, James Willcox, Jaen Saul, Jackson Harper, Idan Gazit, Iain McCoy, Hisham Mardam Bey, Haakon Nilsen, Gonzalo Paniagua, Gert Driesen, Geoff Norton, Francisco T. Martinez, Florian Gross, Eyal Alaluf, Everaldo Canuto, Erik Dasque, Eric Butler, Duncan Mak, Dick Porter, David Hudson, Dan Winship, Chris Toshok, Christian Hergert, Chris Micacchi, Cesar Octavio Lopez Nataren, Carlos Guzmán, Carlos Alberto Cortes, Brion Vibber, Boris Kirzner, Blagovest Dachev, Ben Maurer, Atsushi Enomoto, Ankit Jain, Andrew Skiba, Alexandre Rocha Lima e Marcondes, Alexandre Gomes and Alexander Olk