Mono 0.28 Release

A new release of the Mono runtime and SDK is
available for UNIX and Windows. Packages for various
distributions are also available from our download page.

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

144 bugzilla bugs were closed.

I know that the following summary is incomplete, I
apologize for missing major features

We have finished the SourceGear contract,
which funded Web Services in Mono as well as various
improvements in the runtime. We are very happy to have served
our first customer, and we will continue to improve Mono to
make sure the Vault
software runs flawlessly on Mono.

As you can expect, this release features bug fixes
everywhere: memory leaks plugged, performance problems solved,
performance improvements and more. A special area of
robustness is the client-side web services component: it is
extremely robust now, as one of the SourceGear acceptance
criteria was a 24-hour continuous test of their client library
that did millions of web service operations.

We hope to bring the same level of robustness to the server
side component in the next release, the www.go-mono.com site
documentation
is currently running with Mono and our ASP.NET implementation
(that is why the site has gone down a few times: we were using
it on our production system to use it under stress).

Each new release of Mono opens the door for more abusive
tests, and this time is not an exception, we already have a
few areas of performance and scalability that we want to
address for the next release.

1. Availability

Binaries for various platforms are available from our web
site from the download
section:

2. New Features in this release.

New Thread Locking

Zoltan removed the big locks we had in the runtime, and now
we have a finely grained lock system in the runtime. Runtime
hackers can read the included lock matrix document which
describes the requirements to use the new fine grained locks
in their code.

Ahead of Time Compiler Optimizations

Zoltan has worked extensively on the Mono ahead-of-time
compilation feature (AOT). The AOT code is now considered to
be production quality, and also for the first time
precompiled code runs faster than JITed code. This resulted
in a 13% compilation speed up for the Mono C# compiler,
reducing the compile time to 3.185 seconds. A clear goal of
the team for the next release is to reach 3.1416 seconds.

An MCS bug prevents System.dll from being precompiled
currently, we hope to fix this by the next release, but
everything else should work fine.

Web Services

Now we have a complete Web Services stack in Mono, In this
release we added:

The WSDL command line tool: this tool is used to
generate web service client proxies from a WSDL
document (local or remote).

WSDL documents: now ASP.NET can generate a WSDL
document for any web service that it hosts.

Web service documentation page: it shows
information about the methods of a web service. It
also provides a form with which you can test simple
methods.

Support for HttpGet and HttpPost protocols.

Our WSDL documentation page (http://.../file.asmx)
also can generate a sample proxy for you, if you don't
want to use wsdl.

Notice that the stack was already functional in 0.26, but
the addition of the WSDL tools makes the setup complete for
developing completely on Mono.

The work to support Web Services was possible thanks to SourceGear. We should
all send them a token of appreciation.

Lots of fixes and improvements to support the WSDL
generation and consumption.

Security

Sebastien has implemented Authenticode(tm) and the code is
now part of the distribution.

A couple of new tools are available: signcode and
chktrust. The former is used to sign assemblies (or any PE
files) and the later is used to verify signatures and
timestamps.

Web Service Enhancements

Implementations of WSE 1.0 and WSE 2.0 appeared on the CVS,
thanks to Sebastien, Duncan, Todd and Daniel. We build both
assemblies at this point.

XML Improvements

Speed and memory usage: extensive use of --profile and
various clever tricks from Atsushi and Ben. Lots of
performance critical classes were improved, and XPathDocument
(which is used extensively by XPath and Xslt) uses arrays of
structs for its implementation to improve performance.

XML Schema validation support in now in XmlValidatingReader
(although it is not finished). It also means that now many schema component
constraints have been implemented.

Remoting

Added support for CallContext. Now the CallContext is sent through
remoting boundaries and fixed various problems related to
in/out parameters in Remoting invocations.

Improved robustness, specially for asynchronous calls.

Generics

Work continues on supporting generics: more changes have
been done to the runtime, class libraries and tools, but we
are not complete.

To build the generic version of Mono, you have to compile
the code from source, and build the class libraries with the
`generics' profile (make PROFILE=generics). The generics C#
compiler is called `gmcs' and not `mcs'. They will merge in
the future, but we wanted to maintain mcs robust, and do all
of our experimentation on a separate branch.

XSLT Managed Engine

Over the past month, Ben's Managed XSLT engine has grown by
leaps and bounds. The implementation now offers compliance in
critical areas such as template conflict resolution. It also
implements all of the XSLT elements, including xsl:number. All
of the extension functions with the exception of format-number
have also been implemented.

Oleg Tkachenko, a seasoned .NET developer, joined Ben in
his efforts on XSLT, working on making the design of
outputting XSLT much better. His work will allow for better
compliance with the spec, greatly improved speed, and support
for mode="html" for xsl:output.

The work of all the XSLT hackers has resulted in a major rewarded, in
many cases the managed engine is faster than the C based libxslt.

Although the Managed XSLT provider is still not the default
provider, you can enable it by setting the MONO_MANAGED_XSLT
environment variable, like this:

export MONO_MANAGED_XSLT=true

PowerPC Runtime

Progress on the PowerPC JIT engine, but the full engine did
not make it into the 0.28 release, it should still be
available before the Microsoft PDC.

Windows.Forms

We got a nice upgrade from Vladimir at OpenLink for WineLib:
various new DLLs from the Wine runtime are now available (in
particular all the common dialog routines are now available to
us). Vladimir is currently working on updating WineLib to the
latest edition of Wine.

Jordi Mas contributed the ListViewItem widget and the file
dialog and Jonathan Hogg contributed a few fixes to the code
base as well. Brian Takita contributed the List control.

Alexandre Pigolkine continued fixing the various low-level
controls to have the same rendering behavior that they do have
on Windows together with Jerome Laban. We started a thread to
discuss the future implementation strategy for System.Drawing
to be fully cross-platform.

Dennis continues in his quest to fix all the signatures in
the Windows.Forms. Johannes added support to make Wine track
the theme settings of Gnome (we will fully complete this on
the next release).

System.Drawing now has migrated to use Cairo bindings on
Unix.

IL Assembler

Jackson was in charge of most of these improvements. New
features in this release: .data, p/invoke support, allow
multiple constraints on generic parameters, Oberon is now self
hosting with our il assembler and plenty of bugs fixed.

JScript and Vsa

Cesar has picked up again on JScript and has done
incredible progress on JScript and the Vsa engine, still not
ready for hello world, but moving along.

Bug Fixing

As you can expect bug fixes everywhere: ASP.NET server and
client, ADO.NET, memory leak fixes. The client side for web
services is extremely robust (we passed the 24-hour continuous
test from SourceGear and fixed tons of memory leaks,
performance issues and stability problems).

We hope to bring the same level of robustness to the server
side component

This list is not complete, it is missing contributions that
were sent to the list, as it was very hard to track the two
million incremental line patch since the last release (lots of
documentation, thats why ;-).