Te equivocas, MAXIUM. El proyecto Mono no se está desarrollando mediante ingeniería inversa, sino a través de la especificación ECMA-335, ISO/IEC 23271, la cual fue impulsada inicialmente por Micro$oft, aunque ella misma se la salta cuando le conviene (véase .NET 3.x, por ejemplo). Y no hace falta adivinar cómo lo están implementando: sólo hay que mirar el código fuente y la documentación, puesto que es un proyecto de código abierto.
Respecto al cáos en el lenguaje Java, me refiero a que existen multitud de paquetes que sirven para lo mismo (por ejemplo, para crear entornos gráficos), lo que al final "obliga" a tener instaladas mil cosas, una por cada aplicación. Claro que esto no es exclusivo de Java, porque a GNU/Linux (por poner sólo un ejemplo) le pasa lo mismo en algunas áreas, que hay tantas bibliotecas que al final no se sabe cuál hay que instalar para que funcione tal o cual programa.