Mono 1.1.1 Development Release

Release date: 21 Sep 2004

Mono 1.1.1 is the first release on the development series of Mono and it is not intended to be used for production as it is undergoing internal changes. Those interested in a production release should use the Mono 1.0.xx series.

The Mono 1.1.xx series will eventually lead to the next stable milestone: Mono 1.2.

Important: Mono 1.1.1 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.1.

Installing Mono 1.1.1

Binary Packages:

Pre-compiled packages for SUSE 9, SUSE 9.1, Red Hat 9, SLES 8, Fedora Core 1, Fedora Core 2 and MacOS X are available from our web site from the download section. A Red Carpet Mono channel is also available on these platforms.

Source code:


If you are installing from source code, there are a few optional dependencies that you will want to consider installing.

  • icu 2.6.1 or later Optional: for supporting string collation.
  • Cairo 0.1.23 Required to install libgdiplus.

Quick source code installation:

If we have no packages for your platform, installing from source code is very simple.


tar xzf mono-1.1.1.tar.gz
cd mono-1.1.1
make install

Optional Packages

Libgdiplus is an optional packages, you only need those if you intent to use System.Drawing or Windows.Forms.


tar xzf libgdiplus-1.1.1.tar.gz
cd libgdiplus-1.1.1
make install

Changes since the Mono 1.0 release

The following is a high-level description of the changes in the development release of Mono since the original Mono 1.0 release.

Mono Ports

The Mono JIT has been ported to two new architectures, and another port has reached completion stage.

The engine is now 64-bit ready: the two new ports ports are 64-bit ports. Existing applications will automatically take advantage of the larger address space on these systems.

  • AMD64: A 64 bit port done by Zoltan.
  • SPARC v9: Another 64 bit port done by Zoltan.
  • S390: Neale has declared that the port is now complete on the 1.1.1 branch.

Neale has also started a 64 bit port to the S390x architecture, the code is included but it is not ready yet.


  • Runtime detection: Implemented support for side-by-side execution of applications that require different runtime versions. Mono now will detect the runtime version that an application requires (checking the version number embedded in the assembly, or looking at the application configuraion file if available), and will load the appropiate mscorlib.dll and machine.config. Thanks to this feature it is much easier to test the new 2.0 libraries: an application compiled with gmcs will be automatically executed in a 2.0 environment (Lluis).
  • ABC Elimination: A new, more complete and more efficient implementation of the Array Bounds Check Elimination has been checked in. Use the -O=abcrem command line option to enable it.
  • KQueue support: KeventWatcher is a new FileSystemWatcher backend for *BSD systems that will default over the ManagedWatcher. The implementation of this watcher gives significant performance gains over the Managed watch in any place that a FileSystemWatcher is used (ie; xsp/mod_mono).


Plenty of optimizations have been implemented at every level: from low-level JIT optimizations to tuning and stress testing the higher class libraries. For example, the C# compiler in the 1.1.x series is 20% faster over the 1.0.x series while doing more work.

