Mono 1.0 Beta 1
Contents
- Mono Beta 1 Introduction
- Contents of the Beta.
- Changes since version 0.31
- Known Issues in the release
- Logging bugs against Mono
- Contributors
- Contact Information
Mono Beta 1
Novell is proud to introduce the first Beta release of Mono, an open source implementation the .NET framework for use on Linux, Unix and Windows System.
It includes a C# compiler, an implementation of the Common Language Infrastructure and two stacks of APIs: a Unix, Linux, GNOME, Mono stack for APIs that takes the most advantage of your Unix server and desktop and a set of APIs compatible with the Microsoft .NET Framework 1.1 that provides support for ASP.NET (web services and web forms), ADO.NET and many other components.
Incorporating key .NET compliant components: a C# compiler, and a portable execution system (that includes Just-in-Time and pre-compilation support), the Mono Project:
- Provides a superior development environment for writing Linux applications with unprecedented productivity.
- Allows developers to write rich client, web services and server-side applications and deploy them on Linux, Solaris, MacOS X, Windows NT/XP and various other Unix systems on a variety of architectures.
- Delivers tools that facilitate the creation of product APIs and SDKs that are language independent across multiple operating systems.
Current Users
Mono is currently being used internally at Novell to develop:
- iFolder 3.0: a file system that provides synchronization, peer-to-peer sharing and metadata handling.
- F-Spot: a photo management application.
- Extensibility for the Nautilus file manager and hooks into iFolder.
Outside of Novell, Mono is being used by many, including SourceGear which relies on it to run its Vault application on Linux and is also what OpenLink’s Virtuoso database uses for its cross platform .NET Runtime Hosting functionality.
Beta 1 Release Goals
This release is the first of two Mono 1.0 beta releases planned before our final release.
It is the first opportunity for developers outside of the contributing community to experience mono on their platform of choice. One of our main objective is to make it easy for the novice or experienced Linux or Windows developer to start building applications on Linux or other platforms right away.
We paid a lot of attention in this release to installation and package availability for the following platforms: Red Hat 9.0, Redhat Fedora Core 1, Novell SUSE 9.0, Novell SUSE SLES 8 and Microsoft Windows 2000 and XP.
This release is the first to see a split of Mono in thirty or so packages that allows for better distribution granularity. Meta-packages are available as well as some preview packages for 2.0 features such as System.Windows.Forms support.
In addition, Mono 1.0 Beta 1 is the first release to include the Global Assembly Cache.
Just like any Beta release, we welcome any bug report and suggestions.
Contents of the Beta 1
The Mono Beta 1 includes:
Core
- ECMA CLI-based virtual execution system.
- Java VM: allows Java and .NET code to run side-by-side.
- Optimizing compiler for x86, PowerPC, SPARC and S390 based architectures.
- Just-in-Time (JIT) and Ahead-of-Time (AOT) compilation modes supported.
- A new, faster interpreter for the above platforms and also for StrongARM and HPPA.
- Support for Linux, MacOS X, Windows, Solaris and HP-UX operating systems.
- C# 1.0 compiler.
- Development toolchain.
- API documentation browser, with Wiki-like collaborative support.
- Embeddable runtime: make your application scriptable and extensible with C# or any other .NET language using our embedding API.
Mono Stack
Microsoft .NET Compatible Stack
- Gtk# for GUI development.
- Database providers for: Postgress, MySQL, DB2, Sybase, Sqlite, Oracle.
- LDAP libraries (Novell.LDAP).
- Complete cryptography stack.
- Apache module integration.
-
Cairo graphics integration.
- ASP.NET Web Services.
- ASP.NET Web Forms.
- Binary and SOAP remoting.
- ADO.NET: connectivity to SQL Server and other databases.
In addition, we are also previewing a few features from the Mono 1.2 release:
- Preview C# 2.0 compiler with generics support (gmcs).
- Generics-enabled virtual machine.
- System.Windows.Forms is available in an early alpha form.
Installing Mono Beta
Binary Packages:
Pre-compiled packages for SUSE 9, SUSE 9.1, Red Hat 9, SLES 8 and Fedora Core 1 are available from our web site from the download section. A Red Carpet Mono channel is also available on these platforms.
Source code:
- Mono runtime
- MCS (Mono C# compiler)
- libgdiplus
- LibWine
- Gtk#
- Monodoc
- XSP ASP.NET host
- Apache module integration
Dependencies
If you are installing from source code, there are a few optional dependencies that you will want to consider installing.
- icu 2.6.1 Optional: for supporting string collation.
- Cairo 0.1.22 Required to install libgdiplus.
Quick source code installation:
If we have no packages for your platform, installing from source code is very simple (MacOS X users, read the rest of the notes):
mono:
tar xzf mono-0.91.tar.gz
cd mono-0.91
./configure
make install
Optional Packages
Libgdiplus and WineLib are optional packages, you only need those if you intent to use System.Drawing and Windows.Forms respectively.
libgdiplus:
tar xzf libgdiplus-0.5.tar.gz
cd libgdiplus-0.5
/configure
make install
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:
tar xzf winelib-0.2.tar.gz
cd winelib-0.2.tar.gz
./configure
make install
Changes since the 0.31 release
The following is a list of changes since the Mono 0.31 release:
Generics, Generics, Generics
This release implements the latest ECMA generics: its supported in both the C# compiler and the virtual machine. This is the first implementation outside of Microsoft.
To use this, you must install the preview packages (if using packages), or configure mono with the –with-preview=yes (if compiling from source code). That will install the 2.0 set of assemblies which includes the generics classes.
The generics compiler is called `gmcs’ as opposed to the standard 1.0 compiler `mcs’.
Runtime
The major change in this release is that Mono now has a Global Assembly Cache (GAC). The gacutil tool is now functional, and the runtime will pick assemblies from that directory (it will still pick assemblies from MONO_PATH, but we encourage you to strong name your assemblies and install them on the GAC).
The GAC introduction means that assemblies must be installed on it, and also be exposed to the compiler, this is done automatically for Mono libraries and for Gtk# libraries, but third party libraries will have to use a -lib: argument to the compiler.
To assist developers, we have added a -package flag to gacutil that does this for you automatically, like this:
gacutil -i MyLib.dll -package MyLib
It is now possible to include the dll to shared library remapping next to the assembly instead of registering all the mappings with the mono/etc/config. This allows developers to remap the P/Invoke libraries without having to modify the system configuration. The configuration file is just a .config file next to the assembly.
Java and IKVM
We have now integrated the JNI engine from Zoltan Varga to run IKVM out of the box with Mono, the packages include the JNI support as well as a Java VM: ikvm, you can run Java applications like this:
ikvm -cp app.jar org.demo.Main
Please visit the IKVM site for more information.
C# Compiler
Marek Safar contributed the CLS support to the C# compiler: now our C# compiler will properly flag errors where CLS compliance is not met as well as contributing a large test suite for these errors.
Assembly signing: as part of our move to support the GAC, Sebastien Pouliot added the delaysign[+ | -], /keyfile and /keycontainer options like CSC 8.x. and support to the compiler to sign assemblies and delay sign assemblies. |
The long missing support for generating pinned variables (used by the fixed statement) has been finally implemneted (thanks to Ben Maurer).
Raja Harinath and Ben also improved our regression test suite to log errors, and to better track the negative error test suite.
Cryptography and Security
On systems lacking /dev/random as a source of good random data, Bernie Solomon provided support for egd/prngd to get random data from.
Sebastien Pouliot did a few things: updated the support for System.Security.Principal. WindowsIdentity,WindowsImpersonationContext and WindowsPrincipal are now implemented and work on both Windows and Linux.
Key pairs containers are now secured on creation and their access control is also checked before being used. Key pair persistance is automatic only when a CspParameter object is used in the constructors of [DSA | RSA]CryptoServiceProvider. |
Mono.Security.dll has been FxCop-ized and is now CLS compliant.
Carlos Guzmán continued his work on our managed SSL/TLS implementation, now it support for exportable ciphers.
Atsushi Enomoto improved the XML Signature classes: Now it passes many of the tests in W3C “merlin” and “phaos” compatibility test suite (except for some missing stuff such as XPath here()), including prefixed XML instance and Manifest element.
Xml Digital Signature (System.Security.dll) now pass all 15 tests in Merlin’s suite. Microsoft implementation only pass 14 out of 15.
22 tests from the Phaos suite (out of 28 tests) also pass (note that 4 failures are due to unavailable algorithms in Fx 1.1, like HMACMD5 and exclusive C14N). Microsoft’s implementation scores 0 on this suite due to C14N bugs.
JIT ports
Neale Ferguson has contributed a code generator port for the IBM S390 architecture.
Paolo Molaro got the PowerPC port to completely self host, many bugs have been fixed and is getting closer to the state of the x86 JIT engine. Larger applications like MonoDoc and MonoDevelop run out of the box.
Zoltan Varga has improved the SPARC port, and its now on par with the x86 port with the exception of Thread.Abort.
System.Data
Juraj Skripsky contributed a new SQL expression parser and evaluator for the DataTable’s Select and Compute methods, it fixes several bugs, and is on par feature wise with the services offered by .NET’s implementation.
Atsushi Enomoto completed various missing pieces in System.Data to support fully the xsd.exe functionality. TypedDataSetGenerator is implemented and it can generate simple dataset that does not have relations. With existing data loader, DataSet.InferXmlSchema() is also implemented to accept .xml files in xsd.exe.
From Francisco Figueiredo: Npgsql now reports all informations about server errors, like, error number, file and severity. Note that this is only available in 7.4+ server versions.
New Interpreter
Bernie Solomon contributed a new implementation of the Mono interpreter. The new interpreter creates a new intermediate representation for the code it executes which avoids the expensive metadata lookups as well as caching plenty of information that before we had to track manually.
The new interpreter is on average three times faster than the old interpreter, which makes it suitable to use on platforms where the JIT was not available, and the old engine was too slow to be useful for large projects.
Performance
Atsushi Enomoto made the DTD parser two times faster and consume half the memory it used to before.
Andreas Nahr improved the performance of many core classes like Char.
Ben Maurer did a number of performance related improvements: reduced the size of our vtables by removing non-virtual methods from them; Tuned the C# compiler to produce better code for loops and various other constructs (smaller code, and it also assists the JIT); More efficient code is now generated for String.Concat; Redundant code in the JIT removed;
Internationalization
ICU is no longer a requirement to run most applications thanks to Jackson Harper: Mono now includes the datatables for international information directly into the runtime (Calendars, days of the week, names of days, punctuation, number formating, date formating, etc).
ICU is still required if you need string collation functionality.
JScript and VB.NET
Mainsoft contributed its runtime for Visual Basic written in Java, and a large collection of test suites for the Basic environment. Various developers started the porting effort to get the runtime rewritten in C#.
Cesar Lopez continued his work on the JScript engine, conditional statements, while and do statmeents and short-circuit statements are in.
Windows Forms, System.Drawing
Jordi, Ravindra and Sanjay have been hard at work to complete the System.Drawing API built on Cairo and FreeType2, it is mostly feature complete at this point.
Peter Bartok has continued his work on Windows.Forms, and many more applications run, most of the basic tests are now operational, and he is working now in a control-per-control basis to complete it.
Bug fixing, completion
On System.XML: There were many bugfixes that came from the Mainsoft developers: C# port of NIST DOM test collection, Gert Driesen’s NDoc on Mono challenge (now NDocConsole.exe is usable on Mono), xmldsig improvements.
Jean-Marc Andre checked in a new Soap formatter for Remoting, which addresses many problems.
Lluis Sanchez fixed many bugs in our WebServices stack as well as fixing many problems with connection pooling in Mono.Data.Tds and its user classes (SQL server access).
Eric Durand fixed a long standing set of problems with our Regular Expression’s implementation (parse and interpret Balancing construct as expected).
Finalizers were not running in version 0.31, this release fixes that problem
Known Issues
MacOS X
Need Boehm GC 6.3alpha5
The bundled Boehm GC does not work on MacOS X, you must obtain the latest release the Boehm GC from: http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/
We strongly recommend this version: gc6.3alpha5.tar.gz
It is very important that you configure the Boehm with thread support set to `pthreads’, like this:
./configure --enable-threads=pthreads
Failure to do so will result in random crashes and behavior.
Gtk# applications fail to start with `Cannot open font file for font Verdana 12’
This is only an issue if you are executing Gtk+ applications remotely from MacOS X. To solve this, use the following workaround:
export GDK_USE_XFT=0
IL assembler produces incorrect code
Will be fixed in an upcoming release.
Logging Bugs Against Mono
One of our main goal for releasing Beta software is of course to encourage developers to use our software and help us make it a stable, feature complete and reliable system. In order to achieve that goal, we ask you to report bugs as you find them. For this, you will need to create a Bugzilla Account.
How to make good bug reports
- Submit a test case, the smaller, the better.
-
Use http://bugzilla.ximian.com to report the bug.
In addition to bugzilla, posting to the list is fine if the bug merits larger exposure or design discussions to solve; posting to the list twice or more is just a way to annoy people and make them waste time, specially when you start a new thread about it.
- If the test involves libraries or assemblies that are not part of mono, add infomation on where to download all dependencies, and how to compile/install them.
-
If compiling the test case requires more than:
mcs test.cs provide the **full command line** you used to compile the test.
-
If running the test requires more than:
mono test.exe provide the **full command line** needed to replicate the bug.
- Provide info about the version of the software you’re using (both mono and the operating system or relevant libraries).
- Provide the output you expect the test case to produce.
- Provide the actual output you get from the test case.
Please include at least 6 items from the list in your bug report. Incomplete bug reports are very hard to understand, reproduce and fix.
Contributors
Mono would not be possible without the help of a large community of developers and users as well as the contributions of Mainsoft, OpenLink and SourceGear.
Individuals are at the core of the project development process, the Mono Beta 1 is brought to you by:
Aaron Weber, Adam Treat, Adrian Bunk, Ahmad Kadry, Ahmad Tantawy, Ajay Kumar Dwivedi, Alan Tam, Alberto Fernández, Albert Strasheim, Alejandro Sanchez, Aleksey Demakov, Aleksey Ryabchuk, Alexandre Pigolkine, Alex Graveley, Alon Gazit, Alp Toker, Alvaro del Castillo, Andreas Nahr, Andrew Birkett, Atsushi Enomoto, B Anirban, Benjamin Jemlich, Ben Maurer, Bernie Solomon, Brian Ritchie, Carlos A. Barcenilla, Carlos Alberto Cortes, Carlos Barcenilla, Carlos Guzmán Álvarez, Cesar López, Cesar Octavio Lopez Netaren, Charles Iliya Krempeaux, Chris Masters, Chris Podugriel, Christian Meyer, Christopher Bockner, Christopher Taylor, Chris Toshok, Daniel Keep, Daniel Kornhauser, Daniel Lewis, Daniel Lopez, Daniel Morgan, Daniel Stodden, Dave Bettin, David Sandor, David Sheldon, David Waite, Dennis Hayes, Dennis Hayes, Dick Porter, Diego Sevilla, Dietmar Maurer, Duco Fijma, Duncan Mak, Ed Thomson, Eduardo Garcia, Eran Domb, Eric Lindvall, Erik Dasque, Ettore Perazzoli, Fawad Halim, Francisco Figueiredo, Francisco Figueiredo Jr., Francois Beauchemin, Gaurav Vaish, Gert Driesen, Glen Parker, Gonzalo Paniagua, Guarav Vaish, Gustavo Giráldez, Hector E. Gomez Morales, Hector Gómez, Hussein Mehanna, Hye-Shik Chang, Inigo Illan, Jackson Harper, JaimeAnguiano, Jaime Anguiano, Jaime Anguiano, Jan Jaros, Jaroslaw Kowalski, Jason Diamond, Jear-Marc André, Jeff Seifert, Jeff Stedfast, Jeroen Janssen, Jeroen Zwartenpoorte, Jerome Laban, Jesper Pedersen, Jochen Wezel, Joel Basson, Joerg Rosenkranz, Joe Shaw, Johannes Roith, John Barnette, John Donagher, John Luke, John Sohn, Jonathan Gilbert, Jonathan Hogg, Jonathan Pryor, Jordi Mas, Joshua Tauberer, Juli Mallett, Juraj Skripsky, Kral Ferch, Kristian Rietveld, Larry Ewing, Laurent Guerby, Laurent Morichetti, Lawrence Pit, lb@lb.ods.org, Lee Mallabone, Leen Teolen, Lluis Sánchez, Mads Pultz, Malte Hildingson, Marco Cravairo, Marco Ridoni, Marek Safar, Mark Crichton, Mark Easton, Martin Baulig, Martin Willemoes, Martin Willemoes Hansen, Miguel de Icaza, Mike Kestner, Mr. Mandar, Nick Drochak, Nick Zigarovich, Oleg Tkachenko, Pablo Baena, Paolo Molaro, Patrik Torstensson, Pedro Abelleira Seco, Pedro Martinez, Pelle Johnsen, Per Arneng, Peter Bartok, Peter Teichman, Peter Williams, Peter Williams, Petr Danecek, Philipp Past, Philip Van Hoof, Phillip Pearson, Piers Haken, Pieter Philippaerts, Prajakt, Rachel Hestilow, Radek Doulik, Rafael Teixeira, Ravindra Kumar, Ravi Pratap, recht@netbsd.org, Reggie Burnett, Rhys Weatherly, Richard Thombs, Richard Torkar, Rodrigo Moya, Sachin Kumar, Sanjay Gupta, Sebastien Pouliot, Sergey Chaban, S Umadevi, Sunil Kumar, Thong Nguyen, Tim Coleman, Tim Coleman, Tim Hayes, Timothy Parez, Todd Berman, Ugo Albarello, Ultrich Kunitz, Urs Muff, Victor Vatamanescu, Ville Palo, Vladimir Kaluzhny, Vladimir Vukicevic, Vlad Kaluzhny, Wictor Wilen, Wojciech Polak, Yaacov Akiba Slama, Yaron Shkop, Zalman Stern, Zdravko Tashev, Zoltan Varga.
This list is not complete, but we will update it in the next few weeks, if your name is missing, please let us know.
Contact
For any direct feedback (excluding bug reports) regarding Mono 1.0 Beta 1 please contact monobeta@ximian.com
Other venues are available for discussion about Mono, including our mailing-lists and IRC channel (#mono on irc.gnome.org).