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


42

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, bello, quindi ho bisogno di ottenere il valore minimo e ... questo file !? Quindi ho bisogno di aprire l'intero progetto per questo? O devo reinventare la matematica?

Non credo che sia semplicemente folle, quindi la domanda è: quando possiamo semplicemente rimuovere l'intestazione GPL?

Devo essere uno strano 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?


22
Bene, nel recente caso di Google vs Oracle the jury did find that one nine-line function that Google acknowledged copying was infringing(da ArsTechnica ).
Zenon,

5
Oh, dai, sul serio, min?
Mircea Chirea,

33
Direi che l'esistenza stessa di questa domanda dimostra una cosa negativa - Il lavoro di un programmatore è diventato meno programmazione, più disordine legale e burocrazia
K.Steff,

4
Copialo . Una funzione banale come minnon è coperta da copyright. Vedi la mia risposta per i dettagli.
Tony the Pony,

6
@Loki, ti manca da un miglio. Gli algoritmi sono coperti da brevetti, non da copyright. Il copyright scade 70 anni dopo la morte dell'autore, quindi le opere protette da copyright negli anni '60 sono ancora abbastanza recenti. Infine, la domanda è sulla copia di QUESTO codice, non sull'algoritmo.
alexis,

Risposte:


53

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

Assicurati che la formattazione del codice corrisponda al tuo standard di codifica e che 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 in qualche modo richiede che la funzione appaia esattamente come nel frammento, così sia - purché sembri come se l'avessi scritta da zero.

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

Anche avere questa discussione mi sembra un po 'superfluo: dobbiamo essere pragmatici se vogliamo fare un vero lavoro!


5
la vera domanda è dove si trova la barriera tra banale e non banale ed esiste un modo per essere assolutamente sicuri che le persone non indicheranno il mio codice con qualcosa di simile "GUARDA È LA MIA REALIZZAZIONE MIN DI GPL!" ... Temo davvero che quelle persone> _ <
CND

20
Bene, esiste il concetto di soglia di originalità nel diritto d'autore. E un metodo così semplice dovrebbe difficilmente essere protetto da copyright. IANAL, tuttavia, e le giurisdizioni variano. Tuttavia, qualcosa che ogni studente di CS ha scritto almeno cinque volte esattamente nello stesso modo potrebbe benissimo rientrare in questo.
Joey,

4
@nilu: Let us then say that the programmer wrote his own version of MIN and it ended up looking exactly like the one from math.c - would it then be okay?Sì, se è stato un incidente. "Che differenza farebbe allora se l'avesse appena copiato?" I bit hanno colore . ansuz.sooke.bc.ca/entry/23 Questo non è qualcosa che la maggior parte degli scienziati informatici può capire - è davvero un argomento complesso, ma è qualcosa che è riconosciuto dalla legge. In caso di dubbi sul fatto che qualcosa sia legale o meno, è meglio parlare con un avvocato .
Mark Byers,

4
@alexis: capisco il tuo punto, ma non sono davvero d'accordo - se il codice risultante è identico, nessuno tranne il programmatore può sapere se è stato copiato o scritto da zero. Ovviamente, si dovrebbero avere pochi problemi nell'implementazione di min e probabilmente ci vorrebbe meno tempo che trovare un'altra implementazione. Tuttavia, se un programmatore lo copia davvero e nessun altro sa di non aver scritto la funzione da solo, quale danno è stato fatto? A meno che il programmatore non provi una sorta di "colpa", la risposta è nessuna. Il resto è semplicemente semantica.
nilu,

5
@MarkByers: Quando dico "impossibile provare", intendo che non esistono prove fisiche che dimostrino che un crimine è stato commesso, il crimine che è stato commesso è completamente confinato nella mente del programmatore. Ovviamente, questo non può essere il caso se alcuni dolci vengono rubati - questo ha un impatto fisico sul mondo (lecca-lecca - = 1). Se il "crimine" è limitato alla tua mente, chi giudica se è morale o immorale?
nilu,

