Que dois-je faire pour NE PAS voler le code «Hello World» avec une licence GPL?


42

Dans le projet, j'ai trouvé un fichier math.c, avec un gros en-tête GPL et ...

//------------------------------------------------------------------------------
/// 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, cool donc j'ai besoin d'obtenir la valeur minimale et ... ce fichier !? J'ai donc besoin d'ouvrir l'ensemble du projet à cause de cela? Ou dois-je réinventer les mathématiques?

Je ne crois pas que ce soit juste insensé, alors la question qui se pose est la suivante: quand pouvons-nous simplement supprimer l'en-tête GPL?

Dois- je être un cinglé et le faire ?

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

Sérieusement, veulent-ils que j'écrive du code comme ci-dessus?


22
Eh bien, dans le cas récent de Google vs Oracle the jury did find that one nine-line function that Google acknowledged copying was infringing(de ArsTechnica ).
Zenon

5
Aww allez, sérieusement, min?
Mircea Chirea

33
Je dirais que l'existence même de cette question est une mauvaise chose - Le travail d'un programmeur est devenu moins de programmation, plus d'encombrement juridique et de bureaucratie
K.Steff

4
Copiez le . Une fonction triviale comme minn'est pas couverte par le droit d'auteur. Voir ma réponse pour plus de détails.
Tony le poney

6
@Loki, tu le manques d'un kilomètre et demi. Les algorithmes sont protégés par des brevets et non par le droit d'auteur. Le droit d'auteur expire 70 ans après le décès de l'auteur. Les œuvres protégées dans les années 60 sont donc encore fraîches. Enfin, la question concerne la copie de CE code, pas l’algorithme.
alexis

Réponses:


53

Contrairement à beaucoup d'utilisateurs ici, je suggérerais simplement: copiez-le!

Assurez-vous que le formatage du code correspond à votre norme de codage et que vous devriez probablement supprimer ou réécrire le commentaire. Personne ne saura jamais que vous l'avez copié - lorsqu'un morceau de code est aussi simple, vous pourriez aussi bien l'avoir écrit à partir de zéro. Si votre norme de codage exige en quelque sorte que la fonction soit exactement comme dans l'extrait de code, qu'il en soit ainsi - du moment qu'elle ressemble à ce qu'elle aurait été si vous l'aviez écrite à partir de zéro.

Pensez-y, c’est à peine (!) La première fois que cette pièce exacte est écrite - quand quelque chose est aussi trivial, il ya peu de raisons de ne pas la copier, si vous n’avez pas l’impression de l’écrire vous-même.

Même avoir cette discussion me semble un peu superflu - nous devons faire preuve de pragmatisme si nous voulons faire un vrai travail!


5
La vraie question est de savoir où se situe la barrière entre trivial et non-trivial, et y at-il un moyen d’être absolument sûr que les gens ne pointeront pas mon code avec quelque chose de semblable _ <
cnd

20
Eh bien, il y a la notion de seuil d'originalité dans le droit d'auteur. Et une méthode aussi simple devrait difficilement être protégée par un droit d'auteur. IANAL, cependant, et les juridictions varient. Néanmoins, quelque chose que tous les étudiants de premier cycle du CS ont écrit au moins cinq fois exactement de la même manière pourrait très bien tomber dans cette catégorie.
Joey

4
@ nilu: 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?Oui, si c'était un accident. "Quelle différence cela ferait-il s'il venait juste de le copier?" Les bits ont de la couleur . ansuz.sooke.bc.ca/entry/23 Ce n'est pas quelque chose que la plupart des informaticiens peuvent comprendre. C'est en effet un sujet complexe, mais c'est quelque chose qui est reconnu par la loi. Si vous avez des doutes sur la légalité de quelque chose, vous avez tout intérêt à parler à un avocat .
Mark Byers

4
@ alexis: Je comprends votre point de vue, mais je ne suis pas vraiment d'accord. Si le code obtenu est identique, seul le programmeur peut savoir s'il a été copié ou écrit à partir de rien. Évidemment, on devrait avoir peu de difficulté à implémenter min et cela prendrait probablement moins de temps que de trouver une autre implémentation. Cependant, si un programmeur la copie effectivement et que personne d'autre ne sait qu'il n'a pas écrit la fonction lui-même, quels dommages ont été causés? Sauf si le programmeur ressent une sorte de "culpabilité", la réponse est non. Le reste est simplement sémantique.
Nilu

