Cosa devo fare per NON rubare il codice "Hello World" con una licenza GPL?

41

Nel progetto, ho trovato un file, math.c , con una grande intestazione GPL e ...

//------------------------------------------------------------------------------
/// Returns the minimum value between two integers.
/// \param a  First integer to compare.
/// \param b  Second integer to compare.
//------------------------------------------------------------------------------
unsigned int min(unsigned int a, unsigned int b)
{
    if (a < b) {
        return a;
    }
    else {
        return b;
    }
}

OK, fantastico, quindi ho bisogno di ottenere il valore minimo e ... questo file !? Quindi ho bisogno di aprire l'intero progetto a causa di esso? O devo reinventare la matematica?

Non credo sia solo una follia, quindi la domanda è: quando possiamo rimuovere l'intestazione GPL?

Devo essere un weirdo e farlo ?:

unsigned int min(             unsigned int
JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE,
unsigned int hyrthrtRERG            ) {  if
(JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE
< hyrthrtRERG            ) {  return JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE;  }
else {return hyrthrtRERG            ;    } }

Seriamente, vogliono che scriva codice come sopra?

    
posta Cynede 12.05.2012 - 06:41
fonte

14 risposte

53

A differenza di molti utenti qui, vorrei semplicemente suggerire: Copia!

Assicurati che la formattazione del codice sia adatta allo standard di codifica e probabilmente dovresti rimuovere o riscrivere il commento. Nessuno saprà mai che l'hai copiato: quando un pezzo di codice è così semplice, potresti anche averlo scritto da zero. Se il tuo standard di codifica richiede in qualche modo che la funzione assomigli esattamente allo snippet, così sia, a patto che sembri come se fosse stata scritta da zero.

Pensaci, è difficile (!) la prima volta che questo pezzo esatto è stato scritto - quando qualcosa è così banale, ci sono poche ragioni per non copiarlo, se non hai voglia di scriverlo da solo.

Anche se questa discussione mi sembra un po 'superflua, dobbiamo essere pragmatici se vogliamo fare un vero lavoro!

    
risposta data 12.05.2012 - 10:20
fonte
18

Non risponde direttamente alla tua domanda, ma prova questo:

#define min(a,b) ((a) < (b) ? (a) : (b))

Con il presente rilascio questa macro gloriosa e complessa di pubblico dominio. Anche se potrei dover pubblicare un articolo su questa tecnica.

Se sei macro-fobico, prova questa versione inline (in realtà, a meno che tu non stia codificando su uno SPARC, risparmierai molti cicli di CPU non avvolgendo una funzione tanto onnipresente quanto min in entrata / uscita codice):

inline int min(int a, int b)
{
    return a < b ? a : b;
}

Il problema delle licenze di codice per frammenti snippet è davvero un po 'fastidioso. Verificare con un avvocato, ma sono tentato di presumere che non possono davvero essere autorizzati e / o la licenza non può essere applicata in pratica. Come non si può copyright o marchio di fabbrica la parola 'parola', quindi appoggiarsi a chi la usa. (Oops)

    
risposta data 12.05.2012 - 06:50
fonte
18

Disclaimer : non sono un avvocato. Usa il mio consiglio a tuo rischio.

Questa implementazione di min è non copyrightable , poiché ci sono solo pochissimi modi ragionevoli per scriverlo.

Nel mondo legale, questo è noto come dottrina della fusione (noto anche come divisione idea-espressione). Si dice che l'idea (non protetta da copyright) della funzione si "fonde" con l'espressione (potenzialmente protetta dal copyright) . Pertanto, il codice non è soggetto a copyright - sei libero di usarlo.

Per sicurezza, non copiarlo verbatim . Usa nomi diversi per variabili, applica la tua formattazione, non copiare i commenti parola per parola. L'esatta rappresentazione letterale di questo codice può essere coperta dal copyright.

Ricorda che questo non garantisce che qualcuno non ti denunci, ma almeno avrai una strong difesa.

Inoltre, tieni presente che anche se un pezzo di codice non è protetto da copyright, potrebbe comunque essere coperto da un brevetto software (non è il caso della tua funzione min ).

    
risposta data 12.05.2012 - 16:41
fonte
12

Sto rilasciando il seguente codice sotto la licenza BSD . Dato che questa licenza è molto più permissiva, non dovresti incorrere in problemi di copyright se usi la mia implementazione.