18

Non risponde direttamente alla tua domanda, ma prova questo:

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

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

Se sei macro-fobico, prova questa versione in linea (davvero, a meno che tu non stia codificando su uno SPARC, risparmierai molti cicli della CPU non avvolgendo una funzione onnipresente come minnel codice di invio / uscita):

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

La questione della concessione di licenze di codice per frammenti banali è un po 'fastidiosa, davvero. Verificare con un avvocato, ma sono tentato di supporre che non possano davvero essere autorizzati e / o che le licenze non possano essere applicate nella pratica. Come se non fosse possibile tutelare il copyright o il marchio commerciale della parola "parola", quindi affidarsi alle persone che la usano. (Oops)


1
Oh, possono certamente proteggere quel codice, ma data la semplicità dell'algoritmo, sarebbero difficili da provare in tribunale che lo hai copiato a meno che tu non abbia fatto qualcosa di stupido come lasciare i commenti intatti, ecc. La regola non è che puoi usa lo stesso codice, la regola è che puoi farlo solo se lo hai scritto usando il tuo cervello e non hai copiato l'originale in alcun modo.
Gort il robot,

2
@StevenBurnap Ovviamente anche il codice originale avrebbe gli stessi problemi: possono dimostrare di avere un copyright (cioè non averlo copiato da un'implementazione precedente)?
Richard,

19
Il problema con la versione macro di min viene quando si tenta di farlo min(a++,b++).

4
"rilasciare questo ... al pubblico dominio" è molto incentrato sugli Stati Uniti. Non significa la stessa cosa in molti paesi e in alcuni non è legalmente possibile.

9
Grazie, ma su un compilatore degli anni 2000, un compilatore può incorporare banalità come min.
DeadMG

18

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

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

Nel mondo legale, questa è conosciuta come la dottrina della fusione (nota anche come divisione idea-espressione). Si dice che l' idea (non copyrightable) della funzione si sia "unita" con l' espressione (potenzialmente copyrightable) . Pertanto, il codice non è soggetto a copyright: sei libero di usarlo.

Per essere al sicuro, non copiarlo alla lettera . Usa nomi diversi per le variabili, applica la tua formattazione, non copiare i commenti parola per parola. L'esatta rappresentazione letterale di questo codice può essere coperta da copyright.

Tieni presente che questo non garantisce che qualcuno non ti farà causa, ma almeno avrai una forte 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 minfunzione).


2
Prova a dirlo a Oracle!
GordonM,

1
Forse quella funzione a 9 righe non era banale ... Mi piacerebbe vedere il codice.
Tony the Pony,

1
programmers.stackexchange.com/a/148362/28718 mi sembra abbastanza banale, supponendo che sia il codice corretto.
GordonM,

12

Sto rilasciando il seguente codice con la licenza BSD . Dato che la 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);
}

Come posso essere sicuro di non aver sigillato quel codice GPL e di riscriverlo? : P (scherzando)
cnd

1
Tu non sei. Ma se hai usato il mio codice puoi affermare di averlo usato in buona fede.
GordonM,

3
Rallegrati, fratelli, come è nata la nuova era - ora possiamo trovare minnel software a sorgente chiuso. Inoltre, @Sholy, ora è un problema di GordonM se lo ha copiato o meno.
K.Steff,

5
Lo rilasci anche sotto "Creative commons" Vedi il fondo di questa pagina sul codice incollato qui.
Martin York,


11

È una situazione assurda, sono d'accordo, ma 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, conserva la documentazione e sentiti libero di implementare nuovamente qualsiasi parte dell'API di cui hai bisogno. Se non leggi il codice, non devi preoccuparti se il tuo codice risulta simile.

