Mono 0.29, MonoDoc 0.8, XSP 0.8 and mod_mono 0.6

Hello everyone,

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

Stats

Since the last release, 3,071 individual commits were done to
our runtime and class libraries.

310 bugzilla bugs were closed.

Thanks

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).

1. Availability

Binary Packages:

Pre-compiled packages for various platforms are available
from our web site from the download
section:

2. 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.

Porting Progress

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. ([Screenshot])

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.

Internationalization

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.

Generics Support

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.

AppDomain.LoadAssemblyRaw functionality has been added by
Zdravko Tashev.

3. 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.

4. 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.

Novell.Directory.LDAP

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.

Databases

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.

5. 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.

6. 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 Web edition has better JavaScript navigation facilities
for the tree explorer, and Gonzalo improved the caching of
data for the web edition of Monodoc: now it will return the
time-stamp of the documents to avoid reloading redundant
information over the web.

You can use the Monodoc/web edition to host the
documentation for your own class libraries.

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
mono-docs-list@ximian.com mailing list.

7. 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:

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:

Alon and Yaron from Mainsoft have actively contributed to
fixing plenty of bugs and controls on this release.

8. Security

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.

9. 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.

Runtime features

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.

ObjectSpaces

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.

Crypto

Most of the new cryptographic functionality available in .NET
1.2 was already part of Mono.Security or were internal classes
of System.Security.

10. Other News

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.

11. The people behind this release

Roughly 70 developers following developers contributed to this
release: