En el proyecto, encontré un archivo math.c
, con un gran encabezado de GPL 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;
}
}
OK, genial, así que necesito obtener el valor mínimo y ... ¿ este archivo ? ¿Entonces necesito abrir todo el proyecto por eso? ¿O necesito reinventar las matemáticas?
No creo que sea una locura, así que la pregunta es: ¿cuándo podemos eliminar el encabezado de la 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 código como el anterior?
the jury did find that one nine-line function that Google acknowledged copying was infringing
(de ArsTechnica ).min
no está cubierta por derechos de autor. Vea mi respuesta para más detalles.Respuestas:
A diferencia de muchos de los usuarios aquí, simplemente sugeriría: ¡Cópielo!
Asegúrese de que el formato del código se ajuste a su estándar de codificación y que probablemente también debería eliminar o reescribir el comentario. Nadie sabrá que lo ha copiado: cuando un código es así de simple, bien podría haberlo escrito desde cero. Si su estándar de codificación de alguna manera requiere que la función se vea exactamente como se ve en el fragmento, que así sea, siempre y cuando se vea como si la hubiera escrito desde cero.
Piénselo, esta es apenas (!) La primera vez que se escribe esta pieza exacta: cuando algo es tan trivial, hay pocas razones para no copiarlo, si no tiene ganas de escribirlo usted mismo.
Incluso tener esta discusión me parece un poco superfluo: ¡debemos ser pragmáticos si queremos hacer un trabajo real!
fuente
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í, si fue un accidente. "¿Qué diferencia habría si la hubiera copiado?" Los bits tienen color . ansuz.sooke.bc.ca/entry/23 Esto no es algo que la mayoría de los informáticos puedan entender, de hecho es un tema complejo, pero es algo que la ley reconoce. Si tiene dudas sobre si algo es legal o no, es mejor que hable con un abogado .No responde directamente a su pregunta, pero intente esto:
Por la presente, libero esta macro gloriosa y compleja al dominio público. Aunque puede que tenga que publicar un artículo sobre esta técnica.
Si eres macrofó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 ajustar una función tan ubicua como
min
en el código de entrada / salida):El problema de las licencias de código para fragmentos triviales es realmente un poco molesto. Consulte con un abogado, pero tengo la tentación de suponer que en realidad no pueden obtener una licencia y / o que la licencia no se puede hacer cumplir en la práctica. Igual que no puede hacer copyright o marcar la palabra 'palabra', entonces apóyese en las personas que la usan. (Uy)
fuente
min(a++,b++)
.min
.Descargo de responsabilidad : no soy un abogado. Usa mi consejo bajo tu propio riesgo.
Esta implementación de
min
es no derechos de autor , ya que hay muy pocas formas razonables de escribirlo.En el mundo legal, esto se conoce como la doctrina de la fusión (también conocida como la división idea-expresión). Se dice que la idea (no con derechos de autor) de la función se ha "fusionado" con la expresión (potencialmente con derechos de autor) . Por lo tanto, el código no está sujeto a derechos de autor: puede usarlo libremente.
Para estar seguro, no lo copie textualmente . Use diferentes nombres para las variables, aplique su propio formato, no copie comentarios palabra por palabra. La representación literal exacta de este código puede estar cubierta por derechos de autor.
Tenga en cuenta que esto no garantiza que alguien no lo demandará, pero al menos tendrá una defensa sólida.
Además, tenga en cuenta que incluso si un código no está protegido por derechos de autor, aún podría estar cubierto por una patente de software (este no es el caso de su
min
función).fuente
Estoy lanzando el siguiente código bajo la licencia BSD . Como esa licencia es mucho más permisiva, no debería encontrarse con problemas de derechos de autor si usa mi implementación.
fuente
min
en software de código cerrado. Además, @Sholy, ahora es el problema de GordonM si lo ha copiado o no.Es una situación absurda, estoy de acuerdo, pero solo tú tienes la culpa. Si está escribiendo código propietario, no debería leer archivos fuente con licencia GPL, punto. Elimine math.c de su sistema de archivos, conserve la documentación y no dude en volver a implementar cualquier parte de la API que necesite. Si no lee el código, no necesita preocuparse si su propio código resulta similar.
¿Un derroche, dices? La GPL intencionalmente evita que se beneficie del código gratuito sin tener que devolver 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.
Los programadores de Microsoft no pueden leer código fuente abierto para proteger a la empresa de problemas legales. Por razones puramente éticas, debe hacer lo mismo con cualquier programa cuya licencia no quiera cumplir.
No tiene derecho a usar esto
math.c
, pero nadie está tratando de arrinconar el mercado en implementaciones demin
. El objetivo de la GPL es aumentar la "libertad" del programador (y la libertad del usuario final), no restringirla. La licencia GNU, la FSF y el Movimiento de Software Libre comenzaron con Richard Stallman, y Stallman comenzó con la implementación desde cero de cada nueva versión de Symbolics lisp a medida que salía. La FSF no (y no podría) perseguir a nadie para volver a implementar una biblioteca GPL.fuente
Respuesta: Solo con permiso explícito del autor.
Ese es un código con derechos de autor. No puede copiarlo sin el permiso del autor.
Tendrá que escribir su propia versión
min
o copiar una variantemin
que use una licencia diferente.Recuerde, con los derechos de autor, es el código el 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 en absoluto, que sería aún estar protegido por derechos de autor.
fuente
min
, posee una secuencia particular de caracteres que sucede que implementamin
.Esto es lo que Google supuestamente estafó. Esto parece sentido común para una matriz.
fuente
No usaré este código de todos modos, porque el comentario no coincide con lo que hace el código. El comentario habla
integer
, mientras que el código usaunsigned int
. ¿Quién sabe qué errores están enterrados en las profundidades de esta función?En serio, aquí es donde "No reinventar la rueda" se vuelve ridículo y olvidaste tomarlo con un grano de sal. Simplemente escriba su propia versión desde cero, combínela 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 la vida y sin problemas de derechos de autor.Con una experiencia creciente, estos fragmentos triviales que necesita una y otra vez están en su caja de herramientas y los reescribirá sin pensar demasiado, o simplemente los obtendrá de su propia biblioteca.
fuente
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 está prohibido, no el acto de expresar el mismo pensamiento usted mismo, ni siquiera si el resultado resulta sospechosamente similar.
Si toma el código GPL, 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 usa su segunda versión, ha cambiado los nombres de todas las variables y ha alterado el formato, pero aún así 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 hay tantas maneras en que puede escribir con sensatez tal cosa, y un poco de coincidencia, su versión termina siendo exactamente idéntica al código GPL, entonces no has copiado nada.Sin embargo, si alguna de las historias pasaría o no en la corte es un asunto diferente. Si aparece un ejemplo de código más grande o más complejo en otro lugar, completo con comentarios, formato y errores ortográficos, tendrá dificultades para convencer a alguien de que lo escribió de forma independiente, más aún si se puede demostrar que conocía el original fuente (que, dado el hecho de que lo ha publicado aquí, debería ser bastante trivial).
fuente
Si el código es realmente trivial como el ejemplo "min", entonces hay una probabilidad muy alta de que otra persona ya 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.
fuente
Solo escríbelo tú 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 usar la idea directamente siempre que no la copie.
FWIW, dudo que copiar un código tan trivial te metería en problemas de todos modos. Los daños serían cero, y probablemente caería bajo un uso justo en la mayoría de las jurisdicciones. Pero los casos legales son tan dolorosos que no quisiera arriesgarme.
fuente
Como su código GPL, la gran pregunta aquí es si planea distribuir su código o vender su software.
Si solo lo está utilizando internamente, la GPL le brinda 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 haya utilizado. 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 por la que lo obtuvo.
fuente
Si está utilizando C ++ y no C, evite este problema utilizando la biblioteca estándar
std::min
ostd::max
en<algorithm>
:http://www.cplusplus.com/reference/algorithm/min/
Eso le compra generalidad, y funcionará para cualquier tipo comparable. Además: cuando cualquier d-bag intente afirmar que lo inventaron y está cubierto por patentes de software, estarán discutiendo con el comité ISO ... no tú.
En el caso general, tome nota de quién publicó el código. ¿Corporación o individuo sano? Si se trata de una persona sensata (como es el caso con mucho código abierto), escríbeles una nota agradable y obtén permiso. Guarde su respuesta diciendo que está bien. Problema resuelto.
fuente
Para el caso general: Código más complejo que definitivamente tiene derechos de autor, en oposición a min y max (que pueden o no tener derechos de autor).
Luego, licencia tu 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.
fuente