С поддержкой WinForms в mono все обстоит криво, очень криво. Шаг в сторону, и нет больше никакой совместимости с виндой... Проверял несколько раз, и каждый раз — разочарование, хотя и ожидаемое.
Какие-то базовые вещи действительно работают. Но уж очень базовые. К тому же, WinForms-приложение смотрится в гноме чужеродным. В KDE оно будет таковым и подавно. Как я уже писал, добиться консистентности с гномьим окружением — это использование Gtk#, совсем другой библиотеки отличной от WinForms.
Б>WinForms 2.0 вроде минимальный набор контролов будед обеспечен. если пользоваться только ими, всё ок будет?
Нет. Контрол из WinForms работать в Gtk# не будет. Сооветствовать тоже не будет. Установите MonoDevelop. Задайте вид проекта: Gtk# приложение. Все увидите сами. Gtk# и WinForms — совершенно разные библиотеки, хотя и решают одну задачу.
Сторонний контрол должен быть реализован под каждую платформу отдельно. Причем, многие производители контролов грешат тем, что используют Win32, а это — прямая завязка на windows-only решение.
Б>контрол из WinForms будет соответствовать контролу из Gtk# ? т.е. если его в Gtk например нет, то небудет работать?
Б>если я правильно думаю, и если использовать сторонний контрол интерфейса, то он должен быть реализован под все платформы?
Очень сомневаюсь, что DevExpress продает свои компоненты для Gtk#, или хотя бы поддерживает то подобие WinForms, что есть в mono. Я бы на это не расчитывал.
Вообще, все WinForms-контролы, с которыми я работал, были завязаны исключительно на винду, точнее на Win32.
Б>>>4) Много ли существует GUI кросплатформенных контролов ? например DevExpress на сколько я понял, он будет работать только под виндовс..
Б>непонял... вопрос выше написал)
Именно файл exe там и запускается

Но опосредованно через запуск mono, и не в любом линукcе. Чтобы работало всегда, обычно пишут простенький bash-скрипт, который уже запускает mono и передает последнему имя нужной программы в качестве аргумента. Стандартный способ.
Дотнетовский файл exe — это просто байт-код для виртуальной машины. Перекомпилировать его не надо. Он будет одинаково запускаться и под виндой, и под линуксом. Но если нет нужной библиотеки, то облом...
Б>т.е. не обязательно, но можно откомпилировать под нужную ОС? а то помоему как-то неочень будет смотреться если в линуксе exe запускать...
В общем, если у вас небольшой опыт программирования и действительно нужно написать кроссплатформенное приложение, то очень рекомендую посмотреть в сторону Java. Тем более, .NET создавался по образу и подобию Java. Найдете много общего.
Но если вы — истинный мастер программирования, то можете использовать C++ и, например, Qt. Но это — тяжелый и тернистый путь. Далеко не каждый осилит
Что касается .NET, то он является кроссплатформенным для небольшого круга задач, в число которых GUI не входит. Только если не Silverlight (Moonlight в линуксах), но это уже немного другая история. Да и там тоже не все так гладко.