Mono 1.1.9 Release

We consider Mono 1.1.9 stable enough 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.8 and 1.1.9. 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.

New Ports

Zoltan completed the IA64 (Itanium) port of Mono. The Itanium port is a full 64 bit port of the Mono JIT compiler.

Paolo completed the ARM port of Mono, it works on little endian and big endian ARM systems.

Dick added support for 64 bit thread ids to the io-layer.

Mono can run the IronPython test suite

Runtime

Carlos implemented publisher policies

The generics code performance was largely improved by Michal Moskal and various bugs in the implementation have been fixed thanks to the Nemerle Programming Language team that is making extensive use of it.

Iron Python 0.9 works as well as all of its regression tests (Zoltan and Martin). Notice that the IronPython regression tests need various Makefile fixes and some symlinks to cope with filename casing to work.

David Waite contributed LinkedList<T> implementation.

GDI+

Hisham, Jordi and Peter have adapted GDI+ to use Cairo 1.0 instead of Cairo 0.3 which we were previously using. This upgraded version of GDI+ is much faster and Windows.Forms application feel faster and smoother on Linux as a result.

As part of this upgrade numerous bugs were fixed and memory management was audited by Jordi and Peter to eliminate memory leaks.

Rectangle drawing operations are faster by 30% now, blitting large images is 50% faster.

There are now 500 nunit tests for the library and many new contributions from Mainsoft.

Winforms progress

Alexander Olk contributed a new theme, the “nice” theme, a screenshot can be seen here.

The first version of RichTextBox from Peter debuts in this release and includes an RTF parser.

More news on Winforms development are here.

Globalization/Internationalization: String Collation

We have a completely new reimplementation of the CompareInfo infrastructure in this release of Mono, a managed implementation of string collation that is compatible with Windows collation.

Atsushi Enomoto worked on this project for the past four months before we merged it on this release. Currently the code has to be turned on by setting the MONO_USE_MANAGED_COLLATION environment variable to “yes”

In the past we had used ICU but this approach had two problems: the code lived in the C world and the cost of transitioning from managed to unmanaged code for string collation was fairly high.

ICU also implemented different semantics than those exposed by .NET and a mapping of one system into the other was not really possible.

Globalization/Internationalization: Region information

Atsushi has also contributed a new framework and updated the RegionInfo information.

Encodings: Two new encodings are implemented: GB18030 and iso-2022-jp.

ADO.NET

Suresh deployed a new NUnit and Mono.Data-based testing framework for the System.Data namespace.

Suresh implemented OdbcCommandBuilder and fixed various bugs in System.Data.Odbc and SqlClient Providers.

Dan implemented OracleCommandBulder based on SqlCommandBulder so you can do inserts, updates, deletes in a DataTable without having to create the SQL to do the inserts, updates, and deletes as well as adding support for OUTPUT parameters and the TIMESTAMP Oracle 9i data type.

implemented a quick-and-dirty way to get primary key info and table info (Schema Info support in OracleDataReader) neccessary to support OracleCommandBulder

Dan implemented SybaseCommandBuilder; however, it does not work since the SybaseDataReader needs to have SchemaInfo command behavior implemented

Fixes to SqlCommandBuilder to get updates to work based on what Suresh did

Mono.Data.Sqlite

Thomas Zoechling, Jeroen Zwartepoorte and Dan Morgan created various bugfixes and a patch to add named parameters.

Joshua made it so several commands can be executed in a single invocation, instead of just the first one (semicolon delimited commands).

Assembly Version Numbers

Mono assemblies version now default to the beta version numbers (2.0.0.0 and 8.0.0.0 series, by Kornel Pal).

ASP.NET

A major rewrite to ASP.NET is now available as part of this release, the highlights of the new code include:

  • Tests: 67,700 lines of new tests:
    • NUnit test suite for about 50% of the controls.
    • Extensive standalone tests.
    • JSUnit (see section later).
  • Unmanaged I/O: the new implementation uses unmanaged buffers for uploads (HTTP POST for example) and content generation as opposed to the managed buffers that we have today, which greatly reduces the pressure on Mono’s GC and also avoids redundant copies of data by sharing buffers as much as possible improving performance.
  • Use of TCP Cork on Linux to avoid TCP glitches and delays, this reduces the latency to get a full page.
  • Support for Linux sendfile to transfer static pages (support for more platforms will come later).
  • XSP now transfers Socket ownership to the AppDomain to avoid round trips and expensive AppDomain boundary crossing increasing performance.
  • New controls: about 40% of the existing controls were rewritten from scratch with test suites to validate their output.
  • New application pipeline: a new iterators-based design reduces the complexity and increases the maintainability of the old version.
  • Support for HttpClientCertificate on XSP, soon to come to Apache.
  • Improved tracing support.
  • Latency has been reduced in various key places and the new unmanaged buffers accelerate the processing of medium and large sized pages (small pages remain about the same speed) and large uploads wont disrupt your Mono process.

