2009-04-10 11 views
10

La empresa para la que trabajo está desarrollando un módulo kernel de fuente cerrada (archivo .ko). Este módulo tiene que hacer llamadas a funciones que están contenidas en un módulo gpl2. Básicamente tenemos una situación como esta:Módulos de kernel no GPL que usan 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(); 

¿Esto es legal? ¿Estamos violando la licencia GPL2 en este ejemplo? Tenga en cuenta que closed.c no incluye ningún archivo de encabezado gpl2.

+0

1, buena pregunta. –

+4

Estoy votando para cerrar esta pregunta como fuera de tema porque se trata de licencias o cuestiones legales, no de programación o desarrollo de software. [Consulte aquí] (http://meta.stackoverflow.com/questions/274963/questions-about-licensing/274964#274964) para obtener más información, y la [ayuda] para obtener más información. – JasonMArcher

Respuesta

7

Hay GPL_ONLY indicador para los módulos, que no deben utilizarse en módulos que no sean GPL. Entonces, si el módulo del que está hablando no es GPL_ONLY, puede usarlo.

Pero incluso estos que son GPL_ONLY se pueden utilizar si accede a ellos a través de user-space drivers, which are possible in 2.6.23. Eso es exactamente lo que le sucedió al subsistema USB. http://www.linux-magazine.com/online/news/linux_2_6_25_without_closed_source_usb_drivers

No abordar exactamente tema legal, pero le da una idea: http://www.cyberciti.biz/tips/linus-rejects-the-idea-of-non-gpl-kernel-modules.html

+0

Amor contaminado :) +1, Buena respuesta. –

4

1º: Debe hablar con un abogado al respecto; probablemente el departamento legal de su compañía.

2º: La pregunta importante es qué parte del código se deriva de qué otro código.

Desafortunadamente, hay casi cualquier número de respuestas para esta pregunta.

Algunos sostienen que todos los módulos del kernel son trabajos derivados del núcleo, por lo que tienen que ser GPL independientemente de la inclusión del encabezado.

Alternativamente, su módulo cerrado se deriva del módulo GPL, y el módulo GPL deriva del kernel, por lo que el módulo cerrado también debe ser GPL.

+0

¿Cómo es posible tener cargados los módulos de fuente cerrada de NVIDIA y ATI? Supongo que usan módulos kernel agp y drm (que deberían ser GPL). Después de todo, la macro LICENCIA le permite elegir licencias diferentes, incluso si pueden "dañar" el kernel – Emiliano

+0

Como dije, es una cuestión de desacuerdo: ATI y NVIDIA obviamente creen que sus módulos no son trabajos derivados del kernel. Lo que podrían no ser, son puertos de su controlador de Windows después de todo. Pero no creo que haya ninguna jurisprudencia al respecto, por lo que todas las opiniones son posibles. –

+0

Ah ahora entiendo tu punto. +1 por eso. – Emiliano

6

IANAL por lo que realmente debe buscar la opinión legal cualificado. Sin embargo, este enfoque va contra el espíritu de la licencia y no le ganará ningún amigo en kernel land.

Sin embargo, podría considerar una división diferente. Un enfoque es tener un módulo completamente GPL y poner toda su "IP de compañía secreta" en un controlador de espacio de usuario . Este es un enfoque que tomé cuando la empresa para la que trabajaba no estaba interesada en exponer los detalles de nuestra FPGA al mundo. Todas las decisiones y la configuración del registro fueron decididas en el espacio del usuario y el lado del núcleo del controlador acaba de cargar valores en IRQ. Con el diseño cuidadoso puede administrar cualquier problema de tiempo real que pueda tener y tener una buena separación limpia entre su controlador cerrado y el kernel. I creo que esto es más fácil con núcleos más nuevos con soporte para espacio de usuario controladores aunque no creo que admitan DMA correctamente todavía (tuve que codificar un espacio de usuario módulo de kernel DMA para admitir DMA directamente entre el chipset y el espacio de usuario)

Sin embargo (de nuevo) realmente recomendaría que consideras lo que está tratando de proteger tu . Los controladores cerrados pueden estar bien para las aplicaciones integradas donde tiene un control estricto sobre la versión del kernel y el hardware. Pero si este controlador se está considerando para algo más genérico (es decir vendiendo hardware, las personas se conectarán a sus propios sistemas) y luego cerró , los controladores de origen solo probarán ser una fuente de dolor constante y dolores de cabeza por mantenimiento.

3

Algunos desarrolladores de kernel clave (pero no el propio Linus) opinan que cualquier módulo no GPL es una violación de la licencia del kernel.

Cuando algunos desarrolladores arrancaron el controlador de Belkin del enrutador Linksys, lo diseñaron de forma inversa y publicaron el resultado, Belkin no pudo detenerlos debido a la contrademanda de presentar esta interpretación de licencia ante el tribunal como defensa.

+0

Interesante, ¿tiene alguna fuente sobre ese caso de Belkin? –

+0

Ningún caso fue a la corte. – Joshua

3

Innumerables otros controladores han utilizado una "cuña" de código abierto para unir un archivo de objeto de código cerrado con el kernel de código abierto. Esto es considerado por la mayoría de los desarrolladores de kernel como una violación, al menos en espíritu, de la GPL.

En mi opinión, depende de si distribuye el software. Si está ejecutando esto puramente en software como servicio, eso debería estar permitido. Si está distribuyendo un dispositivo incorporado o un producto en caja, es un no-no.

Mueve la funcionalidad que necesites del kernel, o abre los componentes de código fuente de tu kernel. Eso es lo que hacen los demás (honestos), y generalmente no es tan complicado, porque cualquiera que tenga una cantidad significativa de "propiedad intelectual" en el kernel-space, o tiene un mal modelo comercial o un equipo de ingeniería incompetente.

* lo anterior es mi opinión *

+0

El módulo que estamos escribiendo es uno en tiempo real, que utiliza módulos RTAI GPL. Usamos un kernel muy antiguo (y cosas antiguas de RTAI), por lo que DEBEMOS cargar todo el código en tiempo real como un módulo kernel. Si pudiéramos usar kernel moderno y RTAI pondríamos toda la parte de IP en el espacio de usuario, por supuesto – Emiliano

+0

Con un diseño cuidadoso puede dividir su código entre un módulo de kernel abierto y el espacio de usuario. Depende de qué edad tiene la edad? <2.4.18? – stsquad

Cuestiones relacionadas