5
@MarkByers: Quand je dis "ne peut pas prouver", je veux dire qu'il n'existe aucune preuve matérielle qu'un crime a même été commis - le crime commis est complètement confiné à l'esprit du programmeur. Évidemment, cela ne peut pas être le cas si des bonbons sont volés - cela a un impact physique sur le monde (sucette - = 1). Si le «crime» est confiné à votre propre esprit, à qui appartient-il de décider s'il est moral ou immoral?
Nilu

18

Cela ne répond pas directement à votre question, mais essayez ceci:

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

Par la présente, je publie cette glorieuse macro complexe sur le domaine public. Bien que je puisse avoir à publier un article sur cette technique.

Si vous êtes macro-phobique, essayez cette version en ligne (en réalité, sauf si vous codez sur un SPARC, vous économiserez beaucoup de cycles de processeur en évitant de placer une fonction aussi omniprésente que mindans le code entrée / sortie):

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

La question des licences de code pour les extraits de code triviaux est un peu gênant, vraiment. Renseignez-vous auprès d'un avocat, mais je suis tenté de supposer qu'ils ne peuvent pas vraiment être agréés et / ou que l'autorisation ne peut pas être appliquée dans la pratique. De la même manière que vous ne pouvez pas utiliser le mot «mot» dans les droits d'auteur ou la marque, appuyez-vous ensuite sur ceux qui l'utilisent. (Oops)


1
Oh, ils peuvent certainement protéger ce code, mais étant donné la simplicité de l'algorithme, ils auraient beaucoup de mal à prouver devant les tribunaux que vous l'avez copié à moins que vous ne fassiez quelque chose de stupide, comme de laisser des commentaires intacts, etc. N'utilisez pas le même code, la règle est que vous ne pouvez le faire que si vous l'avez écrit en utilisant votre propre cerveau et que vous n'avez pas copié l'original de quelque manière que ce soit.
Gort le robot

2
@StevenBurnap Bien sûr, le code original aurait aussi les mêmes problèmes: peuvent-ils prouver qu'ils ont le droit d'auteur (c'est-à-dire qu'ils ne l'ont pas copié depuis une implémentation antérieure)?
Richard

19
Le problème avec la version macro de min survient lorsque vous essayez de le faire min(a++,b++).

4
"libérer ceci ... dans le domaine public" est très centré sur les États-Unis. Cela ne veut pas dire la même chose dans beaucoup de pays et dans certains n'est pas légalement possible.

9
Merci, mais sur un compilateur des années 2000, un compilateur peut intégrer des trivialités telles que min.
DeadMG

18

Disclaimer : Je ne suis pas avocat. Utilisez mes conseils à vos risques et périls.

Cette mise en œuvre de minn'est pas protégée par un droit d'auteur , car il n'y a que très peu de manières raisonnables de l'écrire.

Dans le monde juridique, cela s'appelle la doctrine de la fusion (également connue sous le nom de division de l'idée-expression). L' idée (non copyrightable) de la fonction est dite avoir "fusionné" avec l' expression (potentiellement copyrightable) . Par conséquent, le code n'est pas soumis au droit d'auteur - vous êtes libre de l'utiliser.

Pour être sûr, ne le copiez pas textuellement . Utilisez des noms différents pour les variables, appliquez votre propre formatage, ne copiez pas les commentaires mot à mot. La représentation littérale exacte de ce code peut être couverte par le droit d'auteur.

Gardez à l'esprit que cela ne garantit pas que quelqu'un ne vous poursuivra pas en justice, mais au moins, vous aurez une défense solide.

