I programmi che non fanno cose "strane" (mi riferisco soprattutto all'interazione con l'hardware con il filesystem etc) sono abbastanza compatibili con entrambi i sistemi operativi (basta ricompilarli, cambiando soltanto i path dei files e directory)...

Se vuoi fare programmi portabili ti consiglio di usare lo stesso compilatore (il GCC/G++ esiste sia per Linux che per win) e le stesse librerie (ad esempio le GTK, le SDL o le OpenGL per applicazioni grafiche)...

Se vuoi fare programmi che hanno a che fare molto con l'hardware (ma anche con il filesystem e altre robe) le cose si fanno più complicate... Non conosco minimamente le API di win e conosco molto poco le varie librerie di sistema per Linux, ma so che non sono assolutamente compatibili...