Jeśli chodzi o Windowsa, to wiadomo, nic nie zastąpi Visual C# - on chyba jest darmowy z tego co pamiętam (w wersji Express). Pisanie programów w C# pod winde/linuxa wygląda tak, że C# jest bodaj częściowo interpretowanym językiem (coś jak JAVA) i jak masz zainstalowane mono pod Linuxem, w konsoli piszesz "mono projekt.exe" i tyle :) A jak napiszesz w Linuxie i odpalasz pod Windowsem, to też normalnie odpalasz exe. Mono po prostu jakby emuluje .NETa pod linuxem.
Z tym przenoszeniem pomiędzy platformami to sprawdzałem, więc wiem, że to działa, chociaż w samym C# napisałem ze 3 proste programy, także jakimś tam super specjalistą nie jestem, opisałem jak ja to rozumiem :) Mono używam pod Ubuntu na moim laptopie.