De plus, n'oubliez pas que même si un morceau de code n'est pas protégé par le droit d'auteur, il est possible qu'il soit protégé par un brevet de logiciel (ce n'est pas le cas pour votre minfonction).


2
Vous essayez de dire ça à Oracle!
GordonM

1
Peut-être que cette fonction à 9 lignes n'était pas anodine ... J'aimerais voir le code.
Tony le poney

1
programmers.stackexchange.com/a/148362/28718 me semble plutôt trivial, à supposer que ce soit le bon code.
GordonM

12

Je publie le code suivant sous la licence BSD . Comme cette licence est beaucoup plus permissive, vous ne devriez pas vous heurter à des problèmes de copyright si vous utilisez mon implémentation.

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

Comment puis-je être sûr que vous n'avez pas scellé ce code GPL et que vous ne l'avez pas réécrit? : P (plaisantant)
cnd

1
Tu n'es pas. Mais si vous avez utilisé mon code, vous pouvez affirmer que vous l'avez utilisé de bonne foi.
GordonM

3
Réjouis-toi, frères, à l'aube du nouvel âge - nous pouvons maintenant le trouver mindans un logiciel à code source fermé. De plus, @Sholy, le problème est maintenant de savoir s'il l'a copié ou non.
K.Steff

5
Vous le publiez également sous "Creative commons". Reportez-vous au bas de cette page pour connaître le code collé ici.
Martin York


11

C'est une situation absurde, j'en conviens, mais vous ne pouvez vous en prendre qu'à vous-même. Si vous écrivez du code propriétaire, vous ne devriez pas lire les fichiers source sous licence GPL, point à la ligne. Supprimez math.c de votre système de fichiers, conservez la documentation et n'hésitez pas à réimplémenter toute partie de l'API dont vous avez besoin. Si vous ne lisez pas le code, vous n'avez pas à vous inquiéter si votre propre code s'avère similaire.

Inutile, vous dites? La GPL vous empêche intentionnellement de tirer parti du code libre sans redonner à l'écosystème. Si vous ne pouvez pas ou ne voulez pas respecter ses conditions et si vous ne souhaitez pas implémenter une autre bibliothèque de mathématiques, vous pouvez toujours en acheter une ou en trouver une gratuite dotée d'une licence que vous pouvez accepter.

Les programmeurs de Microsoft ne sont pas autorisés à lire du code source ouvert, afin de protéger la société contre les problèmes juridiques. Pour des raisons purement éthiques, vous devriez faire de même avec tout programme dont vous ne souhaitez pas obtenir la licence.

Vous n'avez pas le droit de l'utiliser math.c, mais personne n'essaie de bloquer le marché pour des implémentations de min. L'objectif de la GPL est d'augmenter la "liberté" du programmeur (et la liberté de l'utilisateur final), et non de la restreindre. La licence GNU, la FSF et le mouvement du logiciel libre ont commencé avec Richard Stallman, et Stallman a commencé par réimplémenter chaque nouvelle version de Symbolics lisp dès sa sortie. La FSF ne voulait (et ne pouvait pas) poursuivre personne pour avoir ré-implémenté une bibliothèque GPL.


Donc, mais c'est un exemple vraiment étrange. C'est un exemple, cela signifie que je dois le lire et le suivre ... mais si je comprends bien, je suis libre de ne pas choisir la licence GPL ici. Donc , je sais qui est Stallman;)
cnd

2
Sholy, désolé mais je n'ai aucune idée de ce que tu dis! Quel exemple? (Vous me demandez aussi qui est Stallman? Trouvez-le sur Google. Ou consultez simplement wikipedia.)
alexis

3
"Les programmeurs de Microsoft ne sont pas autorisés à lire du code source ouvert" oh mon dieu, c'est horrible - y a-t-il des endroits où je peux lire à ce sujet? Google n'aide pas.
Amara

Bonne question. J'ai lu à ce sujet dans certains forums de développement Iron Python, mais malheureusement, je ne le trouve pas maintenant. Résumé: Jim Hugunin ( hugunin.net/microsoft_farewell.html ) a indiqué qu’ils ne sont pas autorisés à examiner l’implémentation de Python et que quelqu'un lui a demandé en plaisantant s’ils étaient autorisés à consulter leur propre code (Microsoft avait créé Open Python Open Source). . La réponse est: ils ont fait une exception spéciale pour Iron Python.
alexis

