Unononsilimitaa"difendersi" dai contributi illegali.
Non accetti mai un contributo ciecamente e dovresti avere un processo per controllare i contributi (incluso il tuo) per diversi tipi di problemi:
- unit test (automatizzato)
- backdoor e falle di sicurezza (l'analisi statica potrebbe aiutare, esistono altri strumenti)
- codice odori (automatizzato)
- Scarsa logica di codice (revisione tra pari, "occhi sufficienti per rendere gli errori superficiali", ecc. - la storia di OpenSSL mostra che questo potrebbe non essere sufficiente)
- Sono sicuro che mi mancano diversi altri - contributi benvenuti
"Tutto" che dovresti fare sarebbe aggiungere un assegno per il plagio . Questo può essere fatto, fino ad un certo punto, con strumenti automatici semplicemente googliando le relative righe di codice.
Ho provato proprio ora sollevando alcuni esempi di codice dai progetti, e funziona. Ho semplicemente estratto stringhe, formati, commenti e nomi di funzioni e prototipi dal codice, quindi ho cercato su Google tutti gli elementi e ho osservato dove un singolo sito è apparso in più corrispondenze. In 17 test su 19 il sito di origine è stato il primo di cinque candidati; in tutti i casi, il sito è apparso tra i primi cinque. Al contrario, frammenti del mio stesso codice attivavano solo falsi positivi in tre (quattro) casi su venti, con obiettivi di qualità molto bassa, quindi rapidamente esaminando una mezza dozzina di siti ero in grado di respingere l'avviso. Con il codice GPL, inoltre, lo snippet di Ricerca Google era visibilmente uguale al codice che avevo sottoposto a test.
A questo punto sono sicuro che potresti farlo a mano . Dai un'occhiata al codice, guarda i commenti (hanno un senso? Se no, questo è un altro tipo di luce rossa. Se sì, o sono stati tutti riformulati (!) O li troverai), prova un un paio di stringhe di testo, collegali a Google e / o ad altri motori di ricerca.
E hai solo bisogno di questo per contributi considerevoli .
Da un punto di vista legale - Mi sto allontanando rapidamente dalla mia profondità - Immagino che tu abbia bisogno che i tuoi contributori accettino qualche forma di rinuncia o accordo in cui affermano che stanno andando per contribuire onestamente.
Quando non lo fanno, e ti sei perso (ad esempio hanno trasformato / offuscato qualche codice GPL in modo che non venga trovato su Google), IMHO è probabile che non verrà mai scoperto a meno che non sia stato fatto per intrappolare scopi, e loro stessi suonano il fischietto. A quel punto il tuo progetto sarà in violazione della GPL e puoi:
- rimuovi il codice GPL dal progetto
- dichiara che il resto del progetto rientra nella GPL
Affinché l'intero scenario sia un qualsiasi tipo di problema realistico, il "contributore" dovrebbe avere bisogno di:
- individua una sezione di codice GPL significativa di proporzioni utili,
- rimuovi tutte le informazioni sulla licenza,
- riscrivilo completamente - commenti, nomi di funzioni, nomi di variabili non banali, stringhe di testo - in modo che una ricerca non trovi il codice, e tuttavia lo lasci riconoscibile allo stesso modo e al Allo stesso tempo lasciarlo funzionante
- lascia che il codice "stufato" nella codebase e gli altri contributori facciano affidamento sulla sua funzionalità , al punto che la sua rimozione sarebbe un problema
L'intero scenario, specialmente l'ultimo punto, mi sembra davvero inverosimile. Una volta che il controllo del plagio sarà a posto, vorrei smettere di preoccuparmi.