"Mono can't run .NET apps."
Wow, that's funny. I must be on acid, because I thought I just compiled a .NET app in Visual Studio, copied it to Linux, and literally ran the Portable Executable file (.EXE) with Mono.
"Probably you would have to code in a subset of Mono, this coupled with the fact that Mono will always play catch up to .NET means that developing cross-platform apps in Mono will always place severe restrictions on you."
Let's see how true this is:
http://mono-project.com/Compatibility
So here's what's missing:
CodeContracts - API complete, partial tooling
EntityFrameworks - Not available.
Server-side OData - Depends on Entity Framework.
WCF - silverlight 2.0 subset completed
WPF - no plans to implement
WF - Will implement WF 4 instead on future versions of Mono.
System.Management - does not map to Linux
System.EnterpriseServices - deprecated
So other than the above Microsoft specific technology plus Entity Framework (use NHibernate instead), the entire C# 4.0, .NET 4.0, and ASP.NET 4.0 platforms are supported. Oh, and what really matters is ISO/IEC 23271:2006 and ISO/IEC 23270:2006... you know the ISO standards that Mono implements.
So basically, your entire point against Mono as a multi-platform solution for ISO standards based .NET development is bullshit. The few libraries that are limited on Mono aren't that critical for applications, web, or backend development. WinForms is supported, ASP.NET is supported, and services (as console apps) are supported.