Los ejecutables de Linux y Windows usan diferentes formatos. Linux usa el formato ELF en la mayoría de las arquitecturas, mientras que Windows usa el formato PE. ELF se adapta mejor a la forma en que Linux administra las bibliotecas compartidas, y PE se adapta mejor a la forma en que Windows administra las bibliotecas compartidas, pero no existe una razón fundamental por la que Linux no pueda ejecutar ejecutables PE o ejecutables ELF de Windows. De hecho, Linux puede ejecutar ejecutables PE, a través de Wine.
La dificultad es que Windows y Linux tienen API completamente diferentes:tienen diferentes interfaces de kernel y conjuntos de bibliotecas. Entonces, para ejecutar realmente una aplicación de Windows, Linux necesitaría emular todas las llamadas a la API que realiza la aplicación. Eso es mucho trabajo. Wine lo hace hasta cierto punto, pero es muy difícil, especialmente porque el fabricante de Windows no coopera. Puede compararlo con, por ejemplo, aprender inglés cuando su lengua materna es el chino:el formato ejecutable es el alfabeto (no es tan difícil de dominar), la API es el vocabulario (lleva años llegar al nivel en el que puede comenzar a leer literatura). ).
Los binarios de Windows tienen una ABI diferente y usan una API diferente que los binarios de Linux.
Los binarios de Linux no necesitan una extensión porque *nix usa bits de permiso para identificar un ejecutable en lugar de la extensión.