Mono 0.31, libgdiplus 0.2, winelib 1.0

A new release of Mono has been released.
Mono is an open source implementation of the .NET Framework
for Unix, Linux and Windows systems.

The major highligths of this release:

SPARC JIT engine

Windows.Forms is working again (alpha preview)

Native asynchronous support has been added to our I/O layer.

Relax NG compact syntax parser.

FileSystemWatcher.

ADO.NET disconnected operation.

For more detailed and in depth listing of features see the
rest of this document.

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

Thanks

A big thank goes again for Duncan Mak who worked steadily to
get every new dependency of Mono compiled and tested on our
Linux Platforms. Duncan has a mid-term exam tomorrow, if you
are a package user, send him a nice email (duncan@ximian.com).

Availability

Binary Packages:

Pre-compiled packages for SUSE 9, Red Hat 9 and Fedora Core
1 are available from our web site from the download
section.

For WineLib, it is necessary first to install a Wine
package from Wine HQ, and
once that is installed, you can install the WineLib package,
which is now just an extension to Wine instead of a
modification to Wine:

Windows.Forms update

The major achievement in this release is that both
System.Drawing and System.Windows.Forms have been improved to
the point where it is possible to use Windows.Forms in Mono
again. Peter Bartok came up with a wonderful approach to use
Wine: now we use a very small program that allows us to use
the system Wine. Thanks to Alexandre Julliard for the help in
getting this wine "loader" ready.

Windows.Forms applications now work again, but they are not
complete. Work is underway to complete them, and now that we
have a stable foundation, we would appreciate if volunteers
assisted us in completing various controls.