Some details:

  • Reduced GC roots: C static variables are no longer GC roots. This greatly reduces the overhead of garbage collection. It also reduces the false retention of GC objects. This gave a few percent improvement on MCS bootstrap. Also, it is a step towards a precise GC. (Ben)
  • Fast path for GC: It now uses the thread local cache, many allocations now can go through a fast path (Ben).
  • Static Mono: Mono is now statically linked, allowing the use of the special __thread compiler directive in more places (Zoltan).
  • XSP: Performance of XSP has gone from 70 requests per second to 170 (and 220 for .ashx files. Also XSP is no longer slower than Apache+mod_mono, it is now slightly faster (Ben, Gonzalo)
  • XML: The DOM and XmlTextWriter performance has also been improved (Atsushi).
  • C# Compiler: Ben solved a long-standing optimization shortcoming in the compiler, now we generate optimal code for ++ and – operators.

Atsushi, Ben, Dick, Gonzalo, Paolo and Zoltan contributed to many other tuneups.

Web Services

There are many improvements and bug fixes to the existing core, in addition work has started on features from the .NET 2.0 stack:

  • WSDL improvements: New wsdl tool for the 2.x framwework, and a new option: -server to support genreation of server-side skeletons in addition to client-side stubs (Lluis)
  • Unknown headers: Unknown headers are now supported (SoapUnknownHeader) (LLuis).
  • WS-I: WS-I Basic Profile 1.0 checker, not completed (Lluis).

In addition there is a new model for asynchronous calls and a the new tool `sgen’ to pre-generate serializers debuts, but is still under development.


Work on Code Access Security (CAS) from Sebastien has started:

  • Evidences are now provided for AppDomains and assemblies.
  • System.Security.Permissions: is complete (in mscorlib.dll). Most other permissions, in other assemblies, are also complete.
  • System.Security.Policy: is mostly complete and basic security policies are supported.
  • Imperative demands: are now supported. Declarative (attributes) are not yet supported. Neither are Assert, Deny and PermitOnly.
  • Samples: MSDN library samples for permissions and policies classes are now working.

SHA224 has been added to the Mono.Security assembly. The certmgr tool is now able to manage the machine’s store certificates in addition to the user certificates.

monodis now support declarative security attributes in it’s IL output.

C# language updates

We continue to ship two compilers: mcs and gmcs. The only difference between those compilers is that the latter has support for generics, but they share the rest of the features.

  • Static Classes: C# 2.0 feature, added by Marek.
  • Partial Types: C# 2.0 feature, added by Martin.
  • #pragma warning: C# 2.0 feature, added by Marek.

We continue to improve the compiler to flag more errors for incorrect constructs or provide more useful information to the developer.

On this new release of the compiler, we have made the warning level default to 4 from the regular 3.

Postgress: Npgsql

This update comes from Francisco: Added support for point, box, lseg, path, polygon and circle datatypes. Added NpgsqlDbType enumeration with all supported types.

They are mapped to NpgsqlPoint, NpgsqlBox, NpgsqlLSeg, NpgsqlPolygon and NpgsqlCircle respectively. Thanks Glen Parker for help.

The following bugs have been fixed:

  • Added api documentation in code. Thanks Glen Parker. (No html generation yet. This will be fixed in next release)
  • Fixed deserialization of NpgsqlException. There are some issues yet, just the base message is being deserialized. Errors collection are null. Thanks David Palmer (David dot Palmer at SensusTech dot com) for the heads up and fix.
  • Improved Unicode encoding support. It was possible to characters in unicode cross the stream buffer and be discarded. Now we use Decoders which handle that situation. Thanks Oskars Ozols (oskars dot ozols at di dot lv)
  • Improved connection startup code. Now new connections in goes a lot faster. Thanks Mikko Korkalo (mikko.korkalo at f-solutions dot net) for the patch.
  • Fixed a problem with plan execution in 7.3 backend versions. The text parameters weren’t being quoted and backend complained about that.
  • gborg 898: Added HasRows method to NpgsqlDataReader. Thanks keitsi at minttupuffet dot net for feature request.
  • gborg 899: Fixed return of IsClosed after closing NpgsqlDataReader. Thanks Mikko Korkalo (mikko.korkalo at f-solutions dot net) for the patch.
  • gborg 952: Added missing handling of NoData message.


System.XML 2.0 development has started. Most of the new classes are checked in. They are mostly based on .NET FX 2.0 beta 1. There are many “partly implemented and untested” new 2.0 stuff:

  • XmlReader: factory methods, some of the typed value supports, new helper methods such as MoveToDescendant(), ReadSubtree(), IXmlNamespaceResolver support.
  • XML Schema: XmlSchemaSet and new primitive types.
  • XPath: XPathEditableNavigator and XPathDocument (it will be deprecated though), new navigation helper methods on XPathNavigator, XPathAtomicValue (too incomplete).
  • XQuery: It is based on the latest W3C working draft and many of the XQuery expressions are implemented as well as the early FLWOR support. Operations on sequence types are not supported. Functions won’t work enough. It is still highly unstable.

This work was done by Atsushi.

Basic Compiler

Anirban, Bernie, Jambunathan and Rafael have been making great progress on the Basic compiler, at this point it is possible to run ASP.NET applications, but work continues to refine the compiler.

Unlike the C# case where we had a large body of code to test against (the compiler, and later our class libraries), there is less Visual Basic code to test against, so we depend more on language tests for it, Sachin has been contributing to this area.

Since the last release, the mbas compiler supports: interfaces, inheritance definition, event handlers, implements clause, cross-assembly compilation, properties, enumerations, conditional compilation directives.

Jochen Wezel provided quick feedback on the changes and Rob Tillie helped with the VisualBasic.dll runtime.

C5 Class Library

We now distribute the C5 generics library created by Peter Sestoft and Niels Jørgen. This library is currently used mostly as large test case for the Generics edition of the C# compiler as it is the largest body of template code for C# available to this date.

We want to thank Peter and Niels for making their work available under the MIT X11 license.

For more details about it, see the C5 home page.


Sanjay added support for multiple frames (gif and tiff) and graphic control extension (gif). Animation along with reduction in size of gif files saved.


Suresh and Uma continued to fix the existing 1-0 API and also have started on the 2.x API features:


A new implementation of Windows.Forms is in progress. This new implementation is a completely managed implementation and only uses a thin driver for interfacing with the host windowing system. Two drivers are currently supported: Win32 and X11, volunteers are welcome to implement a driver for Mac’s CoreGraphics.

This team is currently composed of Jackson, Jordi, Peter and Ravindra who are working exclusively on it.

Although the souce code is part of the distribution, no binaries of the library can be distributed yet as it is not complete enough to provide the APIs that other parts of the class libraries require (this is only a build time issue for us, it will be addressed in an upcoming version of the 1.1.x series).

If you are interested in trying out the new version of Windows.Forms, you should download the mcs package, configure, and then do:

cd mcs-1.1.1
./configure --prefix=/YOURPREFIX
cd mcs/class/Managed.Windows.Forms
make clean
make install

Notice that this is not complete, and it is not finished, contributors are welcome. To discuss this, please join the mono-winforms-list

For details on how to contribute, see Peter’s update on the effort and the details on how it supports native toolkit themes. For some screenshots see: Jackson’s blog


The parser and lexer of Java Script have been rewritten by Cesar by porting the code from Rhino.

General .NET 2.x updates

Tim Coleman, Sebastien Poulliot, Carlos Alberto, [FIXME: FULL LIST]

Bug fixes

All the bug fixes from the 1.0.x release are available on the development version of Mono as well.