The new ASP.NET stack is brought to you by Eyal Alaluf, Peter Bartok, Jackson Harper, Miguel de Icaza, Ben Maurer, Jordi Mas, Gonzalo Paniagua, Dick Porter, Sebastien Pouliot and Chris Toshok.

ASP.NET Configuration

The System.Configuration assembly has been mostly implemented and integrated into ASP.NET. Now it is possible to read web configuration files using the new configuration object model (Lluis).

XSP Web Server

XSP has been split up in two: Mono.WebServer.dll and xsp.exe. XSP only handles command line parsing and Mono.WebServer.dll is the assembly that implements the functionality.

Mono.WebServer.dll is an embeddable library that can be used to host ASP.NET in your own applications. In the past people resorted to making a replica of XSP in their applications if they wanted to host ASP.NET. This was contributed by Brian Ritchie a few months back, and its finally on the main trunk.

The Mono.WebServer.dll deployment model follows the new Guidelines for Library Deployment and there are versions available for running on the 1.x and 2.x profiles.

XSP now also takes advantage of certain Linux features like sendfile and TCP Cork to improve performance.

XSP also contains support for HTTPS connections using the –https flag by Brian Ritchie.

JScript.NET Compiler

Progress: JScript now passes 4586 tests of the Mozilla ECMAScript test suite out of 5994 (76.51%)

Cesar added various new features to the compiler:

Marek implemented JScriptCodeProvider and stubbed JScriptCodeGenerator.

Florian contributed many updates to the JScript runtime as part of his collaboration in Google’s Summer of Code project:

  • Library functions: Array.prototype, Number.prototype, String.prototype and many more.
  • Integrated the Mozilla test suite into Mono.
  • LateBinding logic including prototype chain look up.
  • Anonymous functions.
  • Decompilation of functions to their source code.
  • delete and other operators.

New: JSUnit

As part of the new ASP.NET testing framework Chris Toshok developed JSUnit: a new JavaScript unit test framework to automate running the tests for various web controls and validate that they do the right thing.

Monodoc

Monodoc now defaults to use the Mozilla rendering engine to display its values, thanks to Mario Sopena and the Google Summer of Code effort and it also uses CSS to render its pages.

Monodoc will now also show pending contributions that you might have in your file system as well as including search support.

Tools

AL (assembly linker) can now sign, and delay-sign, assemblies and makecert can now generate PKCS#12 files (Sebastien);

Code Access Security

Sebastien continued his work on CAS:

  • Support for FullTrustAssemblies in policy resolution;
  • IsolatedStorage now supports user quotas (when the security manager is enabled);
  • PermissionRequestEvidence is now part of the evidences during policy resolution;
  • Many bugs and corner cases were fixed.

Mono’s SSL Stack

Improvements to the asynchronous methods in SslClientStream and SslServerStream were contributed by JD Conley: they are now thread safe, support asynchronous handshaking plus various important fixes.

Support for _optional_ client-side mutual authentication (Sebastien).

Support for server-side mutual authentication (Sebastien)

Rewritten async support for Ssl[Client Server]Stream (JD Conley);

Mono.Cairo

Hisham and John Luke have upgraded the Mono.Cairo API to match the recently released Cairo 1.0 as well as providing documentation for the new API in Monodoc.

There are new Gtk and X11 samples included in the distribution.

Mono.Posix

Mono.Posix: This assembly now provides a remoting channel based on Unix sockets. It is a standalone channel and does not require the System.Runtime.Remoting assembly to work (Lluis).

C\

Due to popular request, the C# compiler now reports precise error/warning location with both line and column numbers (Atsushi).

Support for the Namespace Alias Qualifier to the C# compiler was added by Hari.

The compiler went through many bug fixes and a few internal structural changes as anonymous methods, iterators and partial classes start to get used by developers. Contributors include Martin, Harinath, Marek, Miguel and Atsushi which has been on a bug fixing quest on this release.

