FAQ: Licensing

Licensing

Can I write commercial or proprietary applications that run with Mono?

Yes. The licensing scheme is planned to allow proprietary developers to write applications with Mono.

What license or licenses are you using for the Mono Project?

We use three open source licenses:

  • The C# compiler is dual-licensed under the MIT/X11 license and the GNU General Public License (http://www.opensource.org/licenses/gpl-license.html) (GPL).
  • The tools are released under the terms of the GNU General Public License (http://www.opensource.org/licenses/gpl-license.html) (GPL).
  • The runtime libraries are under the GNU Library GPL 2.0 (http://www.gnu.org/copyleft/library.html#TOC1) (LGPL 2.0).
  • The class libraries are released under the terms of the MIT X11 (http://www.opensource.org/licenses/mit-license.html) license.

Both the Mono runtime and the Mono C# Compiler are also available under a proprietary license for those who can not use the LGPL and the GPL in their code.

For licensing details, Contact the Mono team at Novell.

Why are the class libraries licensed under the MIT X11 license?

Originally, the class libraries were released under the terms of the GNU Library GPL (LGPL). The problem with the GNU LGPL is an outdated wording related to "derived works". A derived work of the library must be covered by the same license as the library itself. This definition was fine before object oriented frameworks existed, but with the introduction of object oriented frameworks, different people disagree whether some code that uses object-oriented inheritance is an instance of a "derived work".

The class libraries are a big component of Mono and it is where the most diverse group of individuals have contributed to.

Given the ambiguity, and given the chance that every author to the class libraries could have a different understanding of the terms of the license, we chose a license that was still an open source/free software license, but did not have these ambiguities.

The ambiguity would have allowed an author of the code would demand an application developer to release pieces of its source code based on a technicality, and we did not want to risk the future of Mono on this.

When do I need to obtain a license from Novell to the Mono Runtime?

We only require licensing for uses of Mono and Moonlight on embedded systems, or systems where you are unable to fulfill the obligations of the GNU LGPL.

For example, if you manufacture a device where the end user is not able to do an upgrade of the Mono virtual machine or the Moonlight runtime from the source code, you will need a commercial license of Mono and Moonlight.

Or if you ship an application that requires to statically link the Mono runtime and you are not able to provide the object code to relink Mono, you must obtain a commercial license from Novell.

Use our Contact form with the information about your needs to discuss this.

I would like to contribute code to Mono under a particular license. What licenses will you accept?

We will have to evaluate the licenses for compatibility first, but as a general rule, we will accept the code under the same terms of the "container" module.

Why does Novell require a copyright assignment?

When a developer contributes code to the C# compiler or the Mono runtime engine, we require that the author grants Novell the right to relicense his/her contribution under other licensing terms.

This allows Novell to re-distribute the Mono source code to parties that might not want to use the GPL or LGPL versions of the code.

Particularly embedded system vendors obtain grants to the Mono runtime engine and modify it for their own purposes without having to release those changes back.

Patents

Could patents be used to completely disable Mono?

First some background information.

The .NET Framework is divided in two parts: the ECMA/ISO covered technologies and the other technologies developed on top of it like ADO.NET, ASP.NET and Windows.Forms.

Mono implements the ECMA/ISO covered parts, as well as being a project that aims to implement the higher level blocks like ASP.NET, ADO.NET and Windows.Forms.

The Mono project has gone beyond both of those components and has developed and integrated third party class libraries, the most important being: Debugging APIs, integration with the Gnome platform (Accessibility, Pango rendering, Gdk/Gtk, Glade, GnomeUI), Mozilla, OpenGL, extensive database support (Microsoft only supports a couple of providers out of the box, while Mono has support for 11 different providers), our POSIX integration libraries and finally the embedded API (used to add scripting to applications and host the CLI, or for example as an embedded runtime in Apache).

The core of the .NET Framework, and what has been patented by Microsoft falls under the ECMA/ISO submission. Jim Miller at Microsoft has made a statement on the patents covering ISO/ECMA, (he is one of the inventors listed in the patent): here (http://web.archive.org/web/20030424174805/http://mailserver.di.unipi.it/pipermail/dotnet-sscli/msg00218.html)

Basically a grant is given to anyone who want to implement those components for free and for any purpose.

For people who need full compatibility with the Windows platform, Mono's strategy for dealing with any potential issues that might arise with ASP.NET, ADO.NET or Windows.Forms is: (1) work around the patent by using a different implementation technique that retains the API, but changes the mechanism; if that is not possible, we would (2) remove the pieces of code that were covered by those patents, and also (3) find prior art that would render the patent useless.

Not providing a patented capability would weaken the interoperability, but it would still provide the free software / open source software community with good development tools, which is the primary reason for developing Mono.

The patents do not apply in countries where software patents are not allowed.

For Linux server and desktop development, we only need the ECMA components, and things that we have developed (like Gtk#) or Apache integration.

With the new Novell/Microsoft agreement, will the patent policy change?

Mono is a community project, and as such, we will continue to implement the policy of not integrating knowingly infringing code into Mono.

And we will continue to follow the steps outlined in the previous topic if code that potentially infringes is found: finding prior art, finding different implementation techniques, or if none of those are possible, removing the code from Mono.

Are there alternatives to ASP.NET?

Yes, there are a number of alternatives that people have been using for developing Web applications that do not use the ASP.NET model: Jitsu (http://www.jitsu.org) and Dream (http://www.opengarden.org/dream).

You can see Dream in action at Wik.is (http:///mono.wik.is).

Are there alternatives to Windows.Forms?

Yes, there are plenty of alternatives, including Gtk# see our page on Gui Toolkits for more information.

Is Mono only an implementation of the .NET Framework?

Mono implements both the .NET Framework, as well as plenty of class libraries that are ethier UNIX specific, Gnome (http://www.gnome.org) specific, or that are not part of the .NET Framework but people find useful.

Mono can also be used a Java Virtual Machine via IKVM.

Credits


The FAQ contains material contributed by Miguel de Icaza, Jaime Anguiano, Lluis Sánchez.