El proyecto MONO ha sido propuesto por Miguel de Icaza para crear un entorno de desarrollo y producción utilizando alguna de las tecnologías propuestas en la arquitectura .NET.
Básicamente el proyecto MONO ha comenzando con un compilador de C#. La idea inicial es explorar hasta que punto el lenguaje C# y la arquitectura propuesta para su máquina virtual (VM) puede ser una opción que mejore las condiciones de producción de los desarrolladores de software libre.
Como lenguaje de programación C# recuerda mucho al lenguaje JAVA. Hay varios factores que han hecho que C# genere un interés en la comunidad de desarrolladores. La primera es que las especificaciones del lenguaje están siendo estandarizadas por la ECMA desde el principio. Esta ya es un hecho excepcional viniendo de Microsoft.
Otra parte interesante de usar C# es el conjunto de clases que lleva asociado. La idea es que este conjunto de clases permita realizar cualquier tipo de programación. La parte innovadora es que estas clases, y en general el uso de librerías, esta también normalizado de modo que estas pueden ser utilizadas por otros lenguajes. Para que estas librerías puedan ser utilizadas estos lenguajes tienen que tener compiladores que generen CLI.
Además C# tiene una gestión de memoria y recolección de memoria no usada que le hace muy interesante. Realmente esta opción esta implementada en la máquina virtual que ejecuta el código CLI generado.
El compilador de C# del proyecto MONO esta siendo desarrollado en C#. De las múltiples alternativas para realizar el compilador se ha elegido ésta por razones "educativas". Desarrollar un compilador es un ejercicio de programación complicado y hacerlo en el lenguaje que se esté implementando hace que se descubra todo el potencial que tiene dicho lenguaje.
Existen otros proyectos libres interesados en la creación de un compilador de C#, pero no ha habido una convergencia por disparidad de criterios o herramientas utilizadas.
Aunque C# va a ser el primer lenguaje soportado por el compilador del proyecto MONO, ya se están empezando a implementar otros lenguajes como VB Object. No esta previsto de momento el soporte de otros lenguajes en el compilador pero la arquitectura actual de MONO permite con bastante facilidad que se puedan integrar otros lenguajes gestionados como Python .NET o Perl .NET .