Postagens populares

sábado, 9 de janeiro de 2010

QuakeC licenciado sob a GPL ou não?


Surgiu uma questão interessante enquanto estava fazendo experiências para o mod War Z (título provisório, como já afirmei aqui). Nada envolvendo a programação em si mas o licenciamento dos pacotes da linguagem quake c disponíveis na rede, que são a base para War Z. Para quem não sabe a ID Software ao criar Quake desenvolveu um subconjunto da linguagem C denominado simplesmente de quakec. Este subconjunto é chamado pela engine sempre que o programa é iniciado com a finalidade de fornecer dados sobre a lógica interna do jogo.

Por exemplo, que armas existem, que tipo de munição utilizam, quanto é possível carregar de cada munição, quanto dano produzem, etc. A inteligência dos mostros, sons ambientais, efeitos de interação como as portas e botões, mensagens entre outras coisas são controladas via quakec e compiladas em um arquivo denominado progs.dat.


Até aqui nada demais. O ideal seria simplesmente pegar o pacote disponível no ftp da ID Software ou em um dos projetos derivados, licenciados sob a GPL como o Openquartz, por exemplo, eu pensei. O objetivo desse "preciosismo legal" tem haver com a coerência desejada. Não é meu interesse criar e lançar um mod com licenças diferentes, ou pior intrinsecamente conflitantes. Assim para manter esta coerência a premissa que adotei foi seguir o mesmo licenciamento da ID ao lançar o código-fonte da engine (GPL versão 2).

O problema realmente aparece agora. Dentro do pacote licenciado sob a GPL, contendo o código-fonte da engine, encontrado no ftp da própria ID não existe nada acerca do quakec. Uma leitura do readme incluso no pacote q1source.zip é bem esclarecedor. Em resumo, temos apenas o código-fonte para construir as versões winquake (modo software), glquake, quakeworld (modo software) e glquakeworld. Sob os auspícios da GPL e nada mais. Nem um vírgula sequer sob o quakec. Ou melhor no meio do código para o Quakeworld existe o qc referente ao código qwprogs.dat.

Depois desta constatação, o próximo movimento foi, ainda dentro do ftp da ID procurar alguma coisa sobre o licenciamento do quakec dentre as ferramentas lançadas pela empresa. As ferramentas são os programas de suporte necessários para a criação de conteúdo, tais como modelos, texturas e o próprio compilador do quake c (qcc). Minhas esperanças era que junto ao compilador existisse algum readme que explicitamente indicasse o licenciamento da linguagem. Encontrei o arquivo q1tools_gpl.tgz com duas pastas, a primeira com o nome de qcc/send. Examinei com atenção e novamente nada sobre o licenciamento do quakec. Sequer sobre o licenciamento do compilador qcc!. Outro fato curioso é que há uma sub-pasta denominada v101qc neste pacote. Presumo que seja a versão 1.01 do código que posteriormente teve bugs corrigidos com o lançamento da versão 1.06 (versão comercial e última lançada ao público).

Passemos então ao readme da outra pasta, chamada de qutils. Mais uma vez nada sobre o licenciamento do quakec ou sobre estas ferramentas estarem licenciadas sob a GPL. Porem, encontrei um arquivo de nome Copying contendo a licença GPL versão 2. Isto levanta algumas hipóteses. A primeira é que todo o pacote é licenciado sob a GPL. O que encerraria a questão e me permitiria trabalhar com base na versão 1.01 do quakec. Mas não é o caso, porque o licenciamento deve, repito deve, ser explícito por parte do autor/criador/desenvolvedor. A segunda hipótese é que apenas as ferramentas estão licenciadas sob a GPL, por esta razão a divisão entre as pastas. O outro pacote então estaria licenciada de maneira diferente, tal como a licença comercial que se adquire ao comprar o jogo. Em suma o problema persiste.

Outros arquivos do ftp, como qcc.tar.gz e qutils.zip, o primeiro contendo o compilador qcc e o segundo outro pacote de utilitários para construir conteúdo, aparentemente foram lançados antes da liberação do código-fonte da engine. Estão, portanto, licenciados sob licença comercial. Ou seja, é inútil ao meu propósito de ser coerente.

Como se as dores de cabeça não já não fossem suficientemente grandes, outros projetos, como o Openquartz (basta ler o readme deles para ver que iniciaram com a versão 1.01 do qc e depois mudaram para a versão 1.06), ou mesmo o repositório de informações QIP (que lançou seus patches para o quakec da ID sob GPL), são baseados na versão 1.06 do código, a versão comercial, do quakec ou não explicitam a origem do código com a qual trabalham.

Soluções? A primeira possível seria utilizar apenas o código quake c do quakeworld existente no pacote q1source.zip. O readme deste pacote explicita que todo o código existente lá é de fato licenciado sob GPL. Assim ao menos seria possível utilizar tutoriais do inside 3D e fazer uso de código com a qual eu já estou relativamente familiarizado. Muito embora o código relativo aos monstros e a inteligência artificial tenham ficado de fora – o que é uma perda e tanto.

A segunda solução possível seria abandonar todo o código quakec escrito pela ID e reescrever tudo do zero. Existe uma série de tutoriais no inside 3D (scratch tutorials) que explica o básico. Reduzindo tudo ao essencial, coisas simples como carregar mapas, o modelo do jogador, sons e a iluminação. O problema é que nunca recebi educação formal em programação e criar tudo do zero seria no mínimo um trabalho considerável para meus conhecimentos.

A terceira solução possível seria novamente abandonar todo o código escrito pela ID e adotar o código qc do Nexuiz. O projeto é todo licenciado sob a GPL e aparentemente a condição para que alguém contribua com este projeto é seguir com o mesmo licenciamento. O problema neste caso é que o código é extremamente diferente daquele concebido pela ID e seria, novamente, um esforço considerável para apreender sua natureza e criar as alterações necessárias ao mod.


Agora respondendo a pergunda formulada no post a resposta é simplesmente que não se sabe. A ID fez uma confusão não lançando um pacote à parte ou simplesmente colocando em um readme no diversos pacotes licenciados sob GPL qual seria a situação da sua linguagem. Uma pena.

Ufa. E eu achava que seria complicado apenas criar conteúdo para o mod...





Nenhum comentário:

Postar um comentário