O que eu preciso fazer para não roubar o código “Hello World” com uma licença GPL?

41

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 ... este arquivo !? Então eu preciso abrir todo o projeto por causa disso? Ou preciso reinventar a matemática?

Eu não acredito que seja insano, então a questão é: quando podemos apenas remover o cabeçalho 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 acima?

    
por Cynede 12.05.2012 / 06:41
fonte

14 respostas

53

Ao contrário de muitos usuários aqui, eu gostaria de sugerir: Copie!

Certifique-se de que a formatação do código esteja de acordo com seu padrão de codificação e também você provavelmente deve remover ou reescrever o comentário. Ninguém jamais saberá que você o copiou - quando um trecho de código é tão simples, você pode ter escrito do zero. Se o seu padrão de codificação de alguma forma requer que a função pareça exatamente como no snippet, assim seja - desde que pareça como se você tivesse escrito do zero.

Pense nisso, isto é dificilmente (!) na primeira vez que esta peça exata foi escrita - quando algo é trivial, há poucas razões para não copiá-lo, se você não quiser escrevê-lo você mesmo.

Mesmo tendo essa discussão parece um pouco supérfluo para mim - precisamos ser pragmáticos se quisermos que qualquer trabalho real seja feito!

    
por 12.05.2012 / 10:20
fonte
18

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

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

Eu, por meio deste, libero essa macro gloriosa e complexa para o domínio público. Embora eu tenha que publicar um artigo sobre essa técnica.

Se você é macro-fóbico, experimente esta versão embutida (na verdade, a menos que você esteja codificando em um SPARC, você economizará muitos ciclos de CPU não agrupando uma função tão onipresente quanto min em entrar / sair código):

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

A questão do licenciamento de código para trechos triviais é um incômodo, na verdade. Verifique com um advogado, mas estou tentado a assumir que eles não podem realmente ser licenciados e / ou o licenciamento não pode ser aplicado na prática. O mesmo que você não pode direitos autorais ou marca a palavra "palavra", em seguida, apóie-se em pessoas que o usam. (oops)

    
por 12.05.2012 / 06:50
fonte
18

Aviso legal : não sou advogado. Use o meu conselho por sua conta e risco.

Esta implementação de min é não com direitos de autor , uma vez que existem muito poucas formas razoáveis de a escrever.

No mundo jurídico, isso é conhecido como doutrina de fusão (também conhecido como o divisor idéia-expressão). A idéia (sem direitos autorais) da função é considerada "mesclada" com a (potencialmente autorável) expressão . Portanto, o código não está sujeito a direitos autorais - você está livre para usá-lo.

Para garantir, não copie o texto textualmente . 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 desse código pode ser coberta por direitos autorais.

Tenha em mente que isso não garante que alguém não irá processá-lo, mas pelo menos você terá uma defesa strong.

Além disso, lembre-se de que, mesmo que uma parte do código não esteja protegida por direitos autorais, ela ainda pode estar coberta por uma patente de software (esse não é o caso da função min ).

    
por 12.05.2012 / 16:41
fonte
12

Estou lançando o seguinte código sob a licença BSD . Como essa licença é muito mais permissiva, você não deve se deparar com problemas de direitos autorais se usar minha implementação.

unsigned int min(unsigned int a, unsigned int b)
{
    return (a > b? b: a);
}
    
por 12.05.2012 / 10:25
fonte
11

É uma situação absurda, eu concordo, mas você tem apenas a si mesmo para culpar. Se você estiver escrevendo código proprietário, você não deve ler arquivos fonte licenciados sob 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 que você precisar. Se você não ler o código, não precisa se preocupar se o seu próprio código for semelhante.

Desperdício, você diz? A GPL intencionalmente impede você de se beneficiar de código livre sem retornar ao ecossistema. Se você não puder ou não cumprir seus termos e não quiser implementar mais uma biblioteca de matemática, você sempre poderá comprar um ou encontrar um gratuito que venha com uma licença que você possa aceitar.

Os programadores da Microsoft não podem ler código aberto, para proteger a empresa de problemas legais. Por razões puramente éticas, você deve fazer o mesmo com qualquer programa cuja licença não pretenda aderir.

Você não tem o direito de usar este math.c , mas ninguém está tentando conquistar o mercado em implementações de min . O objetivo da GPL é aumentar a liberdade do programador (e a liberdade do usuário final), não restringi-lo. A licença GNU, a FSF e o Movimento Software Livre começaram com Richard Stallman, e Stallman começou a reimplementar a partir do zero cada nova versão do Symbolics surda quando é lançada. A FSF não iria (e não poderia) ir atrás de ninguém para reimplantar uma biblioteca GPL.

    
por 12.05.2012 / 13:39
fonte
7

Resposta: Apenas com permissão explícita do autor.

Esse código é protegido por direitos autorais. Você não pode copiá-lo sem a permissão do autor.

