Project Monkey
Mono is the name of an open source project started by Ximian supported by Microsoft and currently promoted by Novell (after the acquisition of Ximian) to create a group of free tools, based on GNU/ Linux and.NET compatible as specified by ECMA.
Mono has important components useful for developing software:
- A common language infrastructure virtual machine (CLI) that contains a class charger, a runtime compiler (JIT), and memory collection routines.
- A classroom library that can work in any language that works in the CLR (Common Language Runtime).
- A compiler for C#, Visual Basic, Java and Python.
- The CLR and the Common Type System (Common Type System-CTS) allows the application and libraries to be written in a wide variety of different languages that compile for byte code
- This means that if, for example, a class that performs algebraic manipulation in C# is defined, it can be reused in any language compatible with CLI. You can create a class in C#, a sub-class in C++ and place that class in an Eiffel program.
- A unique object system, thread system, class libraries and memory collector system can be shared by all these languages.
- It is an independent project of the platform. Currently Mono works in GNU/Linux, OpenBSD, FreeBSD, UNIX, Mac OS X, Solaris and Windows platforms.
There is a similar project, called Portable.NET, which is part of the dotGNU project.
History
As soon as Microsoft published the documents specifying the.NET architecture in December 2000, Miguel de Icaza (co-founder of the Ximian company and the GNOME Foundation) became interested in them.
GNOME had always struggled to provide facilities to the programmer, and one of the best known features is that there are many bindings to be able to use any programming language to develop applications. But the creation of these bindings was tremendously laborious and every time a change was made in the original interface, it was necessary to change each and every one of the bindings.
To try to improve and facilitate code reuse, a component implementation, called Bonobo, was made using CORBA. But it has not been successful either, since it was necessary for all software to use that feature and that was not the case. Therefore, with.NET a new door opens to make GNOME a better and more attractive desktop for both users and programmers in the future. With this technology, what the GNOME project had always sought is finally achieved, independence of the language to program on said desktop.
Miguel de Icaza, after analyzing the byte code interpreter, notes that there are no specifications. In February 2001, he began to search for such information on the.NET mailing lists and at the same time began to work on a C# compiler in cooperation with Rhys Weatherley and Jay Freeman, it was programmed in C# as an exercise to demonstrate its power.
In April 2001, ECMA publishes the missing file format and at GUADEC (April 6-8, 2001) Icaza demonstrates his compiler skills. After a thorough analysis, where it is clearly concluded that it is possible to build such a technology, Ximian reassigns human resources from other projects and creates the Mono team. Aspiring to have a tool that would be a complete replacement for.NET technology, they formed The Mono Open Source Project, which was announced in July 2001, at the O'Reilly conference.
3 years passed until June 30, 2004 Mono 1.0 was finally released.
Components
Class Libraries
Class libraries provide a set of facilities that aid application development. They are first written in C#, but thanks to the Common Language Specification (CLS), they can be called in any other.NET language. The class libraries are structured in namespaces (namespaces) and put into production in shared libraries called assemblies or assemblies. When we talk about the.NET framework, we are referring first of all to class libraries.[JAC]
Namespaces and Assemblies
Namespaces are a mechanism that allows similar classes to be logically grouped together in a hierarchical structure, thus avoiding name conflicts. The structure is implemented using words separated by periods. For example, System.IO or System.Net bundle the classes for file access and network communications, respectively.
Assemblies are the physical package of class libraries. They are files with a.dll extension, like Windows libraries. Examples of libraries are mscorlib.dll, System.dll, System.Data.dll.
Namespaces are typically made up of many assemblies, and an assembly can be made up of many files.
Common Infrastructure Language (CLR)
The Common Language Infrastructure or more commonly called the Common Language Runtime (CLR) is implemented by the Mono executable. The runtime is used to run.NET compiled applications. This common infrastructure language is defined in the ECMA and ECMA-335 standards. To execute an application, the runtime must be invoked with the appropriate parameters.
Common Specification Language (CLS)
It is specified in the ECMA-335 standard and defines the interface with the CLR. For example, conventions about the data type to use to implement the enums. The Mono compiler generates a CLS-compliant image, this image is encoded in the so-called Common Intermediate Language (CIL) or Common Intermediate Language. The Mono runtime takes that image and runs it.
Mono and Microsoft patents
Mono's implementation of those.NET components not submitted to ECMA for standardization has raised some concerns about potential software patent infringement during the life of the project. In particular, the discussion raged over whether or not Microsoft could destroy the mono project by suing the infringed patents.
There is currently a lively debate about the (in)advisability of accepting and using Mono in the GNU/Linux developer community. The main arguments against Mono are:
- It's not free of software patents.
- There is a risk that Microsoft will require licenses to use C# / CLI.
On the other hand, the Gnome project is developing an alternative language, Vala, created specifically to develop applications for Gnome, but free from potential threats from Microsoft.
Contenido relacionado
Home automation
Linker
Classification