O que preciso fazer para NÃO roubar o código "Hello World" com uma licença GPL?


42

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?


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

5
Aww vamos lá, sério, min?
Mircea Chirea

33
Eu diria que a própria existência desta questão prova uma coisa ruim - O trabalho de um programador tornou-se menos programação, a desordem maior segurança jurídica e burocracia
K.Steff

4
Copie-o . Uma função trivial como minnão é coberta por direitos autorais. Veja minha resposta para detalhes.
Tony the Pony

6
@Loki, você está perdendo por uma milha. Os algoritmos são cobertos por patentes, não por direitos autorais. Os direitos autorais expiram 70 anos após a morte do autor, portanto, os trabalhos com direitos autorais nos anos 60 ainda são bastante recentes. Finalmente, a pergunta é sobre copiar ESTE código, não sobre o algoritmo.
Alexis

Respostas:


53

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!


5
a verdadeira questão é onde está a barreira entre trivial e não trivial e existe uma maneira de ter certeza absoluta de que as pessoas não apontarão meu código com algo parecido "OLHE É MINHA GPL MIN REALIZATION!" ... Eu realmente tenho medo dessas pessoas> _ <
cnd

20
Bem, existe o conceito de limiar de originalidade nos direitos autorais. E um método tão simples dificilmente deve ser protegido por direitos autorais. IANAL, no entanto, e as jurisdições variam. Ainda assim, algo que todo graduado em CS escreveu pelo menos cinco vezes exatamente da mesma maneira pode muito bem se encaixar nisso.
Joey

4
@nu: 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 .
Mark Byers

4
@alexis: Eu entendo o seu ponto de vista, mas eu realmente não concordo - se o código resultante for idêntico, ninguém além do programador poderá saber se foi copiado ou gravado do zero. Obviamente, um deve ter poucos problemas para implementar min e provavelmente levaria menos tempo do que encontrar outra implementação. No entanto, se um programador realmente copiá-lo e ninguém mais sabe que ele não escreveu a função, que danos foram causados? A menos que o programador esteja sentindo algum tipo de "culpa", a resposta é nenhuma. O resto é simplesmente semântica.
Nilu 13/05/12

5
@ MarkByers: Quando digo 'não posso provar', quero dizer que nenhuma evidência física existe para mostrar que um crime foi cometido - o crime que foi cometido está completamente confinado à mente do programador. Obviamente, isso não pode ser o caso se alguns doces forem roubados - isso tem um impacto físico no mundo (pirulito - = 1). Se o "crime" está confinado à sua própria mente, quem deve julgar se é moral ou imoral?
Nilu 13/05/12

18

Não responde diretamente à sua pergunta, mas tente o seguinte:

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

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 minno código de entrada / saída):

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

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)


1
Ah, eles certamente podem ter direitos autorais sobre esse código, mas, dada a simplicidade do algoritmo, seria difícil provar em tribunal que você o copiou, a menos que fizesse algo estúpido como comentários deixados intactos etc. A regra não é que você possa Não use o mesmo código, a regra é que você só poderá fazê-lo se o tiver escrito usando o seu próprio cérebro e não tiver copiado o original de nenhuma maneira.
Gort the Robot

2
@StevenBurnap É claro que o código original também teria os mesmos problemas: eles podem provar que têm direitos autorais (ou seja, que não o copiaram de alguma implementação anterior)?
1016 Richard

19
Problema com a versão macro do min vem quando você tenta fazer min(a++,b++).

4
"libere isso ... para o domínio público" é muito centrado nos EUA. Não significa o mesmo em muitos países e, de fato, em alguns não é legalmente possível.

9
Obrigado, mas em um compilador dos anos 2000, um compilador pode incorporar trivialidades como min.
DeadMG

18

Disclaimer : Eu não sou um advogado. Use meus conselhos por sua conta e risco.

Esta implementação nãomin é 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).


2
Você tenta contar isso para a Oracle!
GordonM 12/12/12

1
Talvez essa função de 9 linhas não seja trivial ... Eu gostaria de ver o código.
Tony the Pony

1
programmers.stackexchange.com/a/148362/28718 me parece bastante trivial, supondo que esse seja o código correto.
GordonM 12/12/12

12

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.

unsigned int min(unsigned int a, unsigned int b)
{
    return (a > b? b: a);
}

Como posso ter certeza de que você não selou o código GPL e o reescreveu? : P (apenas brincando)
fev

