Un pequeño análisis de wxWidgets. Un framework para desarrollar aplicaciones multiplataforma

De Grupo GNU/Linux de la Universidad del Cauca
Saltar a: navegación, buscar

Junio 15 de 2.004

Por Manuel Alejandro Cerón Estrada.


Al desarrollar aplicaciones muchas veces nos encontramos con el hecho de que nuestros usuarios no siempre van a usar el mismo sistema operativo. Para que nadie se sienta discriminado, como a veces nos sentimos discriminados los usuarios de GNU/Linux cuando se desarrollan programas que solo sirven en sistemas de Microsoft, es una buena idea tratar de hacer que nuestra aplicación pueda funcionar en varias plataformas, o al menos sea fácil de portar.

Hace poco tuve que realizar una aplicación que funcionara perfectamente tanto en GNU/Linux, como en Microsoft Windows. Para resolver el problema decidí analizar varias alternativas:

  • Java. La primera alternativa que se me vino a la mente fue Java, funciona perfectamente en varias plataformas sin necesidad de recompilar, tiene un Framework muy bien diseñado, avanzado y potente. Sin embargo, existen algunos inconvenientes que me hicieron desistir de java: el primero es que, aunque es gratuito, el JDK no es software libre y mi intención era construir una aplicación completamente con herramientas libres. Por otro lado, Java no está diseñado para construir aplicaciones rápidas, el hecho de correr bajo una máquina virtual, y utilizar en exceso herramientas como polimorfismo dinámico y RTTI hacen que las aplicaciones Java tiendan a ser lentas, algo que definitivamente no deseaba para mi aplicación.
  • Qt. La otra alternativa a considerar es el Framework Qt, en el cual se basa el escritorio de GNU/Linux KDE. Como ventajas tiene el hecho de tener una buena velocidad, debido a que está escrito en C++ y tener un muy buen diseño orientado a objetos que hacen muy placentero programar con Qt. Por otro lado, el problema con Qt consiste principalmente en que solo es software libre en su versión para GNU/Linux [1], todas las demás versiones (Win32, MacOS y otros) son propietarias (y además con alto costo), lo que hizo que descartara inmediatamente a Qt.
  • GTK+. Otra librería importante a considerar era GTK+. Tiene varias ventajas, como por ejemplo que está disponible para muchísimos sistemas operativos y es completamente libre, con licencia LGPL. Sin embargo, GTK+ tenía algunos inconvenientes que me hicieron desistir de usarlo: En primer lugar, GTK+ solo posee funcionalidad para desarrollar interfaces gráficas de usuario y deja un lugar vacio a aspectos como bases de datos, redes, etc. Por otro lado, el API de GTK+ está escrito de forma estructurada en lenguaje C, y mi intención era trabajar de forma orientada a objetos. Aunque existe GTKmm[2], me parece que tiene el mismo diseño estructurado pero usando clases en C++.

La última opción que consideré fue wxWidgets, un framework antes conocido como wxWindows [3], especializado en el desarrollo de aplicaciones multiplataforma en lenguaje C++. Fue en definitiva el que escogí para realizar mi aplicación, por las siguientes razones:

  • Soporta varios sistemas operativos, pero con una pequeña particularidad: de acuerdo a la plataforma en que se ejecute la aplicación, esta tomara el look and feel del SO donde se esté ejecutando. Por ejemplo, si se ejecuta en MS-Windows, la aplicación tendrá la apariencia de una aplicación hecha con el API de Windows, pero si se ejecuta en GNU/Linux, tendrá la apariencia de una aplicación GTK2. Es decir que la parte de GUI es solo una capa para el API nativa de cada SO. Además de lo anterior, wxWidgets cuenta con una versión embebida [4] para dispositivos como PDAs y teléfonos celulares.
  • Es cien por ciento libre en todas las plataformas que soporta, con una licencia LGPL modificada [5].
  • Tiene un API orientada a objetos que es, en extremo, fácil de aprender y utilizar. Creo que ninguna otra de las opciones mencionadas anteriormente tiene una curva de aprendizaje tan suave.
  • Posee funcionalidades para muchos aspectos aparte de la construcción de interfaces gráficas. Como gráficos 2D, 3D con OpenGL, Bases de Datos (ODBC), Redes, Impresión, Hilos, entre muchas otras.

Pese a todas estas ventajas, wxWidgets también tiene algunas desventajas: Su diseño orientado a objetos no es el mejor que uno pueda ver. A veces abusa de la utilización de macros para realizar ciertas operaciones (como las tablas de eventos), aunque esto hace que codificar sea más fácil, también complica la labor de depuración, especialmente para los mismos desarrolladores de wxWidgets. Por otro lado, debido a que el framework se comenzó a desarrollar hace bastante tiempo, no cuenta con soporte para algunas características relativamente modernas [6] del lenguaje C++ como por ejemplo el manejo de excepciones, y la STL.

Debido a sus grandes pros y sus pocos contras, puedo decir que recomiendo ampliamente wxWidgets como una herramienta para el desarrollo de aplicaciones sean o no sean multiplataforma. Y tal vez en un artículo posterior pueda profundizar un poco más en los detalles de este extraordinario Framework.


Referencias

[1] Aun así, la licencia de Qt para GNU/Linux es la GPL y no la LGPL que es lo común en las librerías.

[2] GTKmm es la versión C++ de GTK+

[3] WxWindows tuvo que cambiar su nombre a finales de 2003 debido a una demanda de Microsoft, en la que alegaba que podría haber confusión con el nombre de sus sistemas operativos.

[4] Aunque esta versión aun está en una etapa muy temprana de desarrollo.

[5] La modificación a la licencia LGPL consiste básicamente en que permitir que los derivados puedan cambiar de licencia aún si se compilan con ligadura estática.

[6]Al decir modernos me refiero a lo referente a la publicación del estándar C++ de 1998.



El contenido del material publicado por nuestros columnistas es responsabilidad de sus autores.

Para saber más sobre la programación y naturaleza de nuestros artículos y columnas, haga clic aquí.