Mono 1.1.4 Development Release

Mono 1.1.4 is the fourth release on the development series of Mono. The Mono 1.1.x series will eventually lead to the next stable milestone: Mono 1.2.

We consider Mono 1.1.4 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.3 and 1.1.4. All of the changes since 1.0 are documented in the following release notes: 1.1.1, 1.1.2, and 1.1.3. Note that some of the changes mentioned in these notes are also present in the 1.0.x series.

For users who can not make major changes to their environment, the 1.0.x series will still be maintained.

Changes since the last release

The following is a high-level description of the changes in the development release of Mono since the previous development release in December 9th. 190 reported bugs were fixed in this period of time.

Although this a development version, this release contains mostly bug fixes, speedups and tuning in every subsystem of Mono. Some key changes are:

Packages

New: MacOS X packages now include the Cocoa# API for creating native applications.

On Linux, we have reduced the number of packages required to install Mono.

Security

New: Sebastien has committed his Code Access Security (CAS) support, enable it by running mono with the `–security’ flag. For this release, the option enables:

  • Policy resolution - including assembly-level RequestMinimum, RequestOptional and RequestRefuse attributes.
  • Declarative/Imperative demands;
  • Declarative stack modifiers (Assert, Deny and PermitOnly);

Note: Although the CAS infrastructure is in place, the class libraries have not yet been audited and properly tagged for CAS use, this work is just starting. Some of this work will not be visible until the audit is complete.

IsolatedStorage has been updated to use assembly/appdomain evidences (but not the permissions).

C# Compiler: Important Changes

Important Change: The compiler is now more strict in the lookup rules. This might break code that compiled fine in the past, as we are now closer to the specification (Harinath). Programs affected are, typically, those that use namespaces and types with the same name.

The warning level has been raised from 2 to 3, code that compiled without warnings will likely produce more messages on this new release (Marek).

We now do Decimal Constant folding (Marek).

Various bug fixes (From the triple M team: Miguel, Martin, Marek)

Cryptography

Many improvements were made in cryptographic performance, including 8% for SHA1, 5% for SHA256 and 20% for TripleDES and MACTripleDES. As well, weak key detection for DES is 16 times faster.

New padding modes ANSI X9.23 and ISO 10126 were implemented (for 2.0) for symmetric ciphers and MACTripleDES;

ASP.NET 2.0 features

New: To use these features, you must use `xsp2’ in your setup:

Master Pages: Lluis has implemented our framework for Master Pages.

Menus, Trees: Support for dynamic menus on web pages (very cute!) and dynamic trees on ASP.NET controls have been implemented by Lluis.

Also: View and MultiView web controls.

Reorganized samples: now there are sample pages for all the new 2.0 controls in XSP.

Windows.Forms

New: The new implementation of Windows.Forms (we like to call it “Managed.Windows.Forms”) is now the default, and the old code has been removed from this release.

It is now the default and it will be installed together with all the other libraries on the system. Windows.Forms is still not complete, but making progress rapidly.

Useful links:

GDI+

GDI+ now ships with its own bundled version of Cairo. This also should avoid interfering with the standard release and distribution process of Cairo. (Paolo)

Tools

New: prj2make, a tool developed by Francisco Martinez is now part of the standard Mono distribution. You can use prj2make to produce Makefiles that will work on Unix for projects that use Visual Studio solutions.

gacutil: No longer requires patches to work for RPM systems.

dtd2xsd: A new tool to produce Xml Schema Definitions from an XML document that contains a Document Type Definition (DTD), by Atsushi.

ilasm: Added support to strongname assemblies (-key flag).

certmgr: can now download and import certificates into the stores (e.g. SSL, LDAPS), list existing certificate and remove them from a store.

New permview tool can display assembly-level declarative security present in assemblies (RequestMinimum, RequestOptional and RequestRefuse).

XML World

System.XML 2.0 is completed, except for compiled XSLT (Atsushi). New features include:

  • XmlSchemaValidator is implemented. As well, significant refactoring on XML Schema validating reader has been done.
  • SchemaInfo on DOM is now provided.
  • There is new support for reading Binary content (Base64/BinHex).

RelaxNG now features a compact syntax writer.

RelaxNG has an experimental grammar inference engine.

System.Data World

A new test framework for connected behavior was developed by Sudha.

Suresh fixed many bugs in connected and disconnected modes in the System.Data stack. Appasamy has also contributed bug fixes to the SqlClient and Odbc providers.

Many bug fixes were made for DataSet, including some from Ankit Jain.

DataViews are much faster now (Atsushi).

Profiler

New: A new statistical profiler is included in the default Mono profiler, to use do:

mono --profile=default:stat

