Quando software livre depende de não livre
por Richard StallmanQuando um programa é software livre (livre como em liberdade), isso significa que ele dá a seus usuários as quatro liberdades para que controlem o que o programa faz. Na maioria dos casos, isso é suficiente para que a distribuição do programa seja ética; mas nem sempre. Existem problemas adicionais que podem surgir em circunstâncias específicas. Este artigo descreve um problema sutil, em que a atualização do programa livre requer o uso de um programa não livre.
Se o uso do programa livre depender inevitavelmente de outro programa que não é livre, dizemos que o programa livre está “preso”. Seu código é software livre e você pode copiar partes de seu código em outros programas livre com resultados bons e éticos. Mas você não deve executar o programa preso, porque isso implica entregar sua liberdade ao outro programa não livre.
Alguém que defende os princípios do software livre não faria conscientemente um programa preso. No entanto, muitos programas livres são desenvolvidos por pessoas ou empresas que não apoiam esses princípios ou que não entendem o problema.
Dependência de um programa não livre pode assumir várias formas. A forma mais básica é quando a linguagem de programação usada não tem implementação livre. Os primeiros programas que escrevi para o sistema GNU nos anos 80, incluindo GNU Emacs, GDB e GNU Make, tiveram que ser compilados com o compilador C não livre da AT&T, porque não havia compilador C livre até que eu escrevesse o GCC. Felizmente, esse tipo de problema é principalmente uma coisa do passado; agora temos compiladores e plataformas livres para praticamente todas as linguagens que alguém usa para escrever software livre.
Podemos liberar o programa desse tipo de armadilha traduzindo-o para outra linguagem ou lançando uma implementação livre da linguagem na qual ele está escrito. Assim, quando uma implementação Java completa e livre tornou-se disponível, isso liberou todos os programas livres em Java da Armadilha do Java.
Esse tipo de dependência é conceitualmente simples porque decorre da situação em um determinado instante no tempo. No momento T, o programa livre P não será executado sem a plataforma de programação não livre Q. Para emprestar um termo da linguística, essa relação é “sincrônica”.
Mais recentemente, vimos outro tipo de dependência em programas de banco de dados, onde você pode compilar e executar qualquer versão do programa no mundo livre, mas a atualização da versão N para a versão N+1 requer um programa não livre.
Isso acontece porque o formato interno do banco de dados muda da versão N para a versão N+1. Se você estiver usando seriamente a versão N, provavelmente terá um grande banco de dados existente no formato da versão N. Para atualizar para a versão N+1 do software de banco de dados, você precisa reformatar esse banco de dados.
Se a maneira que você deve fazer isso é executando um programa privativo de reformatação de banco de dados ou usando o serviço do desenvolvedor que é SaaSS (Serviço como Substituto de Software), o software de banco de dados está preso – mas de uma maneira mais sutil. Qualquer versão única do programa de banco de dados pode ser usada sem software não livre ou SaaSS. O problema surge quando você tenta continuar usando o programa a longo prazo, o que implica atualizá-lo de tempos em tempos; você não pode usá-lo desta forma sem algum software não livre ou equivalente. Este programa de banco de dados está preso ao longo do tempo – podemos chamá-lo de “preso diacronicamente”, pegando emprestado outro termo da linguística.
Por exemplo, o programa OpenERP (desde que renomeado “Odoo”), embora livre, está preso diacronicamente. O GNU Health, nosso pacote livre para administrar uma clínica médica, inicialmente usava o OpenERP. Em 2011, o desenvolvedor do GNU Health, Luis Falcón, descobriu que a atualização para a próxima versão do OpenERP exigia o envio do banco de dados (cheio de dados médicos dos pacientes) para o servidor do OpenERP para reformatação. Isto é SaaSS: requer que o usuário do GNU Health (uma clínica) confie sua própria computação e seus dados ao desenvolvedor da empresa OpenERP. Em vez de se curvar, Falcón reescreveu o GNU Health para usar o Tryton.
O uso do SaaSS é inerentemente equivalente à execução de um programa privativo com funcionalidade bisbilhotar e uma backdoor universal. O serviço pode manter uma cópia dos bancos de dados que os usuários reformatam. Mesmo se pudermos confiar na empresa que administra o serviço para nunca mostrar intencionalmente qualquer forma de dados a ninguém, não podemos ter certeza de que ela não será acessada pelas agências de inteligência de vários países ou crackers de segurança (por favor, não os chame “hackers”).
Quando um programa está preso diacronicamente, soltá-lo da armadilha requer mais do que um trabalho de programação única. Em vez disso, o trabalho tem que ser feito continuamente, sempre que houver uma mudança no formato dos dados. Lançar um projeto com um compromisso de longo prazo para continuar fazendo isso não é fácil. Pode ser mais fácil pressionar a empresa a parar de tentar prender usuários – rejeitando o programa preso até que isso aconteça. Dado o quão difícil é liberar o programa, é melhor você ficar longe dele.
É possível experimentar um programa livre preso diacronicamente sem software não livre, mas se você vai fazer mais do que mexer, você deve evitar usá-lo. Ambas as empresas e indivíduos encontrarão alternativas livres que não apresentam esse problema; tudo o que é preciso para evitar a armadilha é reconhecê-la.