Still missing for full 2.x support: external assembly alias and friend assemblies.

ilasm/monodis

Our IL assembler and disassembler for the first time are able to round trip all the Mono assemblies and we consider them finally complete for real use.

Thanks to Ankit for fixing all the remaining issues.

VB.NET

Manjula and Sudha upgraded various pieces of the Basic compiler and its runtime.

Npgsql: Postgress provider

Updates from Francisco Figueiredo:

Better metadata support. Thanks Josh Cooley (jbnpgsql at tuxinthebox dot net).

Added refcursor parameter support. Now, refcursors can be passed as arguments for functions.

Npgsql now can handle functions which return refcursor and setof refcursor. Now, results are returned as NpgsqlDataReader resultsets. There is no need to explicitly call “fetch all …”

Critical bug fixed with ConnectorPool when creating MinPoolSize connections. Connections weren’t properly handled. Thanks Josh Cooley (jbnpgsql at tuxinthebox dot net)

Firebird provider

From Carlos: Support for the new INSERT … RETURNING statement of Firebird v2.0

Added support to the new CREATE SEQUENCE and SET GENERATOR statements to the FbBatchExecution class.

Add parameter information for DML statements and allow the configuration of quoted identifiers usage to the DataAdapter Configuration Wizard.

Installing Mono 1.1.9

Important: Mono 1.1.9 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.9

Binary Packages:

Pre-compiled packages for SUSE, SLES, Fedora Core, RHEL, MacOS and Windows in a variety of platforms available from our web site from the download section.

Source code:

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

Then compile libgdiplus:

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

Contributors

The following list is a partial list of contributors to the 1.1.9 release, 118 developers total:

Aaron Bockover, Adrian Johnson, Aleksandar Dezelin, Alexander Olk, Alois Bělaška., Alp Toker, Andrew Skiba, Ankit Jain, Atsushi Enomoto, Behdad Esfahbod, Ben Maurer, Ben Motmans, Billy Biggs, Blagovest Dachev, Boris Kirzner, Brion Vibber, Bryan Worth, Carlos Alberto Cortes, Carlos Guzmán, Cesar Octavio Lopez Nataren, chastamar@yahoo.com, Chris Micacchi, Christian Biesinger, Christian Hergert, Chris Toshok, Chris Turchin, Daniel Drake, Daniel Granath, Daniel Morgan, Dan Winship, David Hudson, David Waite, denys@gnome.cl, dezelin@gmail.com, Dick Porter, Duncan Mak, Eric Butler, Erik Dasque, Eyal Alaluf, Florian Gross, Francisco Figueiredo Jr., Gary Ekker, Geoff Norton, Gert Driesen, gildur@gmail.com, Gonzalo Paniagua, Greg Lonnon, Hisham Mardam Bey, Hubert FONGARNAND, Iain McCoy, Ilya Kharmatsky, Itamar Rogel, Jackson Harper, Jacob Ilsø Christensen, Jaen Saul, James Wilcox, Jb Evain, Jeroen Zwartepoorte, Joe Shaw, John Ehresman, John Luke, Jonathan Chambers, Jonathan Pryor, Jonathan S. Chambers, Jordi Mas, Jörg Rosenkranz, Josh Cooley, Joshua Tauberer, jsinger@eggmouse.com, Julien Puydt, Juraj Skripsky, Kamil Skalski, Konstantin Triger, Kornél Pál, Lluis Sanchez, Maksim Vorobiev, Manjula, Marc Haisenko, Marek Safar, Marek Sieradzki, Mario Sopena Novales, Martin Baulig, Martin Kretzschmar, Mart Raudsepp, Matthew Wright, meebey (mail@meebey.net), Michael Hutchinson, Michal Moskal, Miguel de Icaza, Mike Kestner, Paolo Molaro, Patrick Michel, Pedro Kiefer, Pedro Martinez, Peter Bartok, Peter Johanson, Peter Williams, Rafael Teixeira, Raja R Harinath, Raphael Slinckx, Ritvik Mayank, rodrigobamboo@gmail.com, Sathya Sudha, Sebastien Pouliot, shoehn@web.de (Sebastian), Sridhar Kulkarni, S Umadevi, suresh, Tambet Ingo, Thomas Zoechling, Todd Berman, Tomasz Cholewo, Tor Lillqvist, Vladimir Krasnov, Vladimir Vukicevic, Wade Berrier and Zoltan Varga