Оказалось, что это просто, если вы программируете на платформенно-независимом языке (например, на C/C++/Java/Python и так далее). Всё дело в том, что нужно изначально стараться проектировать программу так, чтобы платформенно-зависимый код (например GUI) располагался в одних исходниках, а платформенно-независимый код располагался в других исходниках (например, логика программы или классы-утилиты для несложной работы с файлами, где можно обойтись стандартными возможностями языка).
Может оказаться, что дома захочется поработать над рабочим проектом пару-тройку часов. Но на работе вы делаете проект на Apple iMac, а дома стоит PC. Что же делать?
Проектируйте изначально части программы так, чтобы их максимально безболезненно можно было использовать в других программах. Например, если это класс для считывания-записи в текстовые файлы настроек (в Windows это обычно называют ини-файлами), то достаточно легко будет сделать такой класс совершенно изолированным от особенностей ОС и вообще от особенностей вашей программы (хотя в Windows очень удобно использовать WIN32 API для работы с ини-файлами, но я сейчас не об этом).
Например, сегодня и вчера я разрабатывал и исправлял свой класс для работы с ини-файлами (на языке C++ для использования в iPhone-приложении). При этом у меня это были выходные дни, и я просто сделал консольное приложение, в котором использовал и тестировал этот класс. При этом я использовал свой PC (а на работе весь проект можно собирать только на Mac). Ощущения потрясающие, и главное, это очень удобно.
Конечно, такое удастся не со всеми классами проекта. Есть такие классы, которые слишком тесно вплетены во взаимодействие с GUI. В таком случае разрабатывать отдельное GUI для Windows-варианта программы было бы слишком хлопотным занятием (если это делать лишь только для того, чтобы программировать дома 4-5 часов в неделю). Тогда уж проще было бы купить Mac. Но это уже другая история.
Кстати, Java-программисты пожалуй меньше всех испытывают какие-либо проблемы, работая над одним и тем же проектом на разных ОС/платформах. Кроме того, существуют удобные инструменты для C++ программистов как QT (хотя цена на коммерческую версию QT может заставить немного вздрогнуть) - работая на разных ОС/платформах на QT вы видите практически один и тот же инструмент (я ещё не успел попробовать переносить QT-проекты из Linux на Windows).