Vamos, no te he entendido bien, pero según lo que he cogido:
¿Eso es según el lenguaje de programación? ¿Si se utiliza un lenguaje que usa compilador o intérprete?
Al usar un compilador, éste te generará un archivo que digamos solo entiende un SO en concreto. Ésto se consigue mediante un makefile, que contiene las instrucciones que el compilador debe seguir para generar el ejecutable.
Por ejemplo, el programa de mensajería instantánea emesene está escrito en Python. El mismo archivo se ejecuta en Windows y GNU/Linux. ¿Esto es porque Python usa un intérprete?
Eso es porque hay diferentes versiones del interprete Python para diferentes SO, de tal forma que el archivo a ejecutar con Python es el mismo, y lo único que cambia es el interprete.
En lenguajes que se usa un compilador, como C, ¿no es posible escribir un programa que sirva para GNU/Linux y Windows a la vez?
No. Tendrías que generar 2 ejecutables diferentes: uno para windows y otro para linux. Esto se consigue cambiando el makefile.
Espero que te sirva de ayuda.
Salu2!!
EDITO: Se me adelantaron xDD. Si es que tardo mucho en escribir