Não se "guarda contra" simplesmente contribuições ilegais.
Você nunca aceita cegamente uma contribuição e deve ter um processo para verificar as contribuições (incluindo a sua) para vários tipos de problemas:
- testes de unidade (automatizados)
- backdoors e falhas de segurança (a análise estática pode ajudar, existem outras ferramentas)
- cheiros de código (automatizados)
- lógica de código ruim (revisão por pares, "olhos suficientes para deixar bugs rasos" etc.) - a história do OpenSSL mostra que isso pode não ser suficiente
- Tenho certeza de que perdi vários outros - contribuições bem-vindas
"Tudo" que você precisa fazer é adicionar uma verificação de plágio . Isso pode ser feito, até certo ponto, com ferramentas automáticas, pesquisando apenas as linhas de código relevantes.
Eu tentei agora levantando alguns exemplos de código de projetos, e ele funciona. Simplesmente extraí strings, formatos, comentários e nomes de funções e protótipos do código, depois pesquisei em todos eles e observei onde um único site apareceu em várias correspondências. Em 17 testes em 19, o site de origem foi o primeiro dos cinco candidatos; em todos os casos, o site apareceu entre os cinco primeiros. Por outro lado, trechos do meu próprio código só acionavam falsos positivos em três (quatro) casos em vinte, com metas de qualidade muito baixa; portanto, examinando rapidamente meia dúzia de sites, pude ignorar o alerta. Além disso, com o código GPL, o snippet da Pesquisa Google era visivelmente o mesmo que o código que eu havia testado.
Neste ponto, estou confiante de que você poderia fazer isso manualmente . Dê uma olhada no código, veja os comentários (eles fazem sentido? Se não, isso é outro tipo de luz vermelha. Se sim, eles foram todos reformulados (!) Ou você os encontrará), tente um algumas seqüências de texto, conecte-as ao Google e / ou a outros mecanismos de pesquisa.
E você só precisa disso para contribuições consideráveis .
Do ponto de vista jurídico - estou me afastando rapidamente -, imagino que você precise que seus colaboradores aceitem alguma forma de renúncia ou acordo no qual eles afirmam que vão contribuir honestamente.
Quando não o fazem, e você perdeu isso (por exemplo, eles transformaram / ocultaram algum código GPL para que não seja encontrado no Google), as chances de IMHO são que ele nunca será descoberto, a menos que tenha sido feito para fins de armadilha, e eles mesmos apitam. Nesse ponto, seu projeto estará violando a GPL e você poderá:
- remova o código GPL do projeto
- declarar o restante do projeto abrangido pela GPL
Para que todo o cenário tenha qualquer tipo de problema realista, o "colaborador" deve:
- localize uma seção significativa do código GPL de proporções úteis,
- remova todas as informações de licenciamento,
- reescreva-o completamente - comentários, nomes de funções, nomes de variáveis não triviais, seqüências de texto - para que uma pesquisa não encontre o código e , no entanto, o deixe reconhecidamente o mesmo e, ao mesmo tempo, deixe-o funcionando
- deixe o código "guiar" na base de código e outros contribuidores dependam de sua funcionalidade , a ponto de removê-lo seria um problema
Todo o cenário, especialmente o último ponto, parece-me realmente absurdo. Uma vez que a verificação do plágio esteja em vigor, eu deixaria de me preocupar.