Spreco, dici? La GPL impedisce intenzionalmente di beneficiare del codice gratuito senza restituire all'ecosistema. Se non puoi o non rispetti i suoi termini e non vuoi implementare ancora un'altra libreria matematica, puoi sempre acquistarne una o trovarne una gratuita fornita con una licenza che puoi accettare.

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

Non hai il diritto di utilizzare questo math.c, ma nessuno sta cercando di spaccare il mercato sulle implementazioni di min. L'obiettivo della GPL è aumentare la "libertà" del programmatore (e la libertà dell'utente finale), non limitarla. La licenza GNU, la FSF e il movimento per il software libero sono iniziati con Richard Stallman e Stallman ha iniziato con la reimplementazione da zero ogni nuova versione di Symbolics lisp non appena è uscita. La FSF non voleva (e non poteva) cercare nessuno per la reimplementazione di una libreria GPL.


Quindi, ma è un esempio davvero strano. È un esempio, ciò significa che devo leggerlo e seguirlo ... ma per quanto ho capito, sono libero di non scegliere la licenza GPL qui. Quindi so chi è Stallman;)
cnd

2
Sholy, scusa ma non ho idea di quello che stai dicendo! Quale esempio? (Mi stai chiedendo anche chi è Stallman? Google. O semplicemente controlla wikipedia.)
alexis,

3
"I programmatori di Microsoft non sono autorizzati a leggere il codice open source" oh mio, è orribile - c'è un posto dove posso leggere al riguardo? Google non aiuta.
amara,

Buona domanda. L'ho letto in alcuni forum di sviluppo di Iron Python, ma sfortunatamente non riesco a trovarlo ora. Riepilogo: Jim Hugunin ( hugunin.net/microsoft_farewell.html ) ha affermato che non è consentito guardare l'implementazione di Python e qualcuno ha scherzosamente chiesto se gli è permesso guardare il proprio codice (Microsoft ha reso Iron Python open source) . La risposta è: hanno fatto un'eccezione speciale per Iron Python.
alexis,

Le persone di cui la GPL intende aumentare sono tutti gli utenti del programma, non (in particolare) i programmatori.
James Youngman,

7

Risposta: Solo con esplicito permesso dell'autore.

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

Dovrai scrivere la tua versione mino copiare una variante minche utilizza una licenza diversa.

Ricorda, con il 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 comunque protetto da copyright.


1
Cosa significa la propria versione? LA MIA PROPRIA versione di MIN, suona esilarante!
CND

2
Ricorda, non possiedi min, possiedi una particolare sequenza di personaggi che capita di implementare min.
Gort il robot,

2
Non puoi cambiarlo affatto senza il permesso dell'autore se non per uso personale. Devi riscriverlo da zero. Questo è il punto. Nota che se ti sedessi a un editor vuoto e scrivessi qualcosa di quasi identico a quello, andrebbe bene, perché non l'hai copiato. (Supponendo che non stavi scrivendo a memoria.)
Gort il robot,

2
No, non sto scherzando. E sì, probabilmente puoi cavartela in casi come questo. Spetterebbe al detentore del copyright dimostrare che l'hai fatto. Nota che ti sto solo dicendo qual è la legge, non la difendo.
Gort il robot,

3
Perché se non ricodichi queste cose banali, stai usando il lavoro di qualcun altro in un modo che non ti hanno dato il permesso di fare. Se è così banale che non ne hai bisogno, non usarlo.
alexis,

6

Questo è ciò che Google presumibilmente ha fregato. 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     }

Se questo è tutto, il verdetto verrà lanciato in appello. Ma secondo Wired, il giudice ha anche scoperto che Google ha copiato altri 8 file. Vedi wired.com/wiredenterprise/2012/05/google-oracle-decompile
Tony the Pony

5
Sì, ma il "buon senso" non è la barra del copyright. È se hanno copiato e modificato o scritto se stessi da zero. Se qualcosa è "buon senso" è il test per i brevetti, non per i diritti d'autore. In altre parole, Oracle può proteggere il copyright di quel testo, ma non può brevettare tale algoritmo.
Gort il robot,