1
Você não é. Mas se você usou meu código, pode afirmar que o usou de boa fé.
GordonM 12/12/12

3
Alegrai-vos, irmãos, com o surgimento da nova era - agora podemos encontrar minem software de código fechado. Além disso, @Sholy, agora é problema de GordonM se ele o copiou ou não.
31512 K.Steff

5
Você também está lançando-o em "Creative Commons". Consulte o final desta página sobre o código colado aqui.
Martin Iorque


11

É 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 do min. 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.


Então, é um exemplo realmente estranho. É um exemplo, isso significa que devo ler e segui-lo ... mas até onde eu entendi, sou livre para não escolher a licença GPL aqui. Então eu sei quem é Stallman;)
fev

2
Sholy, desculpe, mas não tenho ideia do que você está dizendo! Que exemplo? (Você também está me perguntando quem Stallman é Google-lo ou apenas verificar wikipedia?..)
alexis

3
"Os programadores da Microsoft não têm permissão para ler código-fonte aberto" oh meu, isso é horrível - existe algum lugar onde eu possa ler sobre isso? O Google não está ajudando.
Amara

Boa pergunta. Eu li sobre isso em algum fórum de desenvolvimento do Iron Python, mas infelizmente não consigo encontrá-lo agora. Resumo: Jim Hugunin ( hugunin.net/microsoft_farewell.html ) mencionou que eles não têm permissão para olhar para a implementação do python e alguém perguntou, brincando, se eles podem olhar para o seu próprio código (a Microsoft criou o Iron Python de código aberto) . A resposta é: Eles fizeram uma exceção especial para o Iron Python.
Alexis

As pessoas cuja liberdade a GPL pretende aumentar são todos os usuários do programa, não (especificamente) programadores.
James Youngman

7

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 minou copiar uma variante minque 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.


1
O que significa própria versão? MINHA PRÓPRIA versão do MIN, parece hilária!
cnd

2
Lembre-se, você não possui min, possui uma sequência específica de caracteres que implementa min.
Gort the Robot

2
Você não pode alterá-lo de forma alguma sem a permissão do autor, exceto para uso pessoal. Você tem que reescrevê-lo do zero. Esse é o ponto. Observe que se você se sentasse em um editor em branco e escrevesse algo quase idêntico a isso, tudo ficaria bem, porque você não copiou. (Supondo que você não estava digitando a partir da memória.)
Gort o robô

2
Não, eu não estou brincando. E sim, você provavelmente pode se safar em casos como este. Cabe ao detentor dos direitos autorais provar que você fez isso. Note que estou apenas dizendo a você o que é a lei, não a defendendo.
Gort the Robot

3
Porque se você não recodificar essas coisas triviais, está usando o trabalho de outra pessoa de uma maneira que ela não lhe deu permissão para fazer. Se é tão trivial que você não precisa, não use.
Alexis

6

Isto é o que o Google supostamente roubou. Isso parece senso comum para uma 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     }

Se isso for tudo, o veredicto será lançado em apelação. Mas, de acordo com a Wired, o juiz também descobriu que o Google copiou outros 8 arquivos. Consulte wired.com/wiredenterprise/2012/05/google-oracle-decompile
Tony the Pony

5
Sim, mas o "senso comum" não é o padrão para direitos autorais. É se eles copiaram e editaram ou se escreveram do zero. Se algo é "bom senso" é o teste de patentes, não de direitos autorais. Em outras palavras, a Oracle pode copyright desse texto, mas não pode patentear esse algoritmo.
Gort the Robot

Essas 9 linhas são um exemplo clássico da doutrina da fusão. Quantas outras maneiras existem para executar uma verificação de intervalo em uma matriz?
Tony the Pony

1
@TonythePony, lotes, se a função gerar uma exceção contendo uma mensagem de texto.
Avakar

4
Poucas pessoas mencionaram que a pessoa que copiou este texto no Google também foi a pessoa que o escreveu na Sun. Os programadores precisam perceber que Stallman - o extremista maluco e barbudo - estava certo . O dinheiro, raiz de todo mal, faz as pessoas esquecerem por que participam da tecnologia em primeiro lugar. : - /
HostileFork

5

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 usa unsigned 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.


2

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 mine, 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).


1

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.


1

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.


1

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.


0

Se você estiver usando C ++ e não C, contorne esse problema usando a biblioteca padrão std::minou std::maxem <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.


-2

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.