Mono Project Roadmap

From Mono

Last update: May, 2007

Table of contents

Introduction

This document describes the high-level roadmap for Mono (http://www.go-mono.com).

The Mono project started in 2001 as an effort to implement the .NET Framework to Unix. To bring both the new programming model based on the Common Language Infrastructure and C# as well as helping people migrate their existing knowledge and applications to Unix. Mono today supports a wide variety of operating systems, CPUs and a large chunk of the functionality available in the .NET Framework.

This document outlines the roadmap for the Mono project from my perspective: what we can effectively deliver on the dates outlined. Since Mono is a large open source project, things might change and new features can be incorporated into the plan if external sources devote enough attention to those problems.


Background


So far Microsoft has published five versions of the .NET Framework: 1.0, 1.1, 2.0, 3.0 and 3.5.

1.1 was an incremental update over 1.0.

2.0 was a considerable expansion on the features of it.

In addition, an "add-on" to the core of .NET has been released, called ".NET 3.0", but it does not touch the core. It is a set of new APIs and extensions that run on top of a .NET 2.0 installation.

.NET 3.5 is the actual heir to .NET 2.0, and it contains updates to the core libraries (small bits) and new assemblies (like System.Core).

The Mono project has been tracking some of the improvements available in those releases, some of the highlights of our work so far are:

  • Core: mscorlib, System and System.XML assemblies. These support both the 1.x and 2.0 profiles. Work is underway to complete the 2.0 profile.
  • ADO.NET: System.Data and various other database providers, they are 1.x complete, and most of 2.x is complete
  • ASP.NET 1.x and 2.x: WebForms and Web Services are supported. Only WebParts are missing from our 2.x support.
  • System.Security support 1.1 features and has partial support for 2.0 (like XML encryption) but the S.S.C.Pkcs namespace is still imcomplete.
  • DirectoryServices implemented on top of Novell.LDAP
  • Compilers: C# 1 and 2 as well as bits of 3, VB.NET 8 and various command line tools that are part of the SDK.
  • Transaction support, we have some partial support but currently no plans exist beyond the current implementation (see the notes on its implementation and limitations).
  • Open Source, Unix and Gnome specific libraries, see our Plans page for more details.

There are certain features that we are not planning on supporting and are available either as stubs (to allow other code to compile or to satisfy dependencies) or are not even present in Mono, these include:

Support for designers in Windows.Forms and ASP.NET for the majority of Mono provided controls does not exist. This is due to the lack of tools for designing Windows.Forms and ASP.NET components in Mono today. When designer surfaces are completed (there are work in progress for both of them) work on this areas will resume.

Designer support is only needed at development-time, this is not something that is required to run the applications on Unix. Many applications that are reported through the Mono Migration Analysis tool reports these problems and can be safely ignored.

Some components exist that were once developed but are no longer actively developed, these include:

See the following sections for more details on plans for 2.0, 3.0 and 3.5 APIs.

Mono release strategy

The levels of maturity of Mono fluctuate depending on the development effort we have put into it, and the use we have given to them. For example, the virtual machine and the C# compiler very mature, while less commonly used functionality in Mono like Windows.Forms or VB.NET are still under heavy development.

Our strategy is to release the mature components as Mono 1.0, and have upcoming versions of Mono add extra functionality.

Mono 1.0 goals

The Mono 1.0 release would include the following components:

  • C# compiler.
  • VM, with JIT and pre-compiler.
  • IL assembler, disassembler.
  • Development and security tools.
  • Core libraries: mscorlib, System, System.XML.
  • System.Data and Mono database providers.
  • System.Web: Web applications platform and Apache integration module.
  • System.Web.Services: client and server support.
  • System.Drawing.
  • System.DirectoryServices
  • JIT support: x86, SPARC and PPC architectures (interpreter available for other architectures).
  • ECMA profiles: special build options to build Mono as an implementation of the various ECMA profiles will be available.
  • Java integration through IKVM.
  • Embedding interface for the runtime.

Packaging:

  • mono: will contain the above features implementing the .NET 1.1 API.
  • mono-1.0-compat: Will include a build of the libraries with the .NET 1.0 API, this is a compatibility build for people running .NET 1.0 applications.
  • mono-unstable: Will contain a snapshot of the other technologies under development for developer's convenience, but will be unsupported at this time. These include the Generics edition of the C# compiler.
  • mono-ecma: A build that only includes the ECMA components.

Released on June 30th, 2004.

Bug fix releases would be done on a monthly basis.

For a detailed list, see the Mono 1.0 feature list. (http://www.go-mono.com/archive/1.0)

Microsoft's .NET 2.0

To understand post 1.0 editions of Mono, it is important to put it into perspective .NET 2.0 which was released in November 2005.

The new features in .NET 2.0 include:

  • Generic types These introduce changes to the compiler, runtime and class libraries.
  • C# 2.0 Many new additions to the language.
  • ASP.NET 2 Many tools to simplify web application development: Master pages, new controls for common operations, personalization and themes.
  • Remoting New security channels and version-resistant remoting (good news in the interop department).
  • XML Relatively small changes and improvements which Mono has currently. Mono in addition will ship an XQuery processor.
  • Networking FTP client, Ssl streams.
  • Console and Serial ports:
    Console terminal input/output is available as well as serial port handling.
  • Windows.Forms Layout containers finally appeared on Windows.Forms as well as various new controls.

Current Mono Release

Mono 1.2

Mono 1.2 is a release that supports the .NET 1.1 APIs for all the areas supported in Mono (core, XML, ADO.NET, ASP.NET, Windows.Forms, compilers, tools). For details, see the Mono 1.2 Release Notes (http://go-mono.com/archive/1.2/)

Mono 1.2 is an incremental upgrade to Mono 1.0, and contains the following new features:

  • Generic types support: C# compiler, execution system and core class libraries (C# 2.0)
  • gtk# 2.0 (includes support for gtk 2.12)
  • Numerous scalability and performance enhancements

Mono 1.2 also include assemblies from .NET 2.0 and these are available as technology previews:

  • ADO.NET 2.0
  • Most of mscorlib and System.dll
  • Console and Serial ports support

Released on: November 9, 2006.

There are various milestone branches in this release, see our Branches page for more details.

Mono 1.9

Since the release in November 9th of 2006 of Mono 1.2, we have made seven incremental updates to Mono (1.9 (http://www.go-mono.com/archive/1.9)), The highlights since then include:

  • VB.NET compiler and runtime were released.
  • Windows.Forms 2.0 feature-complete.
  • 2.0 support completed for Web Services (Generics).
  • ASP.NET WebForms are complete (except for WebParts).
    • Support for ASP.NET AJAX.
  • Release of Mono Migration Assistant.
  • C# 3.0 support and System.Core assembly
  • LINQ to Objects
  • LINQ to XML.
  • System.Media implemented.
  • HTTPS support in HttpListener.
  • 2.0 Socket API.
  • Improved fidelity and performance of System.Drawing, added support for Metafiles.
  • Mono's MSBuild is able to build projects.
  • SafeHandles and HandleRef support.
  • MIPS, Alpha ports and Solaris/amd64 ports.
  • Mono can now run without shared memory segments.
  • New Mono.DataConvert library
  • ADO.NET 2.0 updates, and support for output parameters on stored procedures.
  • installvst tool for installing ASP.NET starter kits.
  • New Sqlite bindings.
  • COM/XpCOM support.
  • Packages available (http://download.opensuse.org/repositories/Mono:/Community/) for many popular applications.

Release notes with all the details:

  • Mono 1.2.1 (http://www.go-mono.com/archive/1.2.1)
  • Mono 1.2.2 (http://www.go-mono.com/archive/1.2.2)
  • Mono 1.2.3 (http://www.go-mono.com/archive/1.2.3)
  • Mono 1.2.4 (http://www.go-mono.com/archive/1.2.4)
  • Mono 1.2.5 (http://www.go-mono.com/archive/1.2.5)
  • Mono 1.2.6 (http://www.go-mono.com/archive/1.2.6)
  • Mono 1.9 (http://www.go-mono.com/archive/1.9)

Upcoming Releases

The release numbers described here are going to be changed as we shuffle around some of the features and their ship dates.

Mono 2.0

Mono 2.0 will mark the time when the class libraries have complete support for the new features in the 2.0 edition of the framework.

The last release before Mono 2.0 is now available as Mono 1.9 (http://www.go-mono.com/archive/1.9)

Notice that Mono 1.1.x already contains many of the 2.0 features and class libraries, there are just no guarantees that they are complete, you will have to compile and test your application with Mono (using the gmcs compiler instead of mcs).

Current planned features:

  • Complete core class libraries support.
    • Complete ASP.NET 2.0 support (minus mobile support).
    • Complete ADO.NET 2.0 support.
    • Windows.Forms 2.0.
  • C# 3.0
    • LINQ to Objects.
    • LINQ to XML.
  • Visual Basic Compiler (VBNC)
  • Tools for Windows Developers (Moma, Gendarme for portability).
  • Debugger for 1.x and 2.x (generics, anonymous methods, iterators, lambdas).
  • Windows.Forms 2.0
    • GInterface support.

Release target: Q2/2008.

Mono 2.2

Current planned features:

  • Compacting GC
  • 2.0 APIs.
    • Native theme engine for Windows.Forms.
    • New JIT optimizations, based on linear-ir branch/greg work.
  • LINQ support
    • Add LINQ to DB
  • Updated System.Drawing to use Pango.
  • WCF preview

Previews/Beta releases for:

Release Target: Q4/2008

Subprojects projects

Other projects like the debugger, the documentation browser, Java integration through IKVM, Olive and Gtk# will remain on their own schedules. This page will be updated to contain that information when it becomes available.

Mono and .NET 3.0

.NET 3.0 includes a number of new components:

  • Avalon (WPF), a new framework for GUI applications.
  • Indigo (WCF), an RPC system.
  • Workflow (WWF)
  • Cardspace, an identity system

Some of these technologies are being implemented as part of the Olive project, see the Olive page for more details.

Mono and LINQ (.NET 3.5)

Like .NET 3.0 it seems that .NET 3.5 will be merely a collection of new assemblies that will be built on top of the .NET 2.0 runtime engine.

Some features from .NET 3.5 and C# 3.0 have already been implemented and are part of the Mono 1.9 release (and will be part of the 2.0 final release).

Mono and Silverlight

See our page on Moonlight for details on the work underway to support Silverlight with Mono.

Unsupported technologies

Some technologies are very hard to implement or are being phased out by components in the Longhorn time frame. In some cases, we feel that they are not crucial to the future of the open source desktop.

System.EnterpriseServices and System.Management come to mind, and we are unlikely to put any resources into the task. We would gladly host the code if someone cares to implement it, but they would likely remain unsupported features of Mono.

A limited subset of Code Access Security is available on Mono 1.2. However as long as it is not completed (missing features and class libraries permissions) and audited (runtime, code generation and class libraries) CAS won't be supported.

Mono Developer Strategy

Mono Developers should read the Mono Hacking Roadmap

Previous Goals

Mono 1.0 goals

The Mono 1.0 release would include the following components:

  • C# compiler.
  • VM, with JIT and pre-compiler.
  • IL assembler, disassembler.
  • Development and security tools.
  • Core libraries: mscorlib, System, System.XML.
  • System.Data and Mono database providers.
  • System.Web: Web applications platform and Apache integration module.
  • System.Web.Services: client and server support.
  • System.Drawing.
  • System.DirectoryServices
  • JIT support: x86, SPARC and PPC architectures (interpreter available for other architectures).
  • ECMA profiles: special build options to build Mono as an implementation of the various ECMA profiles will be available.
  • Java integration through IKVM.
  • Embedding interface for the runtime.

Packaging:

  • mono: will contain the above features implementing the .NET 1.1 API.
  • mono-1.0-compat: Will include a build of the libraries with the .NET 1.0 API, this is a compatibility build for people running .NET 1.0 applications.
  • mono-unstable: Will contain a snapshot of the other technologies under development for developer's convenience, but will be unsupported at this time. These include the Generics edition of the C# compiler.
  • mono-ecma: A build that only includes the ECMA components.

Released on June 30th, 2004.

Bug fix releases would be done on a monthly basis.

For a detailed list, see the Mono 1.0 feature list. (http://www.go-mono.com/archive/1.0)


Comments

Feel free to send your comments or questions the roadmap to mono@novell.com (mailto:mono@novell.com)