O uso de licenças pelo Qt

A licença usada pelo Qt varia entre as versões. A licença Free Qt (usada pelo Qt 1,45 e anteriores) não era Open Source. A Q Public License (usada pelo Qt 2.0 e mais recentes) é. KDE 1.1.2 e anteriores são baseados no Qt 1.45, e o KDE 2.0 é baseado no Qt 2.1.

A licença Free Qt

Na verdade houveram duas versões da biblioteca Qt: uma versão comercial e uma versão livre. Se o produto do receptor era código fechado (isto é, era distribuída sob uma licença que não era uma licença de software livre), eles eram obrigados a comprar uma versão comercial do Qt. Esta versão restringia a redistribuição do código fonte original ou de suas versões modificadas, assim não concordava com 2 dos 3 requerimentos de Open Source.

A versão livre do Qt estava licenciada sob a FreeQt. Esta versão estava disponível apenas se o produto do receptor era distribuído sob uma licença livre. Isto permitiu a redistribuição do Qt e acesso ao código fonte. Entretanto, isto não permitiu que modificações do Qt fossem redistribuídas. A cláusula final não satisfaz os requerimentos da definição de software livre da FSF e por isso, ela não é uma licença de software livre.

É interessante notar que apesar de a FreeQt proibir a distribuição de versões modificadas, várias versões modificadas foram largamente distribuídas com permissão oficial da Trolltech. A distribuição "alternativa" mais comum foi a usada pelos coreanos para que pudessem usar os carateres Kanji com o KDE 1.x mesmo antes que o suporte Unicode fosse adicionado. Então enquanto tecnicamente era impossível modificar o Qt, a situação real era que a Trolltech raramente recusava patches e estava sempre disposta a permitir excessões na base de estudos de caso quando necessárias.

A Q Public License (QPL)

A QPL foi introduzida com o Qt 2.0. Foi desenvolvida com a ajuda de vários notáveis do mundo Open Source e Free Software para ser oficialmente uma licença Open Source. A antiga licença FreeQt já concordava com os requisitos de redistribuição e acesso ao código fonte do Open Source, e a QPL adicionou a possibilidade de "modificação".

O objetivo do design da QPL era diferente do objetivo do design da GPL e LGPL no fato de que a Trolltech queria proteger o "bom nome" da biblioteca Qt enquanto ainda permitia livre redistribuição e modificação da biblioteca. Ela realizou isso requerendo que todas as mudanças no código do Qt devam ser distribuídas separadamente do código propriamente dito. Isto é, a biblioteca Qt deve sempre ser "perfeita" antes de as suas modificações serem adicionadas a ela. Isto acontece para proteger a propriedade intelectual do nome Qt.

A QPL tinha um objetivo final: a cláusula sobre o patch foi desenvolvida para certificar que todos os usuários possam utilizar versões modificadas do Qt, incluindo usuários comerciais. Se outra licença Open Source fosse usada, então companhias que produzem código fechado não poderiam usar as modificações do Qt. Usando patches, a Trolltech poderia garantir que sempre haveria apenas uma única biblioteca Qt, e não bibliotecas diferentes para diferentes tipos de desenvolvimento.

O método com o qual você realiza isso varia, baseado em como você quer redistribuir a sua biblioteca. O modo mais comum agora é colocar a biblioteca Qt em um repositório de códigos público como o CVS. O sistema CVS guarda todas as mudanças como "patches" incrementais, assim o Qt original ainda está lá. O projeto KDE mantém uma versão em desenvolvimento do Qt no repositório CVS dessa maneira. Praticamente todos os grandes projetos Open Source usam o CVS, isso significa que para eles é trivial usar versões modificadas do Qt.

Se, entretanto, você quer distribuir a sua versão modificada do Qt em um pacote completo (por exemplo, um tarball ou um arquivo zip), você vai comumente incluir suas mudanças como arquivos patch. Você pode ter scripts que aplicam as suas mudanças à biblioteca automaticamente assim que o usuário as descompacte, mas o Qt original deve estar disponível sem nenhuma modificação para o usuário.

A maneira recomendada de se redistribuir o Qt modificado é usando um sistema de empacotamento como o Red Hat Packaging Manager (arquivos .rpm) ou o empacotador Debian (arquivos .deb). Ambos oferecem maneiras de se lançar código com os patches sendo aplicados automaticamente ao original. Isto faz com que a distribuição do Qt modificado não seja tão diferente da distribuição de qualquer outra parte do seu projeto.

Note também que isso se aplica apenas a modificações no código. As versões binárias de uma biblioteca Qt modificada podem ser distribuídas "como está". Isto é, o usuário final não tem que se preocupar com nada disso. Isto é de interesse apenas dos desenvolvedores.