2012-01-23 17 views
12

Estoy preparando un paquete R que incluirá un ejecutable compilado de un tercero. El plan es conectarlo a R mediante las llamadas al sistema(). Tengo permiso para distribuir este ejecutable, pero no su código fuente. Desafortunadamente, solo se compila en Windows 32 bit, y no es posible recompilarlo fácilmente bajo diferentes arquitecturas.Distribución de un ejecutable compilado con un paquete R

Entendiendo que este paquete tendrá una audiencia algo limitada, ¿cómo se distribuirá el ejecutable? También reconozco que no se permitirá en CRAN por este motivo.

Por ejemplo, si el ejecutable debe estar incluido en la subcarpeta/bin/de la instalación del paquete, o alternativamente, el paquete debe descargar el archivo ejecutable cuando esté instalado.

Además, ¿qué problemas de licenciamiento debo enfrentar en este escenario?

+0

Pregunta interesante y bien planteada, pero no realmente _programación_. –

+2

Creo que esta pregunta está cubierta por el alcance del sitio, algo en líneas generales (de las preguntas frecuentes): herramientas de software comúnmente utilizadas por los programadores –

+3

Gracias Joshua. Esto es cierto, no estrictamente una pregunta de programación. Sin embargo, una pregunta definitivamente de interés para los programadores R y los desarrolladores de paquetes. – digitalmaps

Respuesta

9

He trabajado en dos paquetes que hacen algo como esto, ambos alojados en R-forge debido a la restricción binaria CRAN (que, dicho sea de paso, me parece perfectamente sensata). (No creo que se está perdiendo algo obvio en su pregunta -. Acaba de decir aquí lo que elegí hacer)

  • la cpcbp paquete (componentes principales comunes/retroproyección) utiliza un binario compilado a partir código escrito por Patrick Phillips; el código fuente no es redistribuible porque usa algunas rutinas Recetas Numéricas. He tenido la intención de volver a escribir este núcleo en R (es solo álgebra lineal numérica directa, no sería tan difícil). Se me ocurre que probablemente deba modificar la licencia en este caso. Probablemente dije "GPL" pero no creo que pueda hacerlo dado el componente no redistribuible ...
  • el paquete glmmADMB se usa libremente redistributable código fuente (licencia BSD), pero la cadena de herramientas es suficientemente complicada que no desea que los usuarios tienen que descargar todo el paquete de soporte

en ambos casos puse los binarios en inst/bin y posiblemente bajo una arquitectura específica subdirectorios (que se instalan en /bin) y usa la lógica apropiada para detectar la arquitectura y ejecutar el binario correcto.

supongo que, en principio, podría obtener alrededor de la incapacidad de una licencia a través GPL haciendo que la parte no redistribuible en una descarga (como usted sugiere), pero que parecería violar el espíritu ...

+0

Gracias @Ben. Estos son excelentes puntos de partida para modelar el paquete. – digitalmaps

+0

Buena respuesta. Con respecto a la licencia y GPL: La GPL aborda cuestiones interesantes con respecto a bibliotecas binarias no libres, bibliotecas de sistemas, etc., y esto puede ser de interés con respecto a si el paquete * in toto * se ajusta o no a las reglas de FOSS. Vea los enlaces de [esta publicación] (http://stackoverflow.com/questions/1854843/does-gpl-code-linking-with-proprietary-library-depend-which-created-first) para mayor aclaración. – Iterator

3

El el enfoque sugerido por Ben Bolker también lo utiliza el paquete "dismo" de CRAN: para que la función maxent() funcione, debe descargar el binario maxent java y colocarlo en el subdirectorio apropiado dentro de la carpeta del paquete principal.

Cuestiones relacionadas