2009-04-10 7 views
10

La société pour laquelle je travaille développe un module de noyau de source fermée (fichier .ko). Ce module doit effectuer des appels aux fonctions contenues dans un module gpl2. En fait, nous avons une situation comme celle-ci:Modules de noyau non-GPL utilisant GPL

// GPL 2 kernel module (gpl.c -> gpl.ko) 
void a_function(void) 
{ 
// ... 
} 
EXPORT_SYMBOL(a_function) 


// Closed Source module (closed.c -> closed.ko) 
a_function(); 

Est-ce légal? Violons-nous la licence GPL2 dans cet exemple? Veuillez noter que closed.c n'inclut aucun fichier d'en-tête gpl2.

+0

+1, bonne question. –

+4

Je vote pour clore cette question hors-sujet car il s'agit de licences ou de problèmes juridiques, pas de programmation ou de développement de logiciels. [Voir ici] (http://meta.stackoverflow.com/questions/274963/questions-about-licensing/274964#274964) pour plus de détails, et [aide] pour plus d'informations. – JasonMArcher

Répondre

7

Il y a GPL_ONLY indicateur pour les modules, qui ne doit pas être utilisé dans des modules non-GPL. Donc, si le module dont vous parlez n'est pas GPL_ONLY, vous pouvez l'utiliser.

Mais même ceux qui sont GPL_ONLY peuvent être utilisés si vous y accédez via user-space drivers, which are possible in 2.6.23. C'est exactement ce qui est arrivé au sous-système USB. http://www.linux-magazine.com/online/news/linux_2_6_25_without_closed_source_usb_drivers

Pas exactement d'adressage problème juridique, mais vous donne une idée: http://www.cyberciti.biz/tips/linus-rejects-the-idea-of-non-gpl-kernel-modules.html

+0

Amour souillé :) +1, Bonne réponse. –

4

1er: Vous devez parler à un avocat à ce sujet; probablement le service juridique de votre entreprise. 2ème: La question importante est quel morceau de code est dérivé de quel autre code.

Malheureusement, il y a presque n'importe quel nombre de réponses pour cette question. Certains diraient que tous les modules du noyau sont des travaux dérivés du noyau, ils doivent donc être GPL indépendamment de l'inclusion de l'en-tête.

Alternativement votre module fermé dérive du module GPL, et le module GPL dérive du noyau, ainsi le module fermé doit également être GPL.

+0

Comment est-il possible de charger les modules open source NVIDIA et ATI? Je suppose qu'ils utilisent les modules noyau agp et drm (qui devraient être GPL). Après toute la macro LICENSE vous permet de choisir des licences différentes, même si elles peuvent "corrompre" le noyau – Emiliano

+0

Comme je l'ai dit - c'est une question de désaccord - ATI et NVIDIA croient évidemment que leurs modules ne sont pas dérivés du noyau. Ce qu'ils ne pourraient pas être - ils sont les ports de leur conducteur de Windows après tout. Mais je ne crois pas qu'il y ait de jurisprudence à ce sujet, donc toutes les opinions sont possibles. –

+0

Ah maintenant je comprends votre point de vue. +1 pour ça. – Emiliano

6

IANAL donc vous devriez vraiment demander un avis juridique qualifié. Cependant cette approche va certainement à l'encontre de l'esprit de la licence et ne vous gagnera pas d'amis dans les terres des noyaux.

Cependant, vous pourriez envisager une division différente. Une approche consiste à avoir un module entièrement GPL'ed et mettre toute votre "IP de société secrète" dans un pilote d'espace utilisateur . C'est une approche que j'ai prise lorsque la société pour laquelle j'ai travaillé pour ne tenait pas à exposer les détails de notre FPGA au monde. Toutes les décisions et les paramètres de registre où décidé dans l'espace utilisateur et le côté noyau du pilote vient de charger des valeurs dans IRQ. Avec un design soigné , vous pouvez gérer tous les problèmes en temps réel que vous pourriez avoir et une bonne séparation entre votre pilote fermé et le noyau. I crois que c'est plus facile avec les nouveaux noyaux avec support pour l'espace utilisateur drivers bien que je ne pense pas qu'ils supportent DMA correctement (je devais coder un module de noyau DMA espace utilisateur pour supporter DMA directement entre le chipset et l'espace utilisateur).

Cependant (encore) je vous recommande vraiment de considérer ce que c'est votre en essayant de protéger. Les pilotes fermés peuvent convenir aux applications intégrées où vous avez un contrôle strict sur la version du noyau et le matériel. Mais si ce pilote est envisagé pour quelque chose de plus générique (c.-à-d. personnes vendant du matériel se connecteront à leurs propres systèmes) puis fermé les pilotes de source ne se révélera être une source de douleur constante et maux de tête de maintenance.

3

Certains développeurs clés du noyau (mais pas Linus lui-même) sont d'avis que tout module non-GPL est une violation de la licence du noyau. Lorsque certains développeurs ont arraché le pilote Belkin du routeur Linksys, l'ont inversé et publié le résultat, Belkin n'a pas pu les arrêter à cause de la contre-attaque consistant à apporter cette interprétation de la licence devant le tribunal en guise de défense.

+0

Intéressant, avez-vous une source sur cette affaire Belkin? –

+0

Aucune affaire n'a été portée devant les tribunaux. – Joshua

3

D'innombrables autres pilotes ont utilisé un «shim» open-source pour faire le pont entre un fichier objet de source fermée et le noyau open-source. Ceci est considéré par la plupart des développeurs du noyau comme une violation, au moins dans l'esprit, de la GPL. Selon moi, cela dépend si vous distribuez le logiciel. Si vous utilisez uniquement le logiciel en tant que service, cela devrait être autorisé. Si vous distribuez un périphérique intégré ou un produit en boîte, c'est un non-non.

Déplacez toutes les fonctionnalités dont vous avez besoin du noyau, ou ouvrez les composants de votre noyau. C'est ce que tout le monde (honnête) fait, et ce n'est généralement pas aussi compliqué, car quiconque possède une quantité importante de «propriété intellectuelle» du noyau a un mauvais modèle d'affaires ou une équipe d'ingénieurs incompétente.

* ci-dessus est mon opinion *

+0

Le module que nous écrivons est un module en temps réel qui utilise des modules RTAI GPL. Nous utilisons un très vieux noyau (et de vieilles choses RTAI) donc nous DEVONS charger tout le code en temps réel en tant que module du noyau. Si nous pouvions utiliser le noyau moderne et RTAI nous mettrions toute la partie IP dans l'espace utilisateur, bien sûr – Emiliano

+0

Avec une conception soignée, vous pouvez diviser votre code entre un module noyau ouvert et un espace utilisateur. Cela dépend de quel âge est-il vieux? <2.4.18? – stsquad

Questions connexes