jueves, 5 de febrero de 2009

Qt 4.5, LGPL 2.1 y templates C++

Traducido de: obsenthryl's

La noticia ya ha llegado a los titulares de un montón de sitios web. Pero esta entrada no trata sobre eso, empecemos leyendo el anuncio oficial:
Nokia se enorgullece de anunciar que con la salida de Qt 4.5 vas a poder usar Qt bajo la Lesser General Public License (LGPL) version 2.1. Cuando sea distribuida en Marzo del 2009, Qt estará disponible bajo tres licencias: Comercial, LGPL y GPL
Estamos hablando de un modelo tri-licencia, mencionando explicitamente que LGPL 2.1 no tendrá ninguna modificacion (lo mismo indica en otras secciones del mismo FAQ). En la FAQ relacionada encontramos:
Cual es la diferencia entre LGPL y GPL?

Ambas licencias son documentos complejos que requieren una cuidadosa lectura para apreciar las diferencias significantes entre ambas. Sin embargo, una explicación "por lo alto" es que la GPL requiere que cualquier trabajo derivado (ej: aplicaciones desarrolladas usando Qt) deben licenciarse bajo los terminos de la GPL. La LGPL es menos restrictiva y permite el desarrollo de aplicacions de código cerrado. Distribuiremos Qt bajo la version 2.1 de la licencia LGPL, además de continuar ofreciendo Qt bajo la version 3.0 de GPL.

Sí, requieren extremado cuidado en su lectura. Y también, en otra sección del anuncio:

Porque querría comprar una licencia comercial? Cual es la diferencia?

La licencia comercial de Qt incluye soporte por email, acceso a actualizaciones y te permite desarrollar software de código cerrado. La LGPL conlleva algunas restricciones relacionadas con la capacidad de los usuarios para relinkar librerias y otras restricciones que pueden imponer requerimientos de arquitectura con la que algunas organizaciones pueden no estar de acuerdo.
De acuerdo, buenas noticias para los que quieran usar la LGPLv2.1 con Qt4.5.
Pero lo que no he visto en la FAQ, son una seria de temas relacionados con la licencia LGPL 2.1 sin modificaciones propuesta. Uno de los temas tiene que ver con las templates de C++.
Aunque es cierto que Qt 4.4 por ahora, no usa templates para los signals y los slots, las usa para las clases contenedoras. Tiene una licencia LGPL v2.1 sin modificar -Asumo que es su intención, como puede entreverse en su FAQ y republicado en otros websites - en consideración el uso de templates C++ y de técnicas de "template metaprogramming" por código de terceros, cuando se instancian esas templates LGPL v2.1 en un modelo de licencia no LGPLv2.1?
Se sabe que la instanciación de templates en realidad anida el código dentro del código final del usuario de formas que trascienden lo especificado en una licencia LGPLv2.1 no modificada.

La experiencia de otros desarrolladores presentan una solución sencilla: LGPLv3 soluciona este tema.

La LGPL requiere que los usuarios sean capaces de reemplazar el código LGPL con una versión modificada; esto es trivial si la libreria en cuestión es una librería compartida escrita en C. Pero no hay forma de hacer eso con C++, donde la mayor parte de la librería consiste en funciones inline y templates, que se expanden dentro del código que usa la librería. Así que para permitir a la gente reemplazar el código de la librería, alguien que la use debería distribuir su propio código fuente, resultando la LGPL equivalente a la GPL.

El artículo original continua ahondando en los problemas de las "novedades" que ofrece C++ y el atraso de la LGPL v2.1 en este aspecto.

Sin embargo, parece que Nokia leyó el muy buen artículo y ha hecho saber que están trabajando en añadir una excepción a la LGPLv2.1 que solvente este asunto con las templates y funciones inline de C++.

Por ultimo aprovecho para decir que ya ha salido la Release Candidate de Qt4.5 para las diferentes plataformas:

1 comentario:

Anónimo dijo...

Para nosotros los desarrolladores es una excelente noticia, pero como mencionas, este asunto tiene sus problemas aun sin resolver del todo.

Lo que actualmente está ocurriendo es que hay muchos desarrollos nuevos alentados por esta licencia, con la consiguiente popularización de la plataforma, que pienso es la intención final de Trolltech, pero los nuevos desarrollos que se están haciendo eventualmente caerán en problemas legales de icenciamiento.

Esperemos que no sea a la larga un gran problema.