Grupo Linuxero del Bajío

Compilación cruzada entre GNU/Linux y Win32

Víctor Manuel Jáquez Leal

Una de las más buscadas piedras filosofales buscadas por losingenieros de software es la migración transparente de aplicacionesentre una plataforma y otra, en este caso particular, poder portaraplicaciones 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 Windowsactuar de manera similiar a un sistema Unix, suministrando una capa decompatibilidad a POSIX a través de unaDLL.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 lautiliza en tiempo de ejecución. Otro punto a considerar es que la DLLde Cygwin está bajo la licencia GPL, lo que obliga a que todaaplicación portada tendrá que ser GPL también.

Posteriormente surgió otra alternativa: MinGW, acrónimo deMinimalistic GNU for Windows. También es una colección debibliotecas y herramientas GNU que permite producir programas nativospara Windows sin depender en DLL extras. La gran diferencia conCygwin es que MinGW no ofrece una compatibilidad completa conPOSIX, pero, por otro lado, su licencia de distribución es mucho máspermisiva que la GPL, pudiendo distribuir los binarios generados concualquier licencia.

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

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

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

La compilación cruzada es una técnica donde compilamos en unaplataforma, pero el código generado es nativa para otra. Por ejemplo,si yo desarrollo aplicaciones embebidas para un procesador ARM, puedoprogramar en mi procdesador huésped x86 con GNU/Linux y con un toolchain (así se le llamaal 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 nuestradisposición, generando programas que correrán nativamente en Win32 (deMS-Windows 95 en adelante).

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

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