Mono can be used to run Microsoft .NET applications on non-Microsoft platforms. It has an additional goal of making a better development environment for Linux software developers.
Mono consists of three groups of components:
Mono/Linux/GNOME development stack
Microsoft compatibility stack
The core components include the C# compiler, the virtual machine for the Common Language Infrastructure and the core class libraries. These components are based on the Ecma-334 and Ecma-335 standards, allowing Mono to provide a standards compliant, free and open source CLI virtual machine. Microsoft issued a statement that covers both standards under their Community Promise license.
The Mono/Linux/GNOME development stack provide tools for application development while using the existing GNOME and Free and Open Source libraries. These include: Gtk# for GUI development, Mozilla libraries for working with the Gecko rendering engine, Unix integration libraries (Mono.Posix), database connectivity libraries, a security stack, and the XML schema language RelaxNG. Gtk# allows Mono applications to integrate into the Gnome desktop as native applications. The database libraries provide connectivity to the object-relational database db4o, Firebird, Microsoft SQL Server (MSSQL), MySQL, Open Database Connectivity (ODBC), Oracle, PostgreSQL, SQLite, and many others. The Mono project tracks developing database components at its website.
The Microsoft compatibility stack provides a pathway for porting Windows .NET applications to GNU/Linux. This group of components include ADO.NET, ASP.NET, and Windows.Forms, among others. As these components are not covered by Ecma standards, some of them remain subject to patent fears and concerns.