Nelle parole di Microsoft, il .Net Framework è costituito dalle seguenti parti:
* Common Language Runtime or CLR, which provides an abstraction layer over the operating system
* Base Class Libraries, which are pre-built code for common low-level programming tasks
* Development frameworks and technologies, which are reusable, customizable solutions for larger programming tasks
Mono è una piattaforma software progettata per consentire agli sviluppatori di creare facilmente applicazioni multipiattaforma. Sponsorizzato da Novell (http://www.novell.com/), Mono è un'implementazione open source di Microsoft .NET Framework basata sugli standard ECMA per C # e Common Language Runtime.
Fornisce un supporto decente per il CLR ma manca l'ampiezza di "Base Class Libraries" e "Development frameworks & technologies". Ciò è particolarmente vero se si considera l'enorme ecosistema di Java. Quest'ultimo ha raggiunto un livello di maturità ed è supportato da una pletora di pubblicazioni (Wiki, Guide per l'utente, Libri, Articoli, ecc.). Infine, ci sono stati un certo numero di nuovi linguaggi (ad esempio Groovy, Scala) e framework (ad esempio Grails, Spring Roo, GWT) che possono rendere la tua squadra enormemente produttiva in una vasta area di domini funzionali.
L'unica avvertenza sarebbe, ovviamente, se è necessario integrare i prodotti Microsoft (ad esempio Microsoft Office) nella propria applicazione (sia all'interno del browser o in un'app standalone). In tal caso l'approccio .NET ti darebbe un vantaggio significativo ma sarebbe non essere facile da trasferire su questi vantaggi ad altre piattaforme (ad es. Linux).
L'ecosistema Java è enorme e contiene librerie di alta qualità per praticamente tutto ciò che si può pensare. Infatti, prima di iniziare a scrivere la tua app, dovresti condurre una ricerca attraverso i progetti Open Source che sono stati scritti in Java. È molto probabile che ciò che stai cercando di costruire sia molto simile a qualcosa che esiste già. Quindi, a seconda della licenza (cerca LGPL, BSD, MIT, ecc.), Potresti trovare qualcosa per iniziare prima ancora di rompere un sudore.
In sintesi, se il tuo obiettivo principale è raggiungere il supporto multipiattaforma, allora Java è la soluzione migliore.