Les personnes dont la liberté d'utilisation de la GPL est censée augmenter sont tous les utilisateurs du programme, et non (spécifiquement) les programmeurs.
James Youngman

7

Réponse: Seulement avec la permission explicite de l'auteur.

C'est un code sous copyright. Vous ne pouvez pas le copier sans la permission de l'auteur.

Vous devrez écrire votre propre version de min, ou copier une variante de mincelle -ci qui utilise une licence différente.

Rappelez-vous, avec les droits d'auteur, c'est le code qui est protégé, pas l'algorithme. La loi sur le droit d'auteur vient du texte. Même si "math.c" n'était rien que des commentaires et n'avait aucun code exécutable, il serait toujours protégé par le droit d'auteur.


1
Que signifie propre version? Ma propre version de MIN, ça sonne hilarant!
cnd

2
Rappelez-vous que vous ne possédez pas min, vous possédez une séquence particulière de caractères à implémenter min.
Gort le robot

2
Vous ne pouvez pas le changer du tout sans la permission de l'auteur, sauf pour un usage personnel. Vous devez le réécrire à partir de zéro. Exactement. Notez que si vous vous asseyez devant un éditeur vierge et écrivez quelque chose de presque identique à celui-ci, tout ira bien, car vous ne l'avez pas copié. (En supposant que vous ne tapiez pas de mémoire.)
Gort the Robot

2
Non, je ne plaisante pas. Et oui, vous pouvez probablement vous en tirer dans des cas comme celui-ci. Ce serait au détenteur du droit d'auteur de prouver que vous l'avez fait. Notez que je vous dis simplement quelle est la loi et non de la défendre.
Gort le robot

3
Parce que si vous ne recodez pas ces choses triviales, vous utilisez le travail de quelqu'un d'autre d'une manière qui ne vous a pas été autorisée à le faire. Si c'est si trivial que vous n'en avez pas besoin, ne l'utilisez pas.
alexis

6

C'est ce que Google aurait soi-disant arraché. Cela semble être du bon sens pour un tableau.

 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     }

Si c'est tout, le verdict sera jeté en appel. Mais selon Wired, le juge a également trouvé que Google avait copié 8 autres fichiers. Voir wired.com/wiredenterprise/2012/05/google-oracle-decompile
Tony le poney

5
Oui, mais le "bon sens" n'est pas un obstacle au droit d'auteur. C'est qu'ils copient et édite ou qu'ils écrivent eux-mêmes. La question de savoir si quelque chose relève du «bon sens» est le critère applicable aux brevets, pas les droits d’auteur. En d'autres termes, Oracle peut protéger ce texte par copyright, mais ils ne peuvent pas breveter cet algorithme.
Gort le robot

Ces 9 lignes sont un exemple classique de la doctrine de la fusion. Combien d'autres moyens existe-t-il d'effectuer une vérification de plage sur un tableau?
Tony le poney

1
@TonythePony, beaucoup, si la fonction lève une exception contenant un message textuel.
avril

4
Peu de gens ont mentionné que la personne qui a copié ce texte sur Google est également celle qui l'a écrit sur Sun. Les programmeurs doivent comprendre que Stallman - l’extrémiste fou barbu - avait raison . L'argent, racine de tous les maux, fait oublier aux gens pourquoi ils participent à la technologie. : - /
HostileFork

5

De toute façon, je n'utiliserai pas ce code, car le commentaire ne correspond pas à son comportement. Le commentaire parle de integer, alors que le code utilise unsigned int. Qui sait quelles erreurs sont enfouies dans les profondeurs de cette fonction?

Sérieusement, c’est là que "Ne réinventez pas la roue" devient ridicule et que vous avez oublié de la prendre avec un grain de sel. Écrivez simplement votre propre version à partir de zéro, associez-la à la convention de nommage et au guide de style de votre code (par exemple math_min_uint(x, y)), assurez-vous que cela fonctionne (test unitaire ou autre) et poursuivez votre vie sans problème de droit d'auteur.

Avec l'expérience croissante, ces extraits triviaux dont vous avez besoin encore et encore ne sont que dans votre boîte à outils et vous les réécrivez sans trop réfléchir, ou simplement les récupérez de votre propre bibliothèque.


