The compilers are different: one it Microsoft proprietary, another on is Open Source Mono.
You can develop on .NET and run without recompilation on Mono.
You need to check Mono documentation for compatibility:
http://www.mono-project.com/Compatibility[
^].
Main idea is: CLI is the matter of standardization in ECMA and ISO. See
http://www.ecma-international.org/publications/standards/Ecma-335.htm[
^]. In particular, the standard defines standard parts of the .NET library.
The standard part of library should be compatible between .NET and Mono, please good deal of non-standard libraries, including
System.Windows.Forms
. I personally develop .NET
Forms
applications which run on Mono right away. I try to do it very accurately, trying to identify potential portability problem from the very beginning and basically satisfied with the compatibility. It was not so good before .NET v.3.5, but right now I do not have complains.
—SA