Queste 9 righe sono un classico esempio della dottrina della fusione. Quanti altri modi ci sono per eseguire un controllo della portata su un array?
Tony the Pony,

1
@TonythePony, molti, se la funzione genera un'eccezione contenente un messaggio testuale.
avakar,

4
Poche persone hanno detto che la persona che ha copiato questo testo su Google è anche la persona che l'ha scritto su Sun. I programmatori devono rendersi conto che Stallman - il folle estremista barbuto - aveva ragione . Il denaro, quella radice di tutti i mali, fa dimenticare in primo luogo il motivo per cui partecipano alla tecnologia. : - /
HostileFork,

5

Non userò questo codice comunque, perché il commento non corrisponde a quello che fa il codice. Il commento parla integer, mentre il codice usa unsigned int. Chi sa quali errori sono sepolti nelle profondità di questa funzione?

Seriamente, è qui che "Non reinventare la ruota" diventa ridicolo e ti sei dimenticato di prenderlo con un granello di sale. Scrivi la tua versione da zero, abbinala alla convenzione di denominazione e alla guida di stile del tuo codice (ad es. math_min_uint(x, y)), Assicurati che funzioni (unit test o altro) e continua con la vita e senza problemi di copyright.

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


2

Le persone sembrano dimenticare che la legge sul copyright, sia nello spirito che nella lettera, significa che l'atto di copiare realmente è proibito - non l'atto di esprimere lo stesso pensiero da soli, anche se il risultato risulta sospettosamente simile.

Se prendi il codice GPL, lo modifichi, lo usi in modo contrario alla licenza in base alla quale lo hai ricevuto e affermi che non è un'opera derivata, allora stai violando la legge. Anche se usi la tua seconda versione, hai cambiato i nomi di tutte le variabili e modificato la formattazione, ma è comunque derivato dall'originale.

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

Se una delle due storie sarebbe passata in tribunale è comunque una questione diversa. Se un campione di codice più grande o più complesso viene visualizzato da qualche altra parte, completo di commenti, formattazione ed errori di ortografia, avrai difficoltà a convincere chiunque lo abbia scritto in modo indipendente, tanto più se si può dimostrare che si conosceva l'originale fonte (che, dato che l'hai pubblicato qui, dovrebbe essere abbastanza banale).


1

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

A seconda della licenza, è possibile che sia possibile includere il codice nell'applicazione chiusa.


1

Scrivilo tu stesso in 30 secondi. Puoi usare esattamente lo stesso algoritmo. Basta non copiare / incollare.

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

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


1

Come suo codice GPL la grande domanda qui è che stai pianificando di distribuire il tuo codice o vendere il tuo software.

Se lo stai usando solo internamente, la GPL ti dà la completa libertà di fare ciò che desideri.

Se hai intenzione di distribuire il tuo pacchetto, la cosa più semplice è GPL il tuo pacchetto alle stesse condizioni di qualsiasi fonte GPL che hai usato. 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 con la stessa licenza GPL con cui lo hai ottenuto.


0

Se stai usando C ++ e non C, elimina questo problema usando la libreria standard std::mino std::maxin <algorithm>:

http://www.cplusplus.com/reference/algorithm/min/

Questo ti compra generalità e funzionerà per qualsiasi tipo comparabile. Inoltre: quando qualunque d-bag proverà a dichiarare di averlo inventato ed è coperto da brevetti software, romperanno con il comitato ISO ... non tu.

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


-2

Per il caso generale: codice più complesso che è sicuramente in grado di proteggere il copyright, al contrario di min e max (che può o meno essere in grado di proteggere il copyright).

Quindi autorizza il tuo codice in conformità con la libreria ie GPL! Si noti tuttavia che ci sono librerie LGPL (e GPL con eccezioni) che ti consentono di utilizzare le loro implementazioni dando al tuo codice la licenza che desideri.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.