O que é uma licença de membro?
Uma licença de membro é uma chave de produto ligada a uma participação ativa, e não a uma compra única. A cópia que o membro tem do seu plugin, script ou bot verifica a chave periodicamente: funciona enquanto a participação dura, para quando ela termina e volta a funcionar se a pessoa entrar de novo. A participação é a licença. É essa a frase que o Nadi usa: a sua participação é a licença.
Por que isso existe
Quem vende um produto que roda — um plugin para um app de design, um script, um bot, uma pequena ferramenta web — conhece o desequilíbrio. A venda acontece uma vez e o trabalho nunca para: uma atualização a cada lançamento do app em que ele roda, perguntas, correções e um comprador de dois anos atrás que ainda escreve para você.
Uma assinatura resolve o lado do dinheiro e deixa uma pergunta em aberto: o que faz a assinatura valer a renovação? Se o produto continua funcionando na mão de quem parou de pagar, renovar é uma doação.
A licença de membro amarra as duas pontas. Enquanto a pessoa é membro, a cópia dela roda. Quando a participação termina, ela para. Quando a pessoa volta, roda de novo. Grandes softwares profissionais funcionam assim há anos; o que é mais novo é ligar a chave à participação numa comunidade, e não a uma compra única.
Como funciona: uma chave, uma verificação e um prazo de tolerância
Três peças, e cada uma resolve um problema óbvio.
- A chave. Uma sequência longa e aleatória que pertence a um membro e a um produto. Uma plataforma cuidadosa guarda a chave embaralhada, e não do jeito que foi escrita, para que ninguém que leia o banco de dados consiga ler as chaves.
- A verificação. O seu produto envia a chave para um endereço e recebe uma resposta curta: válida ou não válida. Algumas linhas dentro do seu produto, e nenhum servidor para você manter.
- O prazo de tolerância. Todo sim vem com uma validade assinada. O produto guarda a aprovação por esse tempo e não pergunta de novo até ela vencer, então funciona offline. A assinatura digital impede que alguém edite um arquivo no próprio computador para prolongá-la.
É o prazo de tolerância que torna a ideia utilizável. Sem ele, uma conexão com a internet vira requisito para rodar o produto, e o seu cliente para de trabalhar num avião. Com ele, o pior caso é alguém que saiu continuar trabalhando por mais alguns dias — um preço muito justo por um produto que não quebra.
A pergunta que mais importa: o que acontece quando o servidor de licenças cai
É isso que separa um design confiável de um que não é. O seu produto pergunta, e nenhuma resposta vem: a conexão caiu, a plataforma está fora do ar, a resposta demorou demais. O que o produto deve fazer?
Ele deve continuar funcionando. Só uma recusa explícita — uma resposta que diga claramente que esta chave foi revogada ou é desconhecida — pode parar um produto. Silêncio, erro e tempo esgotado não são recusas, e tratá-los como recusas significa que a pane de outra pessoa quebra o seu produto na frente do seu cliente.
Em uma linha: na dúvida, falhe aberto; na certeza, falhe fechado. Pergunte exatamente sobre esse comportamento antes de construir em qualquer plataforma, e leia o código que mandam você colar no seu produto. Se ele trata uma falha de rede como revogação, é a sua reputação que paga.
O que pode ser licenciado com honestidade, e o que não pode
A fronteira é simples: o que roda pode ser licenciado, o que não roda, não pode. Uma verificação é o produto ligando para casa, e um arquivo estático não liga para lugar nenhum.
- Um plugin, um script, um app, um bot: ele executa, então pode perguntar, e você pode impedir que ele rode. Aqui o licenciamento é real.
- Uma imagem, um arquivo de áudio, um documento, um pacote de presets: baixado uma vez e guardado. Nada nele pergunta nada a ninguém, e não há como tomá-lo de volta depois.
Por isso, chamar um arquivo estático de licenciado é uma afirmação que ninguém consegue fazer valer. O mecanismo honesto para esses casos é a própria porta: é a participação que libera o download, e quem sai não recebe a próxima versão. Isso é verdade e é útil — só não é uma licença, e nunca deveria ser vendido como uma.
O que perguntar a qualquer plataforma
Seis perguntas bastam para julgar qualquer implementação dessa ideia:
- A chave morre no mesmo momento que a participação, ou num ciclo mensal ou numa rotina noturna?
- Se o membro volta, a chave antiga dele volta junto, ou ele precisa colar uma nova no seu produto?
- Quanto dura o prazo de tolerância, quem o define, e a resposta vem assinada para não poder ser falsificada?
- O que o endpoint diz quando a plataforma está fora do ar: «não consigo responder» ou «não válida»?
- Quantas linhas a integração exige, e você precisa de um servidor ou banco de dados próprio?
- A opção de licenciar aparece em coisas que nunca poderiam ser controladas? Uma plataforma que deixa você licenciar um arquivo estático está vendendo uma aparência, não um mecanismo.
Um exemplo prático: como o Nadi faz
O Nadi é uma plataforma de comunidades, então esta é a parte em que descrevemos o nosso próprio produto. Só o que ele faz hoje.
- O dono marca um item da biblioteca da comunidade como licenciado, e cada membro recebe a sua própria chave, mostrada no cartão do item com um botão de copiar.
- A chave é validada enquanto a participação está viva, e passa a responder REVOKED no momento em que ela morre — seja porque o membro saiu, porque foi removido ou porque a assinatura dele venceu.
- Quando a pessoa entra de novo, o mesmo registro revive, então ninguém precisa colar uma chave nova em lugar nenhum.
- A integração tem cerca de dez linhas no seu produto. Ele verifica a chave uma vez por semana e continua funcionando offline entre uma e outra.
- O prazo de tolerância é de sete dias por padrão, e a resposta vem assinada, então o seu produto consegue distinguir o nosso token de tolerância de um arquivo que alguém editou no próprio computador.
- O endpoint falha aberto. Quando não conseguimos responder, dizemos isso, e nunca dizemos «não válida» no lugar. Uma pane do nosso lado nunca é disfarçada de revogação.
- O dono vê quem está usando o item, a situação de cada pessoa com chave — funcionando ou parada — e quando o produto dela fez check-in pela última vez.
- Publicar uma nova versão do item avisa só quem tem chave, não a comunidade inteira.
- A mensagem de recusa que um membro com a participação vencida vê cita o nome da comunidade e diz o que traz o produto de volta: entrar nela de novo.
Os limites, com honestidade
Nada no Nadi pode ser chamado de licenciado até provar que pode. A opção fica desligada em todo item, arquivo ou link, até que o próprio produto daquele item chame a nossa verificação com uma chave real pelo menos uma vez — o produto demonstra o mecanismo na nossa frente antes que a palavra «Licenciado» possa entrar na página dele. Um arquivo que o membro baixa e nunca liga à verificação, portanto, nunca é chamado de licenciado em lugar nenhum do nosso produto; o mecanismo honesto dele é a porta, onde é a participação que libera o download. Desligar uma licença é sempre permitido.
Falhar aberto é um compromisso, não uma brecha. O endpoint responde «indisponível» quando não consegue consultar o banco de dados, e o trecho de código que entregamos a você trata qualquer coisa que não seja uma resposta explícita como permissão para continuar rodando. Isso significa que alguém que saiu pode continuar trabalhando até o prazo de tolerância dele acabar, e aceitamos isso de propósito: o produto dos outros não pode quebrar porque um deploy nosso deu um soluço.
Dois últimos limites. A chave vem com a participação, e hoje não há como ter uma sem entrar. E uma chave compartilhada continua sendo uma chave ligada a uma participação — ela para quando essa participação para.