No projeto, encontrei um arquivo math.c
, com um grande cabeçalho 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, legal, então eu preciso obter um valor mínimo e ... esse arquivo !? Então, eu preciso abrir todo o projeto por causa disso? Ou preciso reinventar a matemática?
Não acredito que seja apenas insano, então a questão é: quando podemos remover o cabeçalho da GPL?
Devo ser um esquisito e fazê-lo ?
unsigned int min( unsigned int
JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE,
unsigned int hyrthrtRERG ) { if
(JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE
< hyrthrtRERG ) { return JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE; }
else {return hyrthrtRERG ; } }
Sério, eles querem que eu escreva um código como o descrito acima?
the jury did find that one nine-line function that Google acknowledged copying was infringing
(da ArsTechnica ).min
não é coberta por direitos autorais. Veja minha resposta para detalhes.Respostas:
Ao contrário de muitos usuários aqui, eu simplesmente sugeriria: Copie!
Verifique se a formatação do código se encaixa no seu padrão de codificação e também você provavelmente deve remover ou reescrever o comentário. Ninguém nunca saberá que você o copiou - quando um pedaço de código é simples assim, você pode tê-lo escrito do zero. Se, de alguma forma, seu padrão de codificação exigir que a função tenha a aparência exata do snippet, assim será - desde que pareça se você a tivesse escrito do zero.
Pense bem, essa não é (!) A primeira vez que esta peça exata foi escrita - quando algo é trivial, há poucas razões para não copiá-la, se você não quiser escrever.
Mesmo tendo essa discussão me parece um pouco supérfluo - precisamos ser pragmáticos se quisermos realizar um trabalho real!
fonte
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?
Sim, se foi um acidente. "Que diferença faria então se ele tivesse copiado?" Os bits têm cor . ansuz.sooke.bc.ca/entry/23 Isso não é algo que a maioria dos cientistas da computação possa entender - é realmente um tópico complexo, mas é algo que é reconhecido por lei. Se você está em dúvida sobre se algo é legal ou não, é melhor conversar com um advogado .Não responde diretamente à sua pergunta, mas tente o seguinte:
Por meio deste, liberei essa macro gloriosa e complexa para o domínio público. Embora eu possa ter que publicar um artigo sobre essa técnica.
Se você é macro-fóbico, tente esta versão em linha (na verdade, a menos que esteja codificando em um SPARC, você economizará muitos ciclos de CPU ao não envolver uma função tão onipresente quanto
min
no código de entrada / saída):A questão do licenciamento de código para trechos triviais é realmente um incômodo. Verifique com um advogado, mas estou tentado a supor que eles realmente não podem ser licenciados e / ou que o licenciamento não pode ser aplicado na prática. Assim como você não pode criar direitos autorais ou marca comercial da palavra "palavra", incline-se sobre as pessoas que a usam. (oops)
fonte
min(a++,b++)
.min
.Disclaimer : Eu não sou um advogado. Use meus conselhos por sua conta e risco.
Esta implementação não
min
é protegida por direitos autorais , pois existem muito poucas maneiras razoáveis de escrevê-la.No mundo jurídico, isso é conhecido como doutrina da fusão (também conhecida como divisão da ideia-expressão). Diz-se que a ideia (não-protegida por direitos autorais) da função "se fundiu" com a expressão (potencialmente protegida por direitos autorais) . Portanto, o código não está sujeito a direitos autorais - você é livre para usá-lo.
Para estar do lado seguro, não copie literalmente . Use nomes diferentes para variáveis, aplique sua própria formatação, não copie comentários palavra por palavra. A representação literal exata deste código pode estar protegida por direitos autorais.
Lembre-se de que isso não garante que alguém não o processe, mas pelo menos você terá uma forte defesa.
Além disso, lembre-se de que, mesmo que um pedaço de código não esteja protegido por direitos autorais, ele ainda poderá estar coberto por uma patente de software (esse não é o seu caso
min
).fonte
Estou lançando o seguinte código sob a licença BSD . Como essa licença é muito mais permissiva, você não deve ter problemas de direitos autorais se usar minha implementação.
fonte
min
em software de código fechado. Além disso, @Sholy, agora é problema de GordonM se ele o copiou ou não.É uma situação absurda, eu concordo, mas você tem apenas a si mesma para culpar. Se você estiver escrevendo código proprietário, não deve ler os arquivos de origem licenciados pela GPL, ponto final. Remova o math.c do seu sistema de arquivos, mantenha a documentação e sinta-se à vontade para reimplementar qualquer parte da API necessária. Se você não ler o código, não precisará se preocupar se o seu próprio código for semelhante.
Desperdício, você diz? A GPL intencionalmente impede que você se beneficie do código livre sem retribuir ao ecossistema. Se você não puder ou não cumprir seus termos, e não quiser implementar outra biblioteca matemática, sempre poderá comprar uma ou encontrar uma gratuita que venha com uma licença que possa aceitar.
Os programadores da Microsoft não têm permissão para ler código-fonte aberto, para proteger a empresa de problemas legais. Por razões puramente éticas, faça o mesmo com qualquer programa cuja licença não pretenda aderir.
Você não tem o direito de usar isso
math.c
, mas ninguém está tentando dominar o mercado nas implementações domin
. O objetivo da GPL é aumentar a "liberdade" do programador (e a liberdade do usuário final), não restringi-la. A licença GNU, a FSF e o Movimento de Software Livre começaram com Richard Stallman, e Stallman começou a reimplementar do zero cada nova versão do Symbolics lisp que era lançada. A FSF não iria (e não poderia) perseguir alguém por reimplementar uma biblioteca GPL.fonte
Resposta: Somente com permissão explícita do autor.
Esse é um código protegido por direitos autorais. Você não pode copiá-lo sem a permissão do autor.
Você precisará escrever sua própria versão
min
ou copiar uma variantemin
que use uma licença diferente.Lembre-se, com direitos autorais, é o código que está protegido, não o algoritmo. A lei de direitos autorais vem do texto. Mesmo que "math.c" não passasse de comentários e não tivesse código executável, ainda assim estaria protegido por direitos autorais.
fonte
min
, possui uma sequência específica de caracteres que implementamin
.Isto é o que o Google supostamente roubou. Isso parece senso comum para uma matriz.
fonte
De qualquer forma, não usarei esse código, porque o comentário não corresponde ao que o código faz. O comentário fala sobre
integer
, enquanto o código usaunsigned int
. Quem sabe que erros estão ocultos nas profundezas dessa função?Sério, é aqui que "Não reinvente a roda" se torna ridículo e você esqueceu de tomá-la com um grão de sal. Basta escrever sua própria versão do zero, combiná-la com a convenção de nomenclatura e o guia de estilo do seu código (por exemplo
math_min_uint(x, y)
), garantir que funcione (teste de unidade ou o que for) e continuar com a vida e sem problemas de direitos autorais.Com a experiência crescente, esses trechos triviais que você precisa repetidamente estão na sua caixa de ferramentas e você os reescreve sem pensar demais, ou simplesmente os obtém da sua própria biblioteca.
fonte
As pessoas parecem estar esquecendo que a lei de direitos autorais, tanto em espírito quanto em letra, significa que o ato de copiar de fato é proibido - não o ato de expressar o mesmo pensamento, nem mesmo se o resultado for suspeito e similar.
Se você pegar o código da GPL, modificá-lo, usá-lo de maneira contrária à licença sob a qual você o recebeu e alegar que não é um trabalho derivado, você estará infringindo a lei. Mesmo se você usar sua segunda versão - você alterou os nomes de todas as variáveis e alterou a formatação, mas ela ainda é derivada do original.
Se, no entanto, você escrever sua própria versão
min
e, devido à trivialidade da tarefa, o fato de existirem tantas maneiras pelas quais você pode escrever uma coisa sensata, e um pouco de coincidência, sua versão acaba sendo exatamente idêntica para o código da GPL, então você não copiou nada.Se uma das histórias passaria ou não no tribunal é uma questão diferente. Se um exemplo de código maior ou mais complexo aparecer em outro lugar, completo com comentários, formatação e erros de ortografia, será difícil convencer alguém que o escreveu independentemente, mais ainda se for possível mostrar que você conhecia o original source (que, dado o fato de você ter postado aqui, deve ser bastante trivial).
fonte
Se o código é realmente trivial como o exemplo "min", há uma probabilidade muito alta de que outra pessoa já tenha implementado a mesma funcionalidade sob uma licença de código-fonte diferente.
Dependendo da licença, você poderá incluir o código em seu aplicativo de código fechado.
fonte
Apenas escreva você mesmo em 30 segundos. Você pode usar exatamente o mesmo algoritmo. Apenas não copie / cole.
Os direitos autorais protegem apenas a expressão de uma ideia, não a própria ideia. Você pode usar a ideia diretamente, desde que não a copie.
FWIW, duvido que copiar um código tão trivial possa causar problemas. Os danos seriam zero e provavelmente cairiam sob uso justo na maioria das jurisdições. Mas casos legais são tão dolorosos que eu não gostaria de arriscar.
fonte
Como seu código GPL, a grande questão aqui é se você planeja distribuir seu código ou vender seu software.
Se você estiver usando apenas internamente, a GPL lhe dará total liberdade para fazer o que quiser.
Se você está planejando distribuir seu pacote - a coisa mais fácil é GPL seu pacote nos mesmos termos que qualquer fonte GPL usada. Existem outras maneiras, mas fica complicado.
Se você planeja vender seu software, deve distribuir o código-fonte para qualquer código GPL usado e / ou emendado sob a mesma licença GPL pela qual você o obteve.
fonte
Se você estiver usando C ++ e não C, contorne esse problema usando a biblioteca padrão
std::min
oustd::max
em<algorithm>
:http://www.cplusplus.com/reference/algorithm/min/
Isso compra generalidade e funcionará para qualquer tipo comparável. Além disso: quando o d-bag tentar reivindicar que o inventou e está coberto por patentes de software, estará discutindo com o comitê da ISO ... e não com você.
No caso geral, anote quem publicou o código. Corporação ou indivíduo são? Se for um indivíduo sadio (como é o caso de muita fonte aberta), escreva uma nota legal para eles e obtenha permissão. Salve a resposta deles dizendo que está tudo bem. Problema resolvido.
fonte
Para o caso geral: código mais complexo que definitivamente possui direitos autorais, em oposição a min e max (que podem ou não ter direitos autorais).
Licencie seu código de acordo com a biblioteca, ou seja, GPL! Observe, no entanto, que existem bibliotecas LGPL (e GPL com exceções) que permitem usar as implementações deles e fornecer ao seu código a licença que você deseja.
fonte