unsigned int min(unsigned int a, unsigned int b)
{
    return (a > b? b: a);
}
    
risposta data 12.05.2012 - 10:25
fonte
11

È una situazione assurda, sono d'accordo, ma tu hai solo te stesso da incolpare. Se stai scrivendo un codice proprietario, non dovresti leggere i file sorgente con licenza GPL, punto. Rimuovi math.c dal tuo filesystem, mantieni la documentazione e sentiti libero di ri-implementare qualsiasi parte dell'API di cui hai bisogno. Se non leggi il codice, non devi preoccuparti se il tuo codice risulta simile.

Sprecone, dici? La GPL ti impedisce intenzionalmente di beneficiare del codice libero senza restituire all'ecosistema. Se non puoi o non vuoi soddisfare i suoi termini e non vuoi implementare un'altra libreria matematica, puoi sempre comprarne uno o trovarne uno gratuito che viene fornito con una licenza che puoi accettare.

I programmatori di Microsoft non sono autorizzati a leggere il codice open source, per proteggere l'azienda da problemi legali. Per ragioni puramente etiche, dovresti fare lo stesso con qualsiasi programma la cui licenza non intendi aderire.

Non hai il diritto di utilizzare questo math.c , ma nessuno sta cercando di mettere il mercato in difficoltà su implementazioni di min . L'obiettivo della GPL è aumentare la "libertà" del programmatore (e la libertà dell'utente finale), non limitarlo. La licenza GNU, la FSF e il movimento del software libero sono iniziati con Richard Stallman, e Stallman ha iniziato a reimplementare da zero ogni nuova versione di lisp di Symbolics. La FSF non voleva (e non poteva) chiedere a nessuno di ri-implementare una libreria GPL.

    
risposta data 12.05.2012 - 13:39
fonte
7

Risposta: solo con il permesso esplicito dell'autore.

Questo è un codice protetto da copyright. Non puoi copiarlo senza il permesso dell'autore.

Dovrai scrivere la tua versione di min o copiare una variante di min che utilizza una licenza diversa.

Ricorda, con copyright, è il codice che è protetto, non l'algoritmo. La legge sul copyright deriva dal testo. Anche se "math.c" non era altro che commenti e non aveva alcun codice eseguibile, sarebbe ancora protetto da copyright.

    
risposta data 12.05.2012 - 06:54
fonte
6

Questo è ciò che Google presumibilmente ha derubato. Questo sembra un buon senso per un array.

 908     /**
 909      * Checks that fromIndex and toIndex are in range, and throws an
 910      * appropriate exception if they aren't.
 911      *
 912      * @param arrayLen the length of the array
 913      * @param fromIndex the index of the first element of the range
 914      * @param toIndex the index after the last element of the range
 915      * @throws IllegalArgumentException if fromIndex > toIndex
 916      * @throws ArrayIndexOutOfBoundsException if fromIndex < 0
 917      *         or toIndex > arrayLen
 918      */
 919     private static void rangeCheck(int arrayLen, int fromIndex, int toIndex) {
 920         if (fromIndex > toIndex)
 921             throw new IllegalArgumentException("fromIndex(" + fromIndex +
 922                        ") > toIndex(" + toIndex+")");
 923         if (fromIndex < 0)
 924             throw new ArrayIndexOutOfBoundsException(fromIndex);
 925         if (toIndex > arrayLen)
 926             throw new ArrayIndexOutOfBoundsException(toIndex);
 927     }
    
risposta data 12.05.2012 - 18:41
fonte
5

Non userò comunque questo codice, perché il commento non corrisponde a ciò che fa il codice. Il commento parla di integer , mentre il codice utilizza unsigned int . Chissà quali errori sono sepolti all'interno di questa funzione?

Sul serio, è qui che "Non reinventare la ruota" diventa ridicolo e hai dimenticato di prenderlo con un granello di sale. Basta scrivere la propria versione da zero, abbinarla alla convenzione di denominazione e alla guida di stile del codice (ad esempio math_min_uint(x, y) ), assicurarsi che funzioni (unit test o altro) e andare avanti con la vita e senza problemi di copyright.

Con la crescente esperienza, questi insignificanti frammenti di cui hai bisogno sono ancora e solo nella tua cassetta degli attrezzi e li riscriveresti senza pensarci troppo, o semplicemente li prenderesti dalla tua libreria.

    
risposta data 12.05.2012 - 09:54
fonte
2

