Да, как уже писали надо mingw. На первых порах, если речь идёт о чисто win32, можно использовать wine для запуска скомпилированных программ. В ряде случаев даже сложные win32 приложения можно так разрабатывать(wine таки молодец), но проверять на венде всё равно придётся. То что может работать под
wine - может сваливаться в венде из-за простейших причин с ненахождением библиотек и тд.
Если же речь про .NET или WINRT, то лучше сразу компилять на венде, пусть в виртуалочке, и там же запускать. Моно годится только для разработки моноприложений, а не .NET, ну а winrt хоть и COM с другой стороны, всё равно куча заморочек вроде поддержки компилятора, песочник и прочего мрака.
Програмировать можно. Но вот тестирование написанного кода под виндой строго обязательно. Ибо системы разные, и набор врождённых глюков у них тоже разный.
Я по работе могу позволить себе роскошь поручить виндосборку и её тестирование отдельному человеку. Если такого нет - поставь хотя бы виртуалку с виндой (wine не катит), в ней - отдельная рабочая копия исходников из VCS.
Для облегчения жизни можно какой-нибудь Jenkins задействовать, правда полностью шаловливые ручки человека он не заменяет.
P.S. Да, разумеется, я имел в виду разработку на полноценно кроссплатформенных средствах, типа Qt. Если нужна .Net - то ХЗ. Хотя есть примеры проектов, которые изначально пишутся на Mono и могут компиляться в .Net, например, OpenSim, если не ошибаюсь, развивается именно так. Но вообще-то я с .Net-технологиями знаком плохо и могу наврать.