Eu posso dar a você a perspectiva de alguém que desenvolveu um aplicativo de código aberto encontrado no Ubuntu (widemargin) usando C # e Mono. O Mono é muito maduro e suas bibliotecas principais estão completas.
Para desenvolvimento, eu recomendaria o MonoDevelop, que é um IDE de código aberto e gratuito, como o Visual Studio.
Existem algumas bibliotecas da Microsoft que não funcionam no Ubuntu. Estas são principalmente bibliotecas GUI (winforms funciona mas não bem, o WPF não funciona de todo). Isso é por design. Estas são bibliotecas GUI nativas do Windows e assim ficariam horríveis no Ubuntu de qualquer forma.
Se você estiver desenvolvendo um aplicativo de desktop, recomendo que use o Gtk #, que é o C # bindings do framework GTK + nativo no Ubuntu. Isso lhe dará um aplicativo completamente nativo no Ubuntu.
Se você estiver interessado em aplicativos de plataforma cruzada, o C # é o único idioma que você pode usar no Windows, no Linux, no OS X, no iOS, no Android e no WP7. As pessoas do Mono recomendam que você escreva uma nova GUI para cada plataforma usando ligações para APIs nativas (como Gtk # no Ubuntu) e compartilhe o código para seu backend. Isso significa que seu aplicativo parecerá nativo em cada plataforma.
O Learning C # também permitirá que você:
- desenvolver para o novo PlayStation Suite, que é apenas o C #,
- crie jogos com unity3d (no script de jogos é C #),
- crie jogos como Bastion, que usam monogame,
- desenvolva sites usando o asp.net MVC (em que este site é executado).