Windows.Forms will not be officially supported for the Mono
1.0 release (but it will be available under the `if it breaks,
you get to keep both pieces' agreement). Windows.Forms will
be supported in the the Mono 1.2 release.

But those interested in trying it out should: install Wine,
winelib-0.1, libgdiplus-0.2 and they can try some of their
applications. This is still an early preview, but some
applications and tests are up and running again.

Performance

Gonzalo did some fixes in the Socket class: It now uses the
threadpool for asynchronous IO.

He also improved the threadpool: it now recycles
WaitHandles and creates them on demand.

Andreas and Jackson re-implemented the various methods in
the `Char' class to use managed code which greatly accelerates
all of these routines, by avoiding the managed to unmanaged
transition.

PowerPC port

A big change to support thunks was checked by Paolo in to
the code generator so we can support large applications (above
the 64 MB direct jump limit on PPC).

Exceptions are now partially working on the JIT: if thrown
from managed code they work, but still fail when raised from
within the runtime engine, and in MacOS X we will need some
extra work to catch the equivalent to SIGSEGV, so instead of a
NullReferenceException you will get a crash with the JIT
today.

MacOS X users: you will need to obtain the latest
development of the Boehm GC
http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/ as the
bundled edition of the GC wont work on MacOS X.

To use you must configure with --with-gc=boehm instead of
the default which is --with-gc=included.

Debug symbols work on PPC now from Urs.

SPARC Port

All of the regression tests that pass on the x86 port of
Mono work on the Solaris port. Although it is on par
feature-wise with the x86 edition and can complete a complete
bootstrap of Mono, it has not yet been tuned for performance
like the x86 version has.

The SPARC port of Mono was done by Zoltan Varga in a record
time of little more than a month of work.

Interpreter: AMD64 support

Zalman Stern contributed support for running the Mono
interpreter on AMD64. It is a port on its early stages.

C# Compiler

Many bugs have been fixed and work on performance has
continued in the compiler.

But our major focus has been on adding 2.0 features in a
couple of separate branches (anonymous methods and generics).

JScript

JScript keeps advancing slowly, Cesar has implemented the
If and Print statements as well as the Comma operator.

Mono Runtime Changes.

Sebastien implemented Principal support in AppDomain and
Thread class. You can now use imperative Role Based Access
Control (RBAC) with Mono.

Many bug fixes continue to be applied to the runtime, many
improvements

Async IO support, FileSystemWatcher

Gonzalo added support for Async IO to our IO stack as well
as the FileSystemWatcher API.

If your system supports the POSIX aio_ interface, the
FileStream will be able to take advantage of it when the
programmer requests asynchronous operations. In the past Mono
would use threads from the threadpool to implement this
functionality.

FileSystemWatcher can take advantage of FAM on sysstems
that support it, on other systems the feature is emulated
using polling plus a separate thread.

Cryptography

Sebastien has documented his saga in improving the
CryptoStream: it took several rewrites until he got all of the
samples out there on the network to work, and we are very
happy with the results. Someone told me `It is not fun to
debug this stream over Http, because all you get is encrypted
buffers that are hard to decipher'.

He also implemented key pair persistance for RSA and DSA
keys. This is similar to the CryptoAPI containers. Notice
that in Linux there is no such things as a "secure storage"
like there is in Windows, and the keys are stored in your
~/.mono/keypairs directory.

Updates to Mono.Security.dll:

SymmetricTransform is now available (no
more hidden in corlib) in Mono.Security making it easier to
support all cipher modes for newsymmetric block ciphers.

BigInteger and RSAManaged are now exposed in Mono.Security
which permitted to include Diffie-Hellman (PKCS#3) support
(contributed by Pieter Philippaerts).

SSL and HTTPS

Sebastien has been working on TLS/SSL support using
WebRequest/WebResponse including support for
ICertificatePolicy while Carlos has been doing some serious
refactoring for future (in-development) server-side TLS/SSL
support.

SSL support requires:

Mono.Security.dll assembly (in the PATH on Windows).

That you trust the CA that emitted the SSL
certificate (see certmgr.exe) or write your own policy.

Web Services

Improved our `wsdl' command line tool to use the Discovery
classes, so it now can handle .disco files as well as .wsdl
files. Also Lluis added support for the missing command line
options.

System.Web.Services.Discovery is now completely
implemented.

The web services stack now routinely processes 300 SOAP
WSDL descriptions to ensure that no regressions are introduced
into the codebase.

Web Services are the major user of the XmlSerializer, the
XmlSerializer historically has used a table to drive the
serialization process: the table is computed when you create
your serializer, and serialization of objects is done by
"interpreting" the table one step at a time.

Lluis has improved the serializer to compile the above
serializer table into a C# program. The generated program is
then dynamically loaded into the program increasing the
performance of serialization. This feature is disabled by
default, to enable it you must set the environment variable
MONO_XMLSERIALIZER_THS to 0.

ADO.NET

Added : indexes on tables are built at the time of
constraints and relations adding in order to improve
performance of actions that need to query tables for
child/parent rows or check row column values uniqueness.

XmlDataReader. Reading DataSet from XML reviewed in order
to support various scenarios (missing DataSet element etc).

We have reached completion in a number of classes, thanks
to Uma who has been going through the code to complete these:
System.Data.SqlTypes, many components of the SQL client types
and ODBC.

XML land

Atsushi has been hard at optimizing the XmlReader and
XmlWriter as well as the DOM and the Xslt engines.

RelaxNG library: - RelaxngValidatingReader
has been improved. It now supports custom datatype. Now it
validates XML Schema datatypes and default RELAX NG types by
default. Several bugfixes to it have been done.

The library also contains a Compact Syntax parser. You can
read a compact syntax file, create a grammar object, and
output it in the form of XML via its new writing methods. To
use it, you can use:

ASP.NET Web Forms

Gonzalo added support for session and application objects
in Global.asax.

Fixed bug in Sys.Web.Configuration that caused a
performance loss.

System.Drawing

The work continues to split the System.Drawing code into
chunks that live in the managed world, and chunks implemented
in C for the libgdiplus library which in turn uses Cairo to do
all the heavy lifting.

Duncan continuted work on GDI+ and GraphicsPath is now
almost complete.

Jordi Mas has completed the Font support (we use FreeType
to render the glyphs) and has also been fixing and completing
many parts here.

Ravindra Kumar has contributed many of the different
brushes: texture, hatch 17 out of 52 styles and early gradient
path brush that GDI+ supports.

Remoting

Lluis improves the binary formatter. It can now generate IL
code on the fly to access the fields of objects, giving a x3
performance boost in some cases.

Plenty of bug fixes, some fixes were related to changing
some of the field names in our core classes to match the
Microsoft .NET names, so we could become compatible with some
of the over-the-wire message exchanges.

Npgsql: Postgres bindings.

Implemented support to specify max number of connections
Npgsql can use for pooling. The default is 20. You can do that
by using the construct MaxPoolSize=value in the connection
string.

Also, a timeout construct was added to specify, in seconds,
the maximum time Npgsql should wait for getting connections
from the pool when there is no connections available. You can
use it with Timeout=value in the connection string. Default
value is 15.

Encodings used by Npgsql can now be specified in the
connection string. Use the construct Encoding=value. Possible
values currently supported are: UNICODE and SQL_ASCII. Default
value is SQL_ASCII.

Tools

certmgr to add/remove/list trusted root certificates
(see man page).

setreg to add/remove the (Mono and MS) test root
certificates (used by makecert) from trusted certificates.

monop A small little command-line tool from Ben
Maurer that dumps a class definition to standard output,
useful when programming if you do not remember a method name
(a life saver when you do not remember if ArrayList has a
Count or a Length ;-)

Generics and the C# compiler

At this point our generics compiler (gmcs) and runtime seem
to be feature complete, Martin has been working steadily on
the compiler front, and some bits of the Generic class
libraries.

Our next tasks are to review the specification and make sure
we flag every possible error as well as continuing the
implementation of our generic class library.

Although Generics are available now as the gmcs
compiler, they will not be part of the 1.0 release, the
generic compiler is only present for those working on the post
Mono 1.0 components.

Databases: DB2

Victor Vatamanescu has contributed an updated DB2 database
provider. It works on both Windows and Linux and matches the
API and functionality from the IBM developed provider.

Consistency and completeness

A special recognition goes to Andreas Nahr who continued
his task to complete various low-level bits on the class
libraries (adding localization functions, implementing missing
interfaces, proper error checking) as well as making our class
libraries conform to the coding guidelines.