The advice by Naerling is good, but I also worked enough with Mono: it works. Basically, you can develop your applications on Windows or some other platform, and the resulting executable file will work on any other platform under Mono
without recompilation.
This is possible because Mono is another implementation of CLR, and because CLR and IL are based on JIT (Just-in-time) compilation. The executable code is loaded on any platform and then JIT-compiled, with usually is done on per-method basis, when a method is about to be called for the very first time.
Please see:
http://en.wikipedia.org/wiki/JIT_compiler[
^],
http://en.wikipedia.org/wiki/Common_Intermediate_Language[
^],
http://en.wikipedia.org/wiki/Common_Language_Infrastructure[
^],
http://en.wikipedia.org/wiki/Common_Language_Runtime[
^].
On Mono itself:
http://en.wikipedia.org/wiki/Mono_%28software%29[
^],
http://www.mono-project.com/[
^].
The possible problems are related, of course, to compatibility. But in this case, this problem is much easier than in other cases. First of all, everything is based on the ECMA-335 standard for CLI, which includes nearly everything, including the specification for the Basic Class Library (BCL):
http://en.wikipedia.org/wiki/Base_Class_Library[
^].
If you use only the BCL, most likely your code will be compatible. You should also avoid using any platform specific feature and P/Invoke. But you can also successfully use a number of non-standard libraries, importantly,
System.Windows.Forms
and ADO.NET. Of course, you can also develop platform-specific code, but just on different platforms.
Please see also my past answers:
C++ GUI For Linux, looking for a place to start[
^],
Programming GUI over linux[
^],
Platform independency of any visual studio application[
^],
I have to develop an exe file that runs on Linux + Windows[
^],
how can i use mono in windows7?[
^],
To create mono for winforms C#.Net[
^].
—SA