¿Qué debo hacer para NO robar el código "Hello World" con una licencia GPL?

41

En el proyecto, encontré un archivo, math.c , con un encabezado GPL grande y ...

//------------------------------------------------------------------------------
/// 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;
    }
}

De acuerdo, genial, necesito obtener el valor mínimo y ... este archivo ! ¿Así que necesito abrir todo el proyecto por eso? ¿O necesito reinventar las matemáticas?

No creo que sea una locura, entonces la pregunta es: ¿cuándo podemos eliminar el encabezado GPL?

¿Debo ser un bicho raro y hacerlo ?:

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

En serio, ¿quieren que escriba un código como el anterior?

    
pregunta Cynede 12.05.2012 - 06:41

14 respuestas

53

A diferencia de muchos de los usuarios aquí, yo simplemente sugeriría: ¡Cópialo!

Asegúrese de que el formato del código se ajuste a su estándar de codificación y también es probable que deba eliminar o volver a escribir el comentario. Nadie sabrá nunca que lo copiaste. Cuando un fragmento de código es así de simple, es mejor que lo hayas escrito desde cero. Si su estándar de codificación de alguna manera requiere que la función se vea exactamente como lo hace en el fragmento de código, así sea, siempre que se vea como se vería si lo hubiera escrito desde cero.

Piénsalo, esta no es la primera vez que se escribe esta pieza exacta: cuando algo es tan trivial, hay pocas razones para no copiarlo, si no tienes ganas de escribirlo tú mismo.

Incluso tener esta discusión me parece un poco superfluo. ¡Tenemos que ser pragmáticos si queremos hacer un trabajo real!

    
respondido por el nilu 12.05.2012 - 10:20
18

No responde directamente a tu pregunta, pero intenta esto:

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

Por este medio libero esta macro gloriosa y compleja para el dominio público. Aunque es posible que tenga que publicar un artículo sobre esta técnica.

Si eres macro-fóbico, prueba esta versión en línea (en realidad, a menos que estés codificando en un SPARC, ahorrarás muchos ciclos de CPU al no envolver una función tan ubicua como min en entrar / salir código):

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

El problema de las licencias de código para fragmentos triviales es un poco molesto, en realidad. Consulte con un abogado, pero estoy tentado de asumir que realmente no pueden tener una licencia y / o que la licencia no se puede hacer cumplir en la práctica. Igual que usted no puede usar el copyright o la marca registrada de la palabra "palabra", luego apoyarse en las personas que la usan. (oops)

    
respondido por el Alexios 12.05.2012 - 06:50
18

Descargo de responsabilidad : no soy un abogado. Usa mi consejo bajo tu propio riesgo.

Esta implementación de min es no tiene derechos de autor , ya que hay muy pocas formas razonables de escribirla.

En el mundo legal, esto se conoce como doctrina de fusión (también conocido como la división de idea-expresión). Se dice que la idea con derechos de autor () de la función se "fusionó" con la expresión (potencialmente con derechos de autor) . Por lo tanto, el código no está sujeto a derechos de autor, puede utilizarlo libremente.

Para estar seguro, no lo copie textualmente . Use nombres diferentes para las variables, aplique su propio formato, no copie los comentarios palabra por palabra. La representación literal exacta de este código puede estar cubierta por derechos de autor.

Ten en cuenta que esto no garantiza que alguien no te demandará, pero al menos tendrás una defensa sólida.

Además, tenga en cuenta que incluso si un fragmento de código no está protegido por derechos de autor, podría estar cubierto por una patente de software (este no es el caso de su función min ).

    
respondido por el Tony the Pony 12.05.2012 - 16:41
12

Estoy lanzando el siguiente código bajo la licencia BSD . Como esa licencia es mucho más permisiva, no debería tener problemas de derechos de autor si utiliza mi implementación.

unsigned int min(unsigned int a, unsigned int b)
{
    return (a > b? b: a);
}
    
respondido por el GordonM 12.05.2012 - 10:25
11

Es una situación absurda, estoy de acuerdo, pero solo tú tienes la culpa. Si está escribiendo código propietario, no debe leer los archivos fuente con licencia GPL, punto. Elimine math.c de su sistema de archivos, conserve la documentación y siéntase libre de volver a implementar cualquier parte de la API que necesite. Si no lee el código, no debe preocuparse si su propio código resulta similar.

¿Desperdicio, dices? La GPL le impide intencionalmente beneficiarse del código libre sin devolverle nada al ecosistema. Si no puede o no cumple con sus términos y no desea implementar otra biblioteca matemática, siempre puede comprar una o encontrar una gratuita que venga con una licencia que pueda aceptar.

A los programadores de Microsoft no se les permite leer el código fuente abierto, para proteger a la compañía de problemas legales. Por razones puramente éticas, debería hacer lo mismo con cualquier programa cuya licencia no tenga intención de cumplir.

No tiene derecho a usar este math.c , pero nadie está tratando de arrinconar al mercado con implementaciones de min . El objetivo de la GPL es aumentar la "libertad" del programador (y la libertad del usuario final), no restringirla. La licencia de GNU, la FSF y el movimiento de software libre comenzaron con Richard Stallman, y Stallman comenzó con la reimplementación desde cero cada nueva versión de Symbolics lisp a medida que salía. La FSF no iría (ni podría) perseguir a nadie para volver a implementar una biblioteca GPL.

    
respondido por el alexis 12.05.2012 - 13:39
7

Respuesta: Sólo con permiso explícito del autor.

Eso es código con derechos de autor. No puede copiarlo sin el permiso del autor.

