A new release of Mono has been released. Mono is an open source implementation of the .NET Framework for Unix, Linux and Windows systems.
There are big breaking news: Mono JIT on PowerPC runs Hello World, ASP.NET is feature complete, AppDomain unloading is supported and 64-bit ports of HPPA and SPARCv9 are available now. A new group of developers from Mainsoft has been contributing extensively to ADO.NET and ASP.NET.
This release includes four components at once: the Runtime and Software Development Kit as well as the Documentation browser, our XSP web host for ASP.NET and the Mono/Apache module have been released. Packages for various distributions are also available from our download page.
A big push in this release has been to get closer to completion on the .NET 1.0 and .NET 1.1 APIs and completing pieces that we need for the Mono 1.0 release. But at the same time work continues within the safety of #ifdefs on Mono 1.1 features (integrating .NET 1.2 components).
I know that the following summary is incomplete, I apologize for missing major features
Since the last release, 3,071 individual commits were done to our runtime and class libraries.
310 bugzilla bugs were closed.
A big thank you goes for Duncan Mak who worked steadily to get every new dependency of Mono compiled and tested in four platforms as well as maintaining the Red Carpet channel (and soon, give us the easy installer).
Pre-compiled packages for various platforms are available from our web site from the download section:
Since there are so many new package dependencies (libicu and the Cairo universe), we are not listing the individual packages to download anymore and we recommend that you use Red Carpet to install.
The Ximian Desktop installer will be able to install Mono later this week, so with a single click, you should be able to install Mono 0.29 on your system.
- Mono package (Runtime engine, JIT compiler, pre-compiled compiler and class libraries): http://www.go-mono.com/archive/mono-0.29.tar.gz
- MCS package (Class Libraries, C# and VB.NET compiler and managed tools): http://www.go-mono.com/archive/mcs-0.29.tar.gz
- Apache Mono Module and XSP runtime (needed for the Apache module): http://www.go-mono.com/archive/mod_mono-0.6.tar.gz http://www.go-mono.com/archive/xsp-0.8.tar.gz
- Mono Documentation browser: http://www.go-mono.com/archive/monodoc-0.8.tar.gz
On CVS the tags are MONO_0_29, MCS_0_29, XSP_0_8, MOD_MONO_0_6 and MONODOC_0_8.
Quick source code installation:
If we have no packages for your platform, installing from source code is very simple:
tar xzf mono-0.29.tar.gz cd mono-0.29 ./configure make install
Mono Runtime Changes
Fedora’s security features broke Mono 0.28, this version of Mono rectifies this problem.
Ahead of Time Compiler
Bug fixes in the C# compiler now permit all the assemblies to be pre-compiled using the ahead-of-time compilation option of Mono. On average a fully AOT environment will give the C# compiler a 20% performance boost.
More work on the PowerPC code generator is on this release, the JIT engine was able to run “Hello World” for the first time. This involves JITing a fair amount of code, roughly about 100 methods and it also exercises various P/Invoke and calling convention features.
At this point it seems like Mono exposes a few bugs on the MacOS X application support.
64-bit support for the VM was checked in for the SPARC v9 and HPPA architectures by Bernie Solomon. This is a significant change because this means that the values of the “IntPtr” variable is 8-bytes instead of 4-bytes. The port included various cleanups in our libraries to make them 64-bit ready.
Dick has checked in a large upgrade to our internationalization support, initially this code contains CultureInfo and string collation routines. This uses IBM’s IBM’s ICU library, available from: http://oss.software.ibm.com/icu/index.html.
Now Mono can cope with charset-encoded filenames instead of demanding them to be in UTF-8 format. See the man page for mono(1) for details.
Martin continues his work to support generics in Mono. The support is not ready for prime time yet, but you can see some thirty-something generic sample programs in mcs/tests/gen-*
Improved Trace Facility
The runtime features an improved trace facility, developers can now include and exclude groups of methods, namespaces, types and assemblies from the trace output, a helpful tool for debugging code. See the man page for details.
For example, to trace method calls in the program, and on the System.XML namespace, use:
mono –trace=program,N:System.Xml hello.exe
AppDomain unloading and Module support
Mono has finally gained module support, some programs from the Mercury compiler are known to work now and this should allow the IIOP.NET folks to continue their work (Zoltan).
AppDomains can now be unloaded (Zoltan).
Other runtime features
Gonzalo and Zoltan have fixed a long-standing problem with the implementation of Equals on ValueTypes, this problem was not only fixed by Gonzalo, but later the performance was boosted by Zoltan.
Lluis implemented context static field support for remoting.
Zoltan implemented AppDomain unloading, LastErr flag on P/Invoke methods, stdcall calling conventions support, marshalling of structs and improved the support for running SML.NET and Mercury.NET generated code.
AppDomain.LoadAssemblyRaw functionality has been added by Zdravko Tashev.
Compilers and Tools Changes
The C# compiler continues to be bug fixed. A new version of the compiler `gmcs’ is available for testing out the Generics features of C# 2.0. To use this feature, you must rebuild the Mono class libraries with the `generics’ profile:
$ cd mcs-0.29 $ make PROFILE=generics $ make install
Sebastien and Zoltan improved MCS to support delay-signing of assemblies. Also the sn (StrongName) tool is included in this distribution to re-sign and verify signatures of assemblies.
Mono Class Libraries Changes
Corlib has been renamed to Mscorlib
We have finally renamed `corlib.dll’ into `mscorlib.dll’ which means that we removed all the various workarounds that we had in the code to cope with this difference.
Sunil Kumar and his team at Novell have contributed a fully managed implementation of LDAP for Mono and the .NET Framework. The code is now part of the standard distribution of Mono, and is being used to implement our System.DirectoryServices namespace. The Mono.Directory.LDAP assembly is now deprecated in favor of this.
System.Drawing and Windows.Forms
In the last release of Mono we had started an effort to unify the three backends that we had for System.Drawing, since it was becoming hard to maintain.
The new strategy to implement System.Drawing is to use the GDI+ API on Unix and implement the GDI+ C Flat API on top of the cairo library (which is now a dependency).
The good news is that the code is much simpler, our support is more complete, and we can develop this one faster. The bad news is that there are many regressions on this release related to using System.Drawing and Windows.Forms on Unix.
Windows.Forms in this release is broken on Unix, but fairly functional on Windows. The new rendering engine introduced for System.Drawing broke a lot of the functionality we had, and we will be working hard to address those limitations on the next release.
Reggie updates the ByteFX MySQL provider on CVS and Francisco updates the Npgsql provider, so this version ships with the latest editions of these two providers.
Victor contributed an updated DB2 provider. We could not get the latest version of his code before the release, but expect the namespace to change on the next release as we become binary compatible with the IBM.Data.Db2Client implementation.
Eran Domb has been actively fixing bugs in the System.Data assembly and related tools.
Cesar continued with the grammar fixes to the language. Code Generation for: default ms compiler jscript assembly format, function declarations, variable declarations, boolean literals, string literals and initial code generation for binary operations.
Semantic Analysis: initial /fast features, like detecting not declared variables.
Web Services and Remoting Changes
Lluis has been working hard on completing the Web Services and Remoting assemblies to reach 1.0.
All the encodings are now supported (previously we supported only document/literal): literal encoded and RPC format is now supported, with wrapped or bare parameters.
A new documentation page is generated now for web services automatically and added support for generation of WSDL files for client HttpPost and HttpGet.
Web Services error handling and error reporting has improved a lot as we started using it for developing our own web services and the various improvements to the HTTP runtime also benefit this space. The discovery classes have been added to support the DISCO protocol, and a new tool (disco) is distributed as well.
Remoting.Configuration has been implemented thanks to Jaime who did the first pass at the implementation and Lluis who completed it and deployed it. Remoting objects can be hosted in XSP, the .rem and .soap files types are now supported as well.
Improved the performance of calls between application domains, and also implemented support for asynchronous calls as well as improving the support for synchronization and static fields.
WSE: The Web Services Enhancements
Sebastien added support for trace filters on input/output SOAP messages.
He also added support for WS-Security on the client side: UserName rountrip (except digital signatures) and XML encryption using X.509 certificates to/from a web service.
Mono Documentation Browser Changes
MonoDoc is the Mono Documentation Browser. It includes class library documentation, tutorials, the C# language reference and errors reference. Monodoc contains inline editing and collaboration facilities built into it.
On this release of MonoDoc we are shipping with its collaboration features turned on. Users can now edit the content for the class library documentation and submit their improvements through a Mono Web Service. Improvements will appear on upcoming releases of MonoDoc.
The editing facility in MonoDoc contains new shortcuts to insert cross references, tables, item lists and code samples (miguel). Also Ben added support for editing enumeration definitions.
You can use the Monodoc/web edition to host the documentation for your own class libraries.
You can see the web front-end for Monodoc live at http://docs.go-mono.com/
John Luke contributed various aesthetic changes to the web edition and various Gtk# types were documented by him. The new style is closer to the NDoc web interface.
New documentation for NUnit, Npgsql is also available.
Monkeyguide: We are shipping the Monkeyguide in this release, but we need help in updating it as well as doing editing work on it. It is known to contain old materials that confuse people, if you are interested in helping the documentation effort, please subscribe to the firstname.lastname@example.org mailing list.
ASP.NET: Feature complete
Two major changes in this release: OutputCache support and state session support. With this we consider our implementation of ASP.NET to be feature complete, and at this point we are requesting ASP.NET developers to try out their existing applications and report any problems to us (Please use Bugzilla to file a report).
In depth: Now Mono supports the session managers other than the in-memory session manager. There are two: the StateServer and the SQL-based state server. Both configured the same way you would on Microsoft.NET.
The Mono SQLSessionServer allows you to use any database provider that implements the IDbConnection interface (The default provider is Npgsql).
A little extra configuration is required because of this extra flexibility. If you are not using Npgsql you need to add the StateDBProviderAssembly and StateDBConnectionType attributes to your app settings like so:
<appsettings> <add key="StateDBProviderAssembly" value="Npgsql"/> <add key="StateDBConnectionType" value="Npgsql.NpgsqlConnection"/> </appsettings>
OutputCache is supported now on ASP.NET pages.
Two new tools asp_state.exe and dbsessmgr.exe ship: the first is the state manager for ASP.NET and the later is a tool to manipulate the current session database.
Support for other languages in ASP.NET is included now, they only need to distribute a CodeDOM provider (VB.NET does).
Support for different character set encodings on files, requests and responses instead of only supporting UTF-8.
Timeouts: now it is possible to use the machine.config or the application config file to control the amount of time that the runtime will wait to process an ASP.NET request. If the timeout is exceeded the operation is aborted.
A request queue mechanism: it now possible to inform the runtime through the machine.config or application config file how many threads it should consume from the threadpool: any excess requests will be queued up instead of consuming all the threads available:
<system.web> <httpruntime executiontimeout="90" maxrequestlength="4096" usefullyqualifiedredirecturl="false" minfreethreads="8" minlocalrequestfreethreads="4" apprequestqueuelimit="100"/> </system.web>
Alon and Yaron from Mainsoft have actively contributed to fixing plenty of bugs and controls on this release.
The Mono Cryptographic libraries are very complete and all written in managed code. Various people take bits and pieces of it and run it on smaller devices where the Compact Framework might not have all the functionality they need.
In this release Sebastien expands the Mono.Security code base with new features:
- Augmented support for X.509 certificates.
- Basic chaining and trust-anchors.
- Added a managed MD4 implementation to support NTLM authentication.
- Added PKCS#8 support to protect private keys - required for PKCS #12.
You can track Sebastien’s blog for more up-to-date information on security.
Support for .NET 1.2
Some work has begun in various areas to support the .NET 1.2 APIs, although Mono 1.0 will not ship with support for 1.2 APIs, some work is being done to get a head start.
Martin continued his work on the runtime features to support generics and Zoltan brought in some of the new features from .NET 1.2 to System.Reflection: Dynamic methods and the new Reflection.Emit support for things like type modifiers.
Implementation on ObjectSpaces has begun: Mark Easton, Richard Thombs and Tim Coleman have started work on this new database system.
The current strategy has been to stub out code to get the basics moving, and write unit tests as we go.
Most of the new cryptographic functionality available in .NET 1.2 was already part of Mono.Security or were internal classes of System.Security.
Pieter Philippaerts donated this RIPEMD160 managed hash implementation.
Added the new classes for the new HMAC and it’s derived companions: HMACMD5,HMACRIPEMD160, HMACSHA256, HMACSHA384 and HMACSHA512 (Sebastien).
Added the new PKCS#5 PBDKF2 password based key derivation inRfc2898DeriveBytes (Sebastien).
- System.Security.Cryptography: Complete support for ASN1 data and OID.
- System.Security.Cryptography.Pkcs: Started implemention usingMono.Security PKCS#7 support.
- System.Security.Cryptography.X509Certificates: Started implementation using Mono.Security X.509 support.
Gonzalo has written a couple of new tools to generate an XML map of an API and a tool to compare arbitrary sets of XML API maps. We are now using this in place of our previous “CorCompare” tool to generate the API status pages on the Mono site. The new tools allow us to update those more frequently and they more accurately represent the current library status.
Our IL assembler and disassembler are much better and more conforming than before.
The people behind this release
Roughly 70 developers following developers contributed to this release:
Aleksey Demakov, Alexandre Pigolkine, Andreas Nahr, Atsushi Enomoto, Ben Maurer, Bernie Solomon, Carlos A. Barcenilla, Carlos Alberto Cortes, Carlos Guzman Alvarez, Cesar Octavio Lopez Nataren, Christopher Taylor, Daniel Kornhauser, Daniel Morgan, Dave Bettin, David Waite, Dennis Hayes, Dick Porter, Duncan Mak, Eran Domb, Ettore Perazzoli, Fawad Halim, Francisco Figueiredo Jr., Gaurav Vaish, Gert Driesen, Gonzalo Paniagua, Hector E. Gomez, Hye-Shik Chang, Jackson Harper, Jaime Anguiano, Jean-Marc Andre, Jeff Seifert, Jochen Wezel, Joel Basson, Johannes Roith, John Luke, Jonathan Pryor, Jordi Mas, Laurent Morichetti, Lluis Sanchez, Marek Safar, Mark Easton, Martin Baulig, Martin Willemoes Hansen, Miguel de Icaza, Mike Kestner, Nick Drochak, Paolo Molaro, Pedro Martinez, Peter Bartok, Peter Teichman, Peter Williams, Philipp Past, Philip Van Hoof, Pieter Philippaerts, Radek Doulik, Rafael Teixeira, email@example.com, Reggie Burnett, Richard Thombs, Richard Torkar, Sebastien Pouliot, Sunil Kumar, Tim Coleman, Timothy Parez, Todd Berman, Victor Vatamanescu, Wojciech Polak, Yaron Shkop, Zdravko Tashev and Zoltan Varga.
This list is not complete, it is missing contributions that were sent to the list, as it was very hard to track the one million incremental line patch since the last release.