Você terá que escrever sua própria versão de min ou copiar uma variante de min 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 fosse nada além de comentários e não tivesse nenhum código executável, ele ainda seria protegido pelos direitos autorais.

    
por 12.05.2012 / 06:54
fonte
6

Isso é o que o Google supostamente roubou. Isso parece senso comum para um 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     }
    
por 12.05.2012 / 18:41
fonte
5

Eu não usarei esse código de qualquer maneira, 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 quais erros estão enterrados nas profundezas dessa função?

Sério, é aí que "Don't reinvent the wheel" se torna ridículo e você esqueceu de levá-lo com um grão de sal. Basta escrever sua própria versão do zero, combiná-la com a convenção de nomes e o guia de estilo do seu código (por exemplo, math_min_uint(x, y) ), certificar-se de que funciona (teste de unidade ou qualquer outro) e continuar com a vida e sem problemas de direitos autorais. >

Com experiência crescente, esses trechos triviais de que você precisa sempre estão em sua caixa de ferramentas e você os reescreve sem pensar muito ou simplesmente obtém-os da sua própria biblioteca.

    
por 12.05.2012 / 09:54
fonte
2

As pessoas parecem estar esquecendo que a lei de direitos autorais, tanto em espírito quanto em letra, significa que o ato de realmente copiar é proibido - não o ato de expressar o mesmo pensamento, nem mesmo se o resultado for suspeitamente similar. p>

Se você pegar o código GPL, modificá-lo, usá-lo de uma forma que seja contra a licença sob a qual você o recebeu e alegar que não é um trabalho derivado, então você está 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 ainda é derivado do original.

Se, no entanto, você escrever sua própria versão de min , e devido à trivialidade da tarefa, o fato de que existem apenas muitas maneiras de escrever sensivelmente tal coisa, e um pouco de coincidência, seu a versão acaba sendo exatamente idêntica ao código GPL, então você não copiou nada.

Se uma das histórias ou não passaria em um tribunal é um assunto diferente. Se um exemplo de código maior ou mais complexo aparecer em algum outro lugar, completo com comentários, formatação e erros de ortografia, será difícil convencer alguém de que você o escreveu de forma independente, ainda mais se puder ser mostrado que você conhecia o original fonte (que, dado o fato de que você postou aqui, deve ser bastante trivial).

    
por 13.05.2012 / 00:06
fonte
1

Se o código é realmente trivial como o exemplo "min", então há uma probabilidade muito alta de que alguém já tenha implementado a mesma funcionalidade sob uma licença de código aberto diferente.

Dependendo da licença, você poderá incluir o código em seu aplicativo de código fechado.

    
por 17.05.2012 / 20:45
fonte
1

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 ideia em si. Você pode usar a ideia diretamente, desde que não a copie.

FWIW, eu duvido que copiar uma parte tão trivial de código possa causar problemas de qualquer maneira. Os danos seriam zero e provavelmente cairiam sob uso justo na maioria das jurisdições. Mas casos legais são uma dor que eu não gostaria de arriscar.

    
por 18.05.2012 / 03:01
fonte
1

Como seu código GPL, a grande questão aqui é que você planeja distribuir seu código ou vender seu software.

Se você está apenas usando internamente, a GPL lhe dá liberdade total para fazer o que quiser.

Se você está planejando distribuir seu pacote - o mais fácil é GPL seu pacote nos mesmos termos que qualquer fonte GPL que você usou. Existem outras maneiras, mas fica complicado.

Se você está planejando vender seu software, você deve distribuir o código-fonte para qualquer código GPL que você usou e / ou emendou sob a mesma licença GPL pela qual você o obteve.

    
por 18.05.2012 / 04:06
fonte
0

Se você estiver usando C ++ e não C, evite esse problema usando a biblioteca padrão std::min ou std::max in <algorithm> :

link

Isso lhe dá generalidade e funcionará para qualquer tipo comparável. Além disso: quando qualquer d-bag tenta alegar que inventou e está coberto por patentes de software, eles estarão roncando com o comitê ISO ... não você.

No caso geral, anote quem publicou o código. Corporação ou indivíduo sã? Se é um indivíduo são (como é o caso com muito open source), escreva uma nota legal para eles e obtenha permissão. Salve sua resposta dizendo que está tudo bem. Problema resolvido.

    
por 18.05.2012 / 02:34
fonte
-2

Para o caso geral: código mais complexo que definitivamente pode ser protegido por direitos autorais, ao contrário de min e max (que pode ou não ter direitos autorais).

Em seguida, licencie seu código em conformidade com a biblioteca, ou seja, GPL! Note, no entanto, que existem bibliotecas LGPL (e GPL com exceções) que permitem que você use suas implementações, enquanto fornece seu código com qualquer licença que você desejar.

    
por 14.05.2012 / 14:53
fonte

Tags