2009-04-10 12 views
10

Die Firma, für die ich arbeite, entwickelt ein Closed-Source-Kernelmodul (.ko-Datei). Dieses Modul muss Funktionen aufrufen, die in einem gpl2-Modul enthalten sind. Im Grunde haben wir eine Situation wie folgt aus:Nicht-GPL-Kernelmodule mit GPL-Einsen

// 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(); 

diese legal ist? Verletzen wir in diesem Beispiel die GPL2-Lizenz? Bitte beachten Sie, dass closed.c keine gpl2-Header-Datei enthält.

+0

+1, gute Frage. –

+4

Ich stimme ab, diese Frage als off-topic zu schließen, weil es um Lizenzierung oder rechtliche Probleme geht, nicht um Programmierung oder Softwareentwicklung. [Siehe hier] (http://meta.stackoverflow.com/questions/274963/questions-about-licensing/274964#274964) für Details und die [Hilfe] für mehr. – JasonMArcher

Antwort

7

Es gibt GPL_ONLY Flag für Module, die nicht in Nicht-GPL-Module verwendet werden sollten. Wenn das Modul, über das Sie sprechen, nicht GPL_ONLY ist, können Sie es verwenden.

Aber auch diese, die GPL_ONLY sind, können verwendet werden, wenn Sie über user-space drivers, which are possible in 2.6.23 darauf zugreifen. Genau das ist mit dem USB-Subsystem passiert. http://www.linux-magazine.com/online/news/linux_2_6_25_without_closed_source_usb_drivers

Nicht gerade rechtliche Frage Adressierung, sondern gibt Ihnen eine Vorstellung: http://www.cyberciti.biz/tips/linus-rejects-the-idea-of-non-gpl-kernel-modules.html

+0

Besudelte Liebe :) +1, Gute Antwort. –

4

1 .: Sie müssen mit einem Anwalt darüber sprechen; wahrscheinlich die Rechtsabteilung Ihres Unternehmens.

2.: Die wichtige Frage ist, welches Stück Code von welchem ​​anderen Code abgeleitet wird.

Leider gibt es fast keine Antwort auf diese Frage.

Einige würden halten, dass alle Kernel-Module abgeleitete Werke des Kernels sind, so müssen unabhängig von der Header-Aufnahme GPL sein.

Alternativ ist Ihr geschlossenes Modul vom GPL-Modul abgeleitet, und das GPL-Modul stammt vom Kernel, also muss das geschlossene Modul auch GPL sein.

+0

Wie ist es möglich, NVIDIA und ATI Closed Source Module geladen zu haben? Ich nehme an, sie verwenden agp und drm Kernel Module (was GPL sein sollte). Nach dem ganzen LICENCE Makro können Sie eine andere Lizenz wählen, auch wenn sie den Kernel "taint" – Emiliano

+0

Wie gesagt - es ist eine Frage der Uneinigkeit - ATI und NVIDIA offensichtlich glauben, dass ihre Module nicht abgeleitete Werke des Kernels sind. Was sie vielleicht nicht sind - sie sind immerhin Ports ihres Windows-Treibers. Aber ich glaube nicht, dass es eine Rechtsprechung gibt, so dass alle Meinungen möglich sind. –

+0

Ah jetzt verstehe ich Ihren Standpunkt. +1 dafür. – Emiliano

6

IANAL so sollten Sie wirklich qualifizierte Rechtsgutachten einholen. Allerdings geht dieser Ansatz sicherlich gegen den Geist der Lizenz und werden Sie keine Freunde im Kernelland gewinnen.

Sie könnten jedoch eine andere Aufteilung betrachten. Ein Ansatz ist, ein vollständig GPL-Modul zu haben und all Ihre "geheime Firma IP" in einem Benutzer Raumfahrer zu setzen. Dies ist eine Herangehensweise, die ich gemacht habe, als die Firma, für die ich arbeitete, nicht darauf erpicht war, die Details unseres FPGA der Welt offen zu legen. Alle Entscheidungen und Registereinstellungen wurden im Userspace entschieden und die Kernel-Seite des Treibers lud nur Werte in IRQs ein. Mit vorsichtiger Design können Sie alle Probleme in Echtzeit verwalten, die Sie haben können und eine nette saubere Trennung zwischen Ihrem geschlossenen Treiber und dem Kernel haben. I glaube, das ist einfacher mit neueren Kernel mit Unterstützung für Benutzerraum Treiber, obwohl ich denke, dass sie DMA noch nicht richtig unterstützen (Ich musste ein Benutzer-Space-DMA-Kernel-Modul zu unterstützen DMA direkt zwischen der Chipsatz und Benutzerraum).

Aber (wieder) würde ich wirklich empfehlen, Sie überlegen, was es ist Ihre versucht zu schützen. Geschlossene Treiber können für eingebettete Anwendungen OK sein, wo Sie die Kernelversion und die Hardware genau kontrollieren können. Aber wenn dieser Treiber für etwas allgemeineres betrachtet wird Verkauf von Hardware-Menschen werden in ihre eigenen Systeme stecken) dann geschlossen Quelle Treiber werden nur beweisen, eine Quelle von ständigen Schmerzen und Wartung Kopfschmerzen.

3

Es gibt eine Meinung von einigen wichtigen Kernel-Entwicklern (aber nicht von Linus selbst), dass jedes nicht-GPL-Modul eine Verletzung der Kernel-Lizenz darstellt.

Als einige Entwickler den Belkin-Treiber vom Linksys-Router gerissen, umgekehrt manipuliert und das Ergebnis veröffentlicht hatten, konnte Belkin sie wegen der Gegenvorstellung, diese Lizenzinterpretation vor Gericht zur Verteidigung zu bringen, nicht aufhalten.

+0

Interessant, haben Sie eine Quelle zu diesem Belkin-Fall? –

+0

Kein Fall ging vor Gericht. – Joshua

3

Unzählige andere Treiber haben eine Open-Source- "Shim" verwendet, um eine Closed-Source-Objektdatei mit dem Open-Source-Kernel zu überbrücken. Dies wird von den meisten Kernel-Entwicklern als Verletzung der GPL angesehen.

Meiner Meinung nach kommt es darauf an, ob Sie die Software vertreiben. Wenn Sie dies ausschließlich auf Software-as-a-Service ausführen, sollte das erlaubt sein. Wenn Sie ein Embedded-Gerät oder ein Boxed-Produkt vertreiben, ist es ein No-No.

Verschieben Sie die Funktionalität, die Sie benötigen, aus dem Kernel, oder öffnen Sie Ihre Kernel-Komponenten. Das ist es, was alle anderen (ehrlich) tun, und es ist im Allgemeinen nicht so schwierig, weil jeder, der beträchtliche Mengen an geistigem Eigentum im Kernel-Space hat, entweder ein schlechtes Geschäftsmodell oder ein inkompetentes Ingenieurteam hat.

* die oben ist meine Meinung *

+0

Das Modul, das wir schreiben, ist ein Echtzeitmodul, das RTAI GPL-Module verwendet. Wir verwenden einen sehr alten Kernel (und alte RTAI-Sachen), daher MÜSSEN wir den gesamten Echtzeit-Code als Kernel-Modul laden. Wenn wir modernen Kernel und RTAI verwenden könnten, würden wir natürlich den gesamten IP-Teil in den User-Space setzen, natürlich mit – Emiliano

+0

. Mit vorsichtigem Design können Sie Ihren Code zwischen einem offenen Kernel-Modul und einem Benutzerbereich aufteilen. Hängt davon ab, wie alt ist alt? <2.4.18? – stsquad