Ieri ho guardato un po' in giro, e mi pare di leggere sostanzialmente pareri positivi... qui trovi una risposta del capo del progetto, qui una lista di ditte che usano Mono. Qui le feature di .NET supportate (sostanzialmente tutto fino al .NET Framework 4, esclusi WPF, WCF, WWF); in ogni caso, per verificare se si usano features non supportate da Mono esiste il MoMA, che analizza applicazioni .NET per verificare la compatibilità con Mono.
Ovviamente, come sempre accade, nel momento in cui passi ad un'implementazione diversa di delle API possono saltare fuori bug del tuo programma (che magari implicitamente faceva affidamento su dettagli implementativi "non contrattuali" del .NET Framework), ma tutto sommato testare il proprio software su due implementazioni diverse del framework può essere utile proprio per scovare questi bug che potrebbero saltare fuori con future versioni del .NET Framework.
Personalmente, vedo bene l'uso di Mono principalmente in questi scenari:
- sviluppo web, in cui si usano molto più di rado componenti native/PInvoke (che ovviamente in genere sono Windows-only), per cui si può mettere in piedi un server Apache/mod_mono senza problemi di licenze;
- sviluppo ex-novo di applicazioni desktop multipiattaforma in C#, usando come toolkit grafico le GTK#;
- porting "brutale" di applicazioni Windows Forms esistenti su Linux e Mac OS X - ovviamente avranno un look "fuori posto" rispetto al resto del sistema, ma è notevole che spesso si possa portare la propria applicazione su altre due piattaforme con sforzi estremamente ridotti.
Altro fatto interessante, finché si sta fuori dalle "zone non coperte", si può tranquillamente continuare ad usare Visual Studio per lo sviluppo, visto che Mono usa il medesimo formato per i suoi eseguibili, per cui si può continuare ad usare tool di sviluppo maturi e a cui si è abituati per il grosso del lavoro.