Bienvenido(a) a Grupo Linuxero del Bajío lunes, junio 05 2023 @ 09:19 CEST

Compilación cruzada entre GNU/Linux y Win32

  • viernes, diciembre 01 2006 @ 01:18 CET
  • Autor:
  • Lecturas 3,331
Artículos

Una de las más buscadas piedras filosofales buscadas por los ingenieros de software es la migración transparente de aplicaciones entre una plataforma y otra, en este caso particular, poder portar aplicaciones escritas para GNU/Linux a Windows sin esfuerzo.

El primer y más conocido mecanismo para portar aplicaciones es el Cygwin, que es una colección de herramientas que permiten a varias versiones de Microsoft Windows actuar de manera similiar a un sistema Unix, suministrando una capa de compatibilidad a POSIX a través de una DLL. Esto hace que para poder ejecutar una aplicación portada con Cygwin, hay que tener una instalación de Cygwin, ya que la aplicación la utiliza en tiempo de ejecución. Otro punto a considerar es que la DLL de Cygwin está bajo la licencia GPL, lo que obliga a que toda aplicación portada tendrá que ser GPL también.

Posteriormente surgió otra alternativa: MinGW, acrónimo de Minimalistic GNU for Windows. También es una colección de bibliotecas y herramientas GNU que permite producir programas nativos para Windows sin depender en DLL extras. La gran diferencia con Cygwin es que MinGW no ofrece una compatibilidad completa con POSIX, pero, por otro lado, su licencia de distribución es mucho más permisiva que la GPL, pudiendo distribuir los binarios generados con cualquier licencia.

Por ejemplo, en la mayoría de las aplicaciones GTK/Gnome portadas a Windows, se ha utilizado MinGW con mucho éxito, no obstante el trabajo adicional a realizar para sustituir las llamadas POSIX no disponibles.

Sin embargo, las bellezas de MinGW no llegan hasta ahí: Como pueden suponer, MinGW contiene el conjunto de herramientas de compilación GCC que generan código nativo para MS-Windows; sin embargo se puede ir más allá creando una toolchain para hacer compilación cruzada de Linux a Win32.

Expliquemos esto con más tranquilidad. Yo no puedo concebir un ambiente de programación en Windows; los IDEs como Visual Studio me parecen más una limitante para la programación seria, que una verdadera ayuda a la productividad. Más bien me he acostumbrado al conjunto de herramientas que provee Linux, que interactúan entre sí para presentar un ambiente de desarrollo bastante atractivo. No obstante, al momento de programar aplicaciones para Windows, uno tendría que verse corto en herramientas o utilizar alguna espantosa IDE dentro de Windows o jugárnosla con Wine. Pero ahora tenemos una cuarta opcion con MinGW: la compilación cruzada.

La compilación cruzada es una técnica donde compilamos en una plataforma, pero el código generado es nativa para otra. Por ejemplo, si yo desarrollo aplicaciones embebidas para un procesador ARM, puedo programar en mi procdesador huésped x86 con GNU/Linux y con un toolchain (así se le llama al conjunto de herramientas para hacer compilaciones cruzadas) generar código para el procesador destino ARM. En este caso, estaremos en nuestro rico ambiente de programación GNU/Linux, con todas las herramientas que pone a nuestra disposición, generando programas que correrán nativamente en Win32 (de MS-Windows 95 en adelante).

Volviendo a lo que habíamos dicho: MinGW puede trabajar como toolchain para compilación cruzada. En Debian, lo único que hay que hacer es un # apt-get install mingw32 mingw32-binutils mingw32-runtime et voilà, tenemos un toolchain completo para la compilación cruzada. Aunque también hay unos scripts que nos permite la compilación automática de nuestro propio toolchain.

Para concluir diremos entonces que la programación cruzada entre GNU/Linux y Win32 con MinGW facilita la creación de aplicaciones portables, además permite trabajar en un ambiente de programación profesional (no en IDEs que esconden todos los detalles importantes que hacen la diferencia entre un programa profesional y una bisoñez).