什么是MONO
出处:华竹技术实验室 MONO研究组 http://sinoprise.com
Mono is an open-source project providing the necessary software to develop and run .NET client and server applications on Linux, Solaris, Mac OS X, Windows, and Unix.
Mono 1.0 was released over a year ago, in June 2004, and since then Mono has been taken up as the platform of choice for many open-source and commercial projects. See Mono in action:
The .NET platform is unique in many ways, one being its ability to host many languages. C#, Boo, and Java are just some of the languages supported by Mono.
Much of the original .NET 1.1 specification has been implemented in Mono. Most work today is going into implementing the changes in .NET 2.0, which has yet to be finalized by Microsoft. Here is the status of some of the core technologies:
What is Mono™ exactly?
The Mono Project is an open development initiative sponsored by Novell to develop an open source, UNIX version of the Microsoft .NET development platform. Its objective is to enable UNIX developers to build and deploy cross-platform .NET Applications. The project implements various technologies developed by Microsoft that have now been submitted to the ECMA for standardization.
The Mono Project has also sparked a lot of interest in developing C#-based components, libraries and frameworks. The most important ones, some of which were developed by the Mono team, are:
●Gtk# (http://gtk-sharp.sf.net): Bindings for the popular Gtk+ GUI toolkit for UNIX and Windows systems. Other bindings are available: Diacanvas-Sharp and MrProject.
●#ZipLib (http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx): A library to manipulate various kinds of compressed files and archives (Zip and tar).
Tao Framework: bindings for OpenGL
●Mono.Directory.LDAP / Novell.Directory.LDAP: LDAP access for .NET apps.
●Mono.Data: We ship support for PostgreSQL, MySql, Sybase, DB2, SqlLite, Tds (SQL server protocol) and Oracle databases.
●Mono.Cairo: Bindings for the Cairo (http://www.cairographics.org) rendering engine (Our System.Drawing is implemented on top of this).
●Mono.Posix / Mono.UNIX: Bindings for building POSIX applications using C#.
●Mono.Remoting.Channels.Unix: Unix socket based remoting
●Mono.Security: Enhanced security and crypto framework
●Mono.Math: BigInteger and Prime number generation
●Mono.Http: Support for creating custom, embedded HTTP servers and common HTTP handlers for your applications.
●Mono.XML: Extended support for XML
●Mangaged.Windows.Forms (aka System.Windows.Forms): A complete and cross platform, System.Drawing based Winforms implimentation.
●Remoting.CORBA (http://remoting-corba.sourceforge.net/): A CORBA implementation for Mono.
●Ginzu: An implementation on top of Remoting for the ICE (http://www.zeroc.com) stack
What is the difference between Mono and the .NET Initiative?
The ".NET Initiative" is a somewhat nebulous company-wide effort by Microsoft, one part of which is a cross-platform development framework. Mono is an implementation of the development framework, but not an implementation of anything else related to the .NET Initiative, such as Passport or software-as-a-service.
What technologies are included in Mono?
Mono contains a number of components useful for building new software:
● A Common Language Infrastructure (CLI) virtual machine that contains a class loader, Just-in-time compiler, and a garbage collecting runtime.
●A class library that can work with any language which works on the CLR. Both .NET compatible class libraries as well as Mono-provided class libraries are included.
●A compiler for the C# language. In the future we might work on other compilers that target the Common Language Runtime.
Windows has compilers that target the virtual machine from a number of languages: (http://msdn.microsoft.com/net/thirdparty/default.asp#lang) Managed C++, Java Script, Eiffel, Component Pascal, APL, Cobol, Perl, Python, Scheme, Smalltalk, Standard ML, Haskell, Mercury and Oberon.
The CLR and the Common Type System (CTS) enables applications and libraries to be written in a collection of different languages that target the byte code This means for example that if you define a class to do algebraic manipulation in C#, that class can be reused from any other language that supports the CLI. You could create a class in C#, subclass it in C++ and instantiate it in an Eiffel program. A single object system, threading system, class libraries, and garbage collection system can be shared across all these languages.
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 and 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 mono-licensing@novell.com (mailto:mono-licensing@novell.com)
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.
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): http://web.archive.org/web/20030609164123/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.
The controversial elements are the ASP.NET, ADO.NET and Windows.Forms subsets. Those are convenient for people who need full compatibility with the Windows platform, but are not required for the open source Mono platform, nor integration with today's Mono's rich support of Linux.
The Mono strategy for dealing with these technologies is as follows: (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.
Is Mono only an implementation of the .NET Framework?
Mono implements both the .NET Framework, as well as plenty of class libraries that are either UNIX specific, Gnome (http://www.gnome.org) specific, or that are not part of the .NET Framework but people find useful.
The following map shows the relationship between the components:
出处:华竹技术实验室 http://sinoprise.com
在GPL协议下发布的软件,如果你使用了程序的源代码,哪怕仅仅是当作运行库链进你的程序,你也要将你的程序开源。这是一个比较严格的开源协议,当然你仅仅使用程序二进制形式,没有这个要求。
相对于GPL协议,LGPL协议相对宽松一些,仅当你对在LGPL协议下发布的源码进行的更改,改变算法也好,更改结构也好,反正只要是更该了源码,那么必须把你改动的部分开源,注意,这里是将你改动的部分开源,而不是你的整个软件作品。
MIT开源协议没有对源码的使用作任何要求,但是作者保留了源码的版权,在你发布的软件源码中必须包含原MIT协议的声明。
Mono采用的是双许可协议,如果你不想开放你编写的代码,那么给mono-licensing@ximian.com发邮件,和他们联系。
Mono is an open-source project providing the necessary software to develop and run .NET client and server applications on Linux, Solaris, Mac OS X, Windows, and Unix.
Mono 1.0 was released over a year ago, in June 2004, and since then Mono has been taken up as the platform of choice for many open-source and commercial projects. See Mono in action:
The .NET platform is unique in many ways, one being its ability to host many languages. C#, Boo, and Java are just some of the languages supported by Mono.
Much of the original .NET 1.1 specification has been implemented in Mono. Most work today is going into implementing the changes in .NET 2.0, which has yet to be finalized by Microsoft. Here is the status of some of the core technologies:
What is Mono™ exactly?
The Mono Project is an open development initiative sponsored by Novell to develop an open source, UNIX version of the Microsoft .NET development platform. Its objective is to enable UNIX developers to build and deploy cross-platform .NET Applications. The project implements various technologies developed by Microsoft that have now been submitted to the ECMA for standardization.
The Mono Project has also sparked a lot of interest in developing C#-based components, libraries and frameworks. The most important ones, some of which were developed by the Mono team, are:
●Gtk# (http://gtk-sharp.sf.net): Bindings for the popular Gtk+ GUI toolkit for UNIX and Windows systems. Other bindings are available: Diacanvas-Sharp and MrProject.
●#ZipLib (http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx): A library to manipulate various kinds of compressed files and archives (Zip and tar).
Tao Framework: bindings for OpenGL
●Mono.Directory.LDAP / Novell.Directory.LDAP: LDAP access for .NET apps.
●Mono.Data: We ship support for PostgreSQL, MySql, Sybase, DB2, SqlLite, Tds (SQL server protocol) and Oracle databases.
●Mono.Cairo: Bindings for the Cairo (http://www.cairographics.org) rendering engine (Our System.Drawing is implemented on top of this).
●Mono.Posix / Mono.UNIX: Bindings for building POSIX applications using C#.
●Mono.Remoting.Channels.Unix: Unix socket based remoting
●Mono.Security: Enhanced security and crypto framework
●Mono.Math: BigInteger and Prime number generation
●Mono.Http: Support for creating custom, embedded HTTP servers and common HTTP handlers for your applications.
●Mono.XML: Extended support for XML
●Mangaged.Windows.Forms (aka System.Windows.Forms): A complete and cross platform, System.Drawing based Winforms implimentation.
●Remoting.CORBA (http://remoting-corba.sourceforge.net/): A CORBA implementation for Mono.
●Ginzu: An implementation on top of Remoting for the ICE (http://www.zeroc.com) stack
What is the difference between Mono and the .NET Initiative?
The ".NET Initiative" is a somewhat nebulous company-wide effort by Microsoft, one part of which is a cross-platform development framework. Mono is an implementation of the development framework, but not an implementation of anything else related to the .NET Initiative, such as Passport or software-as-a-service.
What technologies are included in Mono?
Mono contains a number of components useful for building new software:
● A Common Language Infrastructure (CLI) virtual machine that contains a class loader, Just-in-time compiler, and a garbage collecting runtime.
●A class library that can work with any language which works on the CLR. Both .NET compatible class libraries as well as Mono-provided class libraries are included.
●A compiler for the C# language. In the future we might work on other compilers that target the Common Language Runtime.
Windows has compilers that target the virtual machine from a number of languages: (http://msdn.microsoft.com/net/thirdparty/default.asp#lang) Managed C++, Java Script, Eiffel, Component Pascal, APL, Cobol, Perl, Python, Scheme, Smalltalk, Standard ML, Haskell, Mercury and Oberon.
The CLR and the Common Type System (CTS) enables applications and libraries to be written in a collection of different languages that target the byte code This means for example that if you define a class to do algebraic manipulation in C#, that class can be reused from any other language that supports the CLI. You could create a class in C#, subclass it in C++ and instantiate it in an Eiffel program. A single object system, threading system, class libraries, and garbage collection system can be shared across all these languages.
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 and 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 mono-licensing@novell.com (mailto:mono-licensing@novell.com)
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.
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): http://web.archive.org/web/20030609164123/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.
The controversial elements are the ASP.NET, ADO.NET and Windows.Forms subsets. Those are convenient for people who need full compatibility with the Windows platform, but are not required for the open source Mono platform, nor integration with today's Mono's rich support of Linux.
The Mono strategy for dealing with these technologies is as follows: (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.
Is Mono only an implementation of the .NET Framework?
Mono implements both the .NET Framework, as well as plenty of class libraries that are either UNIX specific, Gnome (http://www.gnome.org) specific, or that are not part of the .NET Framework but people find useful.
The following map shows the relationship between the components:
出处:华竹技术实验室 http://sinoprise.com
在GPL协议下发布的软件,如果你使用了程序的源代码,哪怕仅仅是当作运行库链进你的程序,你也要将你的程序开源。这是一个比较严格的开源协议,当然你仅仅使用程序二进制形式,没有这个要求。
相对于GPL协议,LGPL协议相对宽松一些,仅当你对在LGPL协议下发布的源码进行的更改,改变算法也好,更改结构也好,反正只要是更该了源码,那么必须把你改动的部分开源,注意,这里是将你改动的部分开源,而不是你的整个软件作品。
MIT开源协议没有对源码的使用作任何要求,但是作者保留了源码的版权,在你发布的软件源码中必须包含原MIT协议的声明。
Mono采用的是双许可协议,如果你不想开放你编写的代码,那么给mono-licensing@ximian.com发邮件,和他们联系。