Additions to the profiler API were made by Ben and Paolo. These changes enable Ben’s experimental heap profiler to work. The profiler can be found in the `heap-prof’ module of git. Beagle has reported great success with this tool.

Mono Embedding

New: Using the special library name “__Internal” will resolve symbols against the main executable. Particularly useful for users embedding the Mono runtime.

New: Simplified threads for embedding: Starting with this release Mono will no longer start a separate thread for running the main application. Embedders take note about this change, see the updated sample program for details.

We have now the beginnings of a framework to document the complete Mono public API.

Ahead of Time Compilation

Position Independent Code (PIC) is generated for both x86 and x86-64. Users with multiple mono processes will notice a memory reduction if AOT is used.

Ahead-of-Time compilation can be done on demand by using the MONO_AOT_CACHE environment variable which will toggle auto-batch-compilation on demand (Zoltan).

Performance

Exception throwing is now a lot faster (Paolo, Zoltan).

SSA-based partial redundancy elimination has been updated. Work on Alias Analysis is being done to enhance this optimization (Massi).

Arrray Bounds Check (ABC) Removal removes more checks (Massi).

Many System.Threading.Interlocked operations are implemented using inline assembly for the x86 (Patrik).

Various peephole and Linear Scan improvements have been made to increase code quality (Ben).

Throw blocks are now placed in an out-of-bound block to improve locality and branch prediction (Zoltan).

Remoting for TCP and HTTP transport is vastly faster now (few orders of magnitude) this change was done by Lluis.

Lluis also implemented a more scalable threadpool for remoting for incomming connections.

Memory Usage

The VM went on a memory diet at various levels.

Many metadata structures are now delay-loaded, reducing memory consumption, especially in long running GUI applications. (Ben)

Memory leaks have been audited, especially in terms of application domain unloading. (Paolo, Zoltan, Ben)

The symbol file for –debug is now loaded with mmap, reducing memory consumption by a few megabytes (Ben).

XmlDocument and its helper classes now use less memory. (Atsushi)

Test Suites, Build System

`make distcheck’ now runs the regression tests during the release. This existed in 1.1.3, but there many more tests on this release.

We are getting close to have all the regression test suites enabled by default on our tinderbox setup.

Mono.Posix

Jon added support for FILE handles in the Mono.Unix.StdioFileStream class.

The Mono.Posix namespace is now obsolete, we recommend the use of the classes and methods in the Mono.Unix namespace (the assembly is the same one: Mono.Posix.dll).

Bug Fixes

For those tracking the mailing lists, we have included the new number formatter from Kazuki Oikawa and the test cases from Akira Mei. This closed a large number of bugs.

Summary of C# 2.0 features supported

Today Mono 1.1.4’s C# compiler supports anonymous methods, iterators, partial classes, static classes, covariance and contravariance, property accessor accessibility and inline warning control from the 2.0 specification. Generics are supported as well on the branched `gmcs’ compiler (included).

Still missing for full 2.0 support: nullable types, namespace alias qualifier, external assembly alias, fixed size buffers and friend assemblies.

Installing Mono 1.1.4

Important: Mono 1.1.4 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.4

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:

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

Optional Packages

Libgdiplus is an optional packages. You only need it if you intend to use System.Drawing or Windows.Forms.

libgdiplus:

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

Contributors

The following developers contributed to the Mono 1.1.4 release:
Adhamh Findlay, Alexandre Gomes, Alp Toker, Anil Bhatia, Atsushi Enomoto, B Anirban, Ben Maurer, Bernie Solomon, Carlos Alberto, Carlos Guzmá, Cesar Octavio, Chris Toshok, Chris Lahey, Daniel Morgan, Dan Winship, David Hudson, Dick Porter, Duncan Mak, Erik Dasque, Fawad Halim, Francisco Figueiredo, Geoff Norton, Gonzalo Paniagua, Jackson Harper, Jambunathan Jambunathan, Jb Evain, Jeroen Zwartepoorte, John BouAntoun, John Luke, Jonathan Pryor, Jordi Mas, Joshua Tauberer, Jörg Rosenkranz, Juraj Skripsky, Kazuki Oikawa, Larry Ewing, Lluis Sanchez, Manjula MGH, Marek Safar, Mark Crichton, Martin Baulig, Martin Willemoes, Massimiliano Mantione, Miguel de Icaza, Mike Kestner, Neale Ferguson, Nick Drochak, Paolo Molaro, Patrik Torstensson, Peter Bartok, Peter Williams, Rafael Teixeira, Raja R Harinath, Randy Ridge, Ravindra Kumar, Ritvik Mayank, Sachin Kumar, Sebastien Pouliot, Shane Landrum, José Alexandre Antunes, Sudha Sathya, Suresh Kumar, Todd Berman, Urs Muff, Zac Bowling and Zoltan VargA.