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 une valeur min et ... (( Ce fichier !? J'ai donc besoin d'ouvrir tout le projet à cause de cela? Ou dois-je avoir besoin de réinventer les mathématiques?
Je ne crois pas que ce ne soit juste fou, alors la question est la suivante: lorsque nous pouvons simplement supprimer l'en-tête GPL?
Dois-je être un weirdo 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 je écrive du code comme ce qui précède?
Contrairement à beaucoup de l'utilisateur ici, je suggérerais simplement: copiez-la!
Assurez-vous que la mise en forme 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é - quand un morceau de code est aussi simple, vous pourriez aussi bien l'avoir écrit à partir de zéro. Si votre standard de codage nécessite d'une manière ou d'une autre, la fonction ait l'air exactement comme dans l'extrait, alors soyez-la - aussi longtemps qu'il ressemble si vous l'avez examiné de zéro.
Pensez-y, c'est à peine (!) La première fois que cette pièce exacte a été écrite - quand quelque chose est ce trivial, il y a peu de raisons de ne pas le copier, si vous n'avez pas envie de l'écrire vous-même.
Même avoir cette discussion me semble un peu superflu - nous devons être pragmatiques si nous voulons faire du travail réel!
Cela ne répond pas directement à votre question, mais essayez ceci:
#define min(a,b) ((a) < (b) ? (a) : (b))
Je libère ici cette magnifique macro complexe et complexe au domaine public. Bien que je puisse devoir publier un document sur cette technique.
Si vous êtes macro-phobic, essayez cette version en ligne (vraiment, sauf si vous codez sur un SPARC, vous économiserez de nombreux cycles de CPU en n'envoyant pas une fonction ubiquité que min
en entrée/sortie code):
inline int min(int a, int b)
{
return a < b ? a : b;
}
La question de la licence de code pour les extraits triviaux est un peu une nuisance, vraiment. Vérifiez auprès d'un avocat, mais je suis tenté de supposer qu'ils ne peuvent pas vraiment être autorisés et/ou que la licence ne peut être appliquée dans la pratique. Même chose que vous ne pouvez pas le droit d'auteur ou la marque, le mot "mot", puis appuyer sur les personnes qui l'utilisent. (Oups)
Disclaimer : Je ne suis pas un avocat. Utilisez mes conseils à vos risques et périls.
Cette implémentation de min
est non copyrightable , car il n'y a que très peu de façons raisonnables de l'écrire.
Dans le monde juridique, il est connu sous le nom de Doctrine de la fusion (également appelé l'expression de l'idée, diviser). Le (non copyright) idée de la fonction aurait "fusionné" avec le (potentiellement copyright) expression. Par conséquent, le code n'est pas soumis au copyright - vous êtes libre de l'utiliser.
Pour être du côté sûr, ne le copiez pas Verbatim. Utilisez des noms différents pour les variables, appliquez votre propre formatage, ne copiez pas les commentaires Word pour Word. La représentation littérale exacte de ce code peut être couverte par le droit d'auteur.
N'oubliez pas que cela ne garantit pas que quelqu'un ne vous poursuivra pas, mais au moins vous aurez une défense forte.
En outre, gardez à l'esprit que même si un morceau de code n'est pas protégé par le droit d'auteur, il pourrait toujours être couvert par un brevet logiciel (ce n'est pas le cas pour votre fonction min
).
Je libère le code suivant sous la licence licence BSD . Comme cette licence est beaucoup plus permissive, vous ne devriez pas courir dans des problèmes de droit d'auteur si vous utilisez ma mise en œuvre.
unsigned int min(unsigned int a, unsigned int b)
{
return (a > b? b: a);
}
C'est une situation absurde, je suis d'accord, mais vous n'avez que vous-même à blâmer. Si vous écrivez du code propriétaire, vous ne devez pas lire les fichiers source sous licence GPL. Supprimer Math.c de votre système de fichiers, conservez la documentation et n'hésitez pas à ré-implémenter une partie de l'API dont vous avez besoin. Si vous ne lisez pas le code, vous n'avez pas besoin de vous inquiéter si votre propre code s'avère similaire.
Gaspillé, tu dis? La GPL vous empêche intentionnellement de bénéficier d'un code gratuit sans redonner à l'écosystème. Si vous ne pouvez pas ou ne rencontrerez pas ses termes et que vous ne souhaitez pas implémenter une autre bibliothèque de mathématiques, vous pouvez toujours en acheter un ou trouver un gratuit avec une licence que vous pouvez accepter.
Les programmeurs de Microsoft ne sont pas autorisés à lire le code open source, à protéger la société des problèmes juridiques. Pour des raisons purement éthiques, vous devriez faire la même chose avec n'importe quel programme dont la licence que vous n'avez pas l'intention d'adhérer.
Vous n'avez pas le droit d'utiliser ceci math.c
, mais personne n'essaie de coincer le marché sur les implémentations de min
. L'objectif de la GPL est d'augmenter le programmeur "Freedom" (et la liberté de l'utilisateur final), de ne pas le limiter. Le GNU License, le FSF et le mouvement logiciel libre ont commencé avec Richard Stallman, et Stallman a commencé avec une nouvelle mise en œuvre à partir de chaque nouvelle version de Symbolics Lisp tel qu'il est sorti. Le FSF ne serait pas (et ne pouvait pas) aller après que quiconque ait ré-implémenter une bibliothèque GPL.
Réponse: Seulement avec une autorisation explicite de l'auteur.
C'est le code du droit d'auteur. Vous ne pouvez pas le copier sans autorisation de l'auteur.
Vous devrez écrire votre propre version de min
ou copier une variante de min
qui utilise une licence différente.
N'oubliez pas que le copyright, c'est le code qui est protégé, non l'algorithme. La loi sur le droit d'auteur vient du texte. Même si "MATH.C" n'était que des commentaires et n'avait aucun code exécutable du tout, c'est toujours être protégé sous le droit d'auteur.
C'est ce que Google supposément déchiré. Cela semble être un 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 }
Je n'utiliserai pas ce code de toute façon, car le commentaire ne correspond pas à ce que le code fait. Le commentaire parle de integer
, tandis que le code utilise unsigned int
. Qui sait quelles erreurs sont enterrées dans les profondeurs de cette fonction?
Sérieusement, c'est là que "ne réinventez pas la roue" devient ridicule et vous avez oublié de le prendre avec un grain de sel. Il suffit d'écrire votre propre version à partir de zéro, faites-la correspondre à la convention de nommage et au guide de style de votre code (par exemple, math_min_uint(x, y)
), assurez-vous qu'il fonctionne (test de l'unité ou autre) et continuez avec vie et sans problèmes de droit d'auteur .
Avec une expérience croissante, ces extraits triviaux dont vous avez besoin et encore dans votre boîte à outils et que vous les réécrivez sans réfléchir trop, ou simplement les obtenir de votre propre bibliothèque.
Les gens semblent oublier que la loi sur le droit d'auteur, à l'esprit et à la lettre, signifie que l'acte de copier réellement est interdit - et non l'acte d'exprimer la même pensée vous-même, pas même si le résultat s'avère soupçonné de manière méfiante.
Si vous prenez le code GPL'D, modifiez-le, utilisez-le d'une manière contre la licence sous laquelle vous l'avez reçue et que vous en préoccupez, il n'est pas un travail dérivé, vous enfreignez la loi. Même si vous utilisez votre deuxième version - vous avez modifié les noms 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, le fait qu'il n'y ait que tant de façons que vous pouvez écrire sensiblement une telle chose et un peu de coïncidence, votre La version finit par être exactement identique au code GPLL'D, vous n'avez rien copié.
L'une ou l'autre une histoire réussirait ou non, c'est une question différente. Si un échantillon de code plus grand ou plus complexe apparaît ailleurs, avec des commentaires, des formatage et des erreurs d'orthographe, vous aurez du mal à convaincre quiconque que vous l'avez écrite de manière indépendante, de manière à montrer que vous connaissez l'original Source (qui, étant donné que vous l'avez posté ici, devrait être assez trivial).
Si le code est vraiment trivial comme exemple "min", il existe une très forte probabilité que quelqu'un d'autre ait déjà mis en œuvre la même fonctionnalité sous une autorisation open source différente.
Selon la licence que vous pouvez éventuellement être autorisée à inclure le code dans votre applique à la source fermée.
Il suffit d'écrire vous-même en 30 secondes. Vous pouvez utiliser exactement le même algorithme. Il suffit de 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 que vous ne le copiez pas.
FWIW, je doute que la copie d'un tel morceau de code trivial vous dérangerait de toute façon. Les dommages-intérêts seraient nuls et cela tomberait probablement sous une utilisation juste dans la plupart des juridictions. Mais les cas juridiques sont une telle douleur que je ne voudrais pas risquer.
Comme son code GPL code la grande question ici est que vous planifiez votre code ou vendez votre logiciel.
Si vous l'utilisez simplement en interne, le GPL vous donne une totale liberté de faire comme vous le souhaitez.
Si vous envisagez de vous distribuer votre paquet - la tâche la plus simple consiste à gpl votre colis dans les mêmes conditions que toute source de GPL que vous avez utilisée. Il y a d'autres façons mais il est compliqué.
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 par laquelle vous l'avez obtenue.
Si vous utilisez C++ et non C, éviter ce problème à l'aide de la bibliothèque standard std::min
ou std::max
dans <algorithm>
:
http://www.cplusplus.com/reference/algorithm/min/
Cela achète votre généralité et cela fonctionnera pour tout type comparable. En outre: Quel que soit le sac D-sac tente de réclamer, ils l'ont inventé et sont couvertes par des brevets logiciels, ils vont gronder avec le comité de l'ISO ... Pas vous.
Dans le cas général, prenez note de qui a publié le code. Société 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 la permission. Enregistrez leur réponse disant que ça va. Problème résolu.