Tendrá que escribir su propia versión de min , o copiar una variante de min que usa una licencia diferente.

Recuerde, con derechos de autor, es el código que está protegido, no el algoritmo. La ley de derechos de autor proviene del texto. Incluso si "math.c" no era más que comentarios y no tenía ningún código ejecutable, still estaría protegido por derechos de autor.

    
respondido por el Steven Burnap 12.05.2012 - 06:54
6

Esto es lo que supuestamente Google estafó. Esto parece sentido común para una matriz.

 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     }
    
respondido por el Chrispix 12.05.2012 - 18:41
5

No usaré este código de todos modos, porque el comentario no coincide con lo que hace el código. El comentario habla sobre integer , mientras que el código usa unsigned int . ¿Quién sabe qué errores están ocultos en las profundidades de esta función?

En serio, aquí es donde "No reinventar la rueda" se vuelve ridículo y se te olvidó tomarla con un grano de sal. Simplemente escriba su propia versión desde cero, compárela con la convención de nomenclatura y la guía de estilo de su código (por ejemplo, math_min_uint(x, y) ), asegúrese de que funcione (prueba de unidad o lo que sea) y continúe con vida y sin problemas de derechos de autor.

Con una experiencia cada vez mayor, estos fragmentos triviales que necesita una y otra vez están solo en su caja de herramientas y los reescribirá sin pensar demasiado, o simplemente los obtendrá de su propia biblioteca.

    
respondido por el Secure 12.05.2012 - 09:54
2

La gente parece estar olvidando que la ley de derechos de autor, tanto en espíritu como en letra, significa que el acto de copiar en realidad está prohibido, no el acto de expresar el mismo pensamiento, ni siquiera si el resultado resulta sospechosamente similar.

Si toma el código GPL'd, lo modifica, lo usa de una manera que va en contra de la licencia bajo la cual lo recibió y afirma que no es un trabajo derivado, entonces está violando la ley. Incluso si utiliza su segunda versión, ha cambiado los nombres de todas las variables y ha modificado el formato, pero aún se deriva del original.

Sin embargo, si escribe su propia versión de min , y debido a la trivialidad de la tarea, el hecho de que solo hay tantas formas en las que puede escribir sensiblemente tal cosa, y un poco de coincidencia, su La versión termina siendo exactamente idéntica al código GPL, entonces no has copiado nada.

Sin embargo, si una historia pasaría o no en el tribunal es un asunto diferente. Si aparece un ejemplo de código más grande o más complejo en otro lugar, completo con comentarios, errores de formato y de ortografía, le resultará difícil convencer a alguien de que lo escribió de forma independiente, más aún si puede demostrarse que conocía el original. fuente (que, dado el hecho de que la ha publicado aquí, debería ser bastante trivial).

    
respondido por el tdammers 13.05.2012 - 00:06
1

Solo escríbelo usted mismo en 30 segundos. Puedes usar exactamente el mismo algoritmo. Simplemente no copie / pegue.

Los derechos de autor solo protegen la expresión de una idea, no la idea en sí. Puede utilizar la idea directamente siempre que no la copie.

FWIW, dudo que copiar un pedazo de código tan trivial te traiga problemas de todos modos. Los daños serían cero, y probablemente caerían bajo uso justo en la mayoría de las jurisdicciones. Pero los casos legales son un dolor tan grande que no me gustaría arriesgarme.

    
respondido por el mikera 18.05.2012 - 03:01
1

Como su código GPL, la gran pregunta aquí es si está planeando distribuir su código o vender su software.

Si solo lo está utilizando internamente, la GPL le da total libertad para hacer lo que desee.

Si planea distribuir su paquete, lo más fácil es GPL su paquete en los mismos términos que cualquier fuente de GPL que utilizó. Hay otras formas pero se complica.

Si planea vender su software, debe distribuir el código fuente de cualquier código GPL que haya utilizado y / o modificado bajo la misma licencia GPL con la que lo obtuvo.

    
respondido por el James Anderson 18.05.2012 - 04:06
0

Si el código es realmente trivial como el ejemplo "min", existe una probabilidad muy alta de que alguien más haya implementado la misma funcionalidad bajo una licencia de código abierto diferente.

Dependiendo de la licencia, es muy posible que se le permita incluir el código en su solicitud de código cerrado.

    
respondido por el Niels Basjes 17.05.2012 - 20:45
0

Si estás usando C ++ y no C, evita este problema usando la biblioteca estándar std::min o std::max en <algorithm> :

enlace

Eso le compra generalidad y funcionará para cualquier tipo comparable. Además: cuando cualquier cosa que d-bag intente reclamar, la inventaron y está cubierta por patentes de software, estarán con el comité de ISO ... no con usted.

En el caso general, tome nota de quién publicó el código. Corporación, o individuo sano? Si es un individuo sano (como es el caso con mucha fuente abierta), escríbale una nota agradable y obtenga el permiso. Guarda su respuesta diciendo que está bien. Problema resuelto.

    
respondido por el HostileFork 18.05.2012 - 02:34
-2

Para el caso general: código más complejo que es definitivamente capaz de derechos de autor, en lugar de mínimo y máximo (que puede o no puede ser protegido por derechos de autor).

Luego, obtenga la licencia de su código de acuerdo con la biblioteca, es decir, ¡GPL! Sin embargo, tenga en cuenta que hay bibliotecas LGPL (y GPL con excepciones) que le permiten usar sus implementaciones mientras le da a su código la licencia que desee.

    
respondido por el ctrl-alt-delor 14.05.2012 - 14:53

Lea otras preguntas en las etiquetas