2

Les gens semblent oublier que la loi sur le droit d'auteur, tant dans l'esprit que dans la lettre, signifie que l'acte de copier est interdit - pas l'acte d'exprimer soi-même la même pensée, même si le résultat s'avère étrangement similaire.

Si vous prenez le code sous GPL, modifiez-le, utilisez-le d'une manière qui va à l'encontre de la licence sous laquelle vous l'avez reçu, et prétendez qu'il ne s'agit pas d'un travail dérivé, vous enfreignez la loi. Même si vous utilisez votre deuxième version, vous avez modifié le nom de toutes les variables et modifié le formatage, mais il est toujours dérivé de l'original.

Si, toutefois, vous écrivez votre propre version de min, et en raison de la trivialité de la tâche, du fait qu'il n'y a que de nombreuses façons d'écrire une telle chose, et qu'un peu de coïncidence, votre version finit par être exactement identique. au code GPL, alors vous n'avez rien copié.

Que ce soit ou non une histoire va passer devant le tribunal est une question différente cependant. Si un échantillon de code plus volumineux ou plus complexe apparaît avec des commentaires, une mise en forme et des fautes d'orthographe, vous aurez du mal à convaincre quiconque que vous l'avez écrit indépendamment, plus encore s'il est possible de démontrer que vous connaissiez l'original. source (qui, vu le fait que vous l’avez posté ici, devrait être assez trivial).


1

Si le code est vraiment trivial comme exemple "min", il est fort probable que quelqu'un d'autre ait déjà implémenté la même fonctionnalité sous une licence open source différente.

Selon la licence, vous pouvez être autorisé à inclure le code dans votre application source fermée.


1

Écris-le toi-même en 30 secondes. Vous pouvez utiliser exactement le même algorithme. Juste ne pas copier / coller.

Le droit d'auteur ne protège que l'expression d'une idée, pas l'idée elle-même. Vous pouvez utiliser l'idée directement à condition de ne pas la copier.

FWIW, je doute que copier un élément de code aussi trivial vous cause de gros problèmes. Les dommages seraient nuls et ils tomberaient probablement sous une utilisation équitable dans la plupart des juridictions. Mais les affaires judiciaires sont tellement pénibles que je ne voudrais pas risquer cela.


1

En tant que code GPL, la grande question est de savoir si vous envisagez de distribuer votre code ou de vendre votre logiciel.

Si vous ne l'utilisez qu'en interne, la GPL vous laisse toute la liberté de faire ce que vous voulez.

Si vous envisagez de distribuer votre package, le plus simple est de le gérer selon les mêmes conditions que toute source GPL que vous avez utilisée. Il y a d'autres moyens mais cela se complique.

Si vous envisagez de vendre votre logiciel, vous devez distribuer le code source de tout code GPL que vous avez utilisé et / ou modifié sous la même licence GPL sous laquelle vous l'avez obtenu.


0

Si vous utilisez C ++ et non C, résolvez ce problème en utilisant la bibliothèque standard std::minou std::maxdans <algorithm>:

http://www.cplusplus.com/reference/algorithm/min/

Cela vous achète la généralité, et cela fonctionnera pour n'importe quel type comparable. De plus, lorsque d-bag tentera de prétendre l'avoir inventé et qu'il est protégé par des brevets logiciels, ils vont gronder avec le comité de l'ISO ... pas vous.

Dans le cas général, notez qui a publié le code. Corporation, ou individu sain d'esprit? Si c'est un individu sain d'esprit (comme c'est le cas avec beaucoup d'open source), écrivez-leur une bonne note et obtenez l'autorisation. Enregistrez leur réponse en disant que ça va. Problème résolu.


-2

Pour le cas général: Code plus complexe qui est définitivement protégé par le droit d'auteur, par opposition à min et max (qui peut ou non être protégé par le droit d'auteur).

Puis, donnez une licence à votre code conformément à la bibliothèque, c’est-à-dire la GPL! Notez cependant qu'il existe des bibliothèques LGPL (et GPL avec exceptions) qui vous permettent d'utiliser leurs implémentations tout en donnant à votre code la licence que vous souhaitez.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.