La gente sembra dimenticarsi che la legge sul copyright, sia nello spirito che nella lettera, significa che l'atto di copiare effettivamente è proibito - non l'atto di esprimere lo stesso pensiero da soli, nemmeno se il risultato risulta sospettosamente simile.

Se prendi il codice GPL, modificalo, usalo in modo contrario alla licenza con cui lo hai ricevuto e rivendica che non è un lavoro derivato, allora stai infrangendo la legge. Anche se utilizzi la tua seconda versione, hai cambiato i nomi di tutte le variabili e hai modificato la formattazione, ma è comunque derivata dall'originale.

Se, tuttavia, scrivi la tua versione di min , e a causa della banalità del compito, il fatto che ci sono solo tanti modi in cui puoi sensibilmente scrivere una cosa del genere, e un po 'di coincidenza, il tuo la versione finisce per essere esattamente identica al codice GPL, quindi non hai copiato nulla.

Comunque sia che la storia sia passata in tribunale è una questione diversa. Se un campione di codice più grande o più complesso si presenta altrove, completo di commenti, formattazione e errori di ortografia, ti sarà difficile convincere chiunque lo abbia scritto in modo indipendente, a maggior ragione se può essere dimostrato che conoscevi l'originale fonte (che, dato che l'hai pubblicata qui, dovrebbe essere abbastanza banale).

    
risposta data 13.05.2012 - 00:06
fonte
1

Se il codice è davvero banale come l'esempio "min", allora c'è un'alta probabilità che qualcun altro abbia già implementato la stessa funzionalità con una diversa licenza open source.

A seconda della licenza, potresti essere autorizzato a includere il codice nel tuo app di closed source.

    
risposta data 17.05.2012 - 20:45
fonte
1

Scrivilo tu stesso in 30 secondi. È possibile utilizzare esattamente lo stesso algoritmo. Non copiare / incollare.

Il copyright protegge solo l'espressione di un'idea, non l'idea stessa. Puoi utilizzare direttamente l'idea se non la copi.

FWIW, dubito che copiare un pezzo così banale di codice ti metterebbe comunque nei guai. I danni sarebbero pari a zero e probabilmente ricorrerebbero a un uso corretto nella maggior parte delle giurisdizioni. Ma i casi legali sono un tale dolore che non vorrei rischiare.

    
risposta data 18.05.2012 - 03:01
fonte
1

Come codice GPL la grande domanda qui è che stai progettando di distrubuire il tuo codice o vendere il tuo software.

Se la utilizzi internamente, GPL ti offre la completa libertà di fare ciò che desideri.

Se hai intenzione di distribuire il pacchetto, la cosa più semplice è GPL il tuo pacchetto con gli stessi termini di qualsiasi fonte GPL che hai utilizzato. Ci sono altri modi, ma diventa complicato.

Se hai intenzione di vendere il tuo software, devi distribuire il codice sorgente per qualsiasi codice GPL che hai usato e / o modificato sotto la stessa licenza GPL con la quale lo hai ottenuto.

    
risposta data 18.05.2012 - 04:06
fonte
0

Se utilizzi C ++ e non C, elimini questo problema utilizzando la libreria standard std::min o std::max in <algorithm> :

link

Questo ti compra generalità e funzionerà per qualsiasi tipo comparabile. Inoltre: quando qualsiasi d-bag tenta di rivendicare di averlo inventato ed è coperto da brevetti software, si romperà con il comitato ISO ... non tu.

Nel caso generale, prendi nota di chi ha pubblicato il codice. Corporazione o individuo sano? Se è un individuo sano di mente (come nel caso di molti open source), scrivi una bella nota per loro e ottieni il permesso. Salva la loro risposta dicendo che va bene. Problema risolto.

    
risposta data 18.05.2012 - 02:34
fonte
-2

Per il caso generale: codice più complesso che è sicuramente adatto al copyright, al contrario di min e max (che potrebbero essere o meno copyrightabili).

Quindi autorizza il tuo codice in conformità con la libreria, ad es. GPL! Nota comunque che ci sono librerie LGPL (e GPL con eccezioni) che ti permettono di usare le loro implementazioni dando al tuo codice qualunque licenza tu desideri.

    
risposta data 14.05.2012 - 14:53
fonte

Leggi altre domande sui tag