Estoy no preguntar sobre cómo hacer funcionar un exe de Windows en Linux.
Estoy preguntando POR QUÉ no funciona.
¿Qué tiene de diferente la forma en que Windows ejecuta un ejecutable y Linux ejecuta un ejecutable? ¿Por qué tenían que ser diferentes? Además, ¿por qué los ejecutables de Linux no tienen una extensión de archivo?
Respuestas:
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 hay una razón fundamental por la que Linux no pueda ejecutar ejecutables PE o ejecutables ELF de Windows. De hecho, Linux puede ejecutar ejecutables de 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, digamos, 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 a un nivel en el que pueda comenzar a leer literatura) )
fuente
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.
fuente
Así es como escuché el lado de Windows explicado en términos simples por parte de los programadores.
En Windows hay ganchos en los programas y el sistema operativo al que Exe realiza llamadas que simplemente no estarán allí en Linux. Debido a las diferencias en ambos ambientes. Inicialmente, Linux busca permisos, Windows busca primero un formato enlazable examinando la extensión, buscando propiedades y luego buscando dentro del archivo Exe, etc.
Hay aplicaciones como Netbackup que comenzaron en Linux y se han modificado para ejecutarse en un entorno Windows sin usar Wine IMHO, con frecuencia esas son algunas de las aplicaciones de Windows más estables y de mejor comportamiento.
Cuando las aplicaciones de Windows. Por lo general, se vuelven rebeldes porque algunos de los ganchos que tiene la aplicación no se liberaron por completo y Windows cree que sí (fuga de memoria). Cuando Windows entrega ese espacio de memoria inédito a otra aplicación, se bloquea y se quema.
fuente