使用R包分发已编译的可执行文件

使用R包分发已编译的可执行文件,r,package,R,Package,我正在准备一个包含第三方编译的可执行文件的R包。计划是使用system()调用将其连接到R。我有权分发此可执行文件,但没有其源代码。不幸的是,它只在Windows 32位下编译,并且不可能在不同的体系结构下轻松地重新编译它 了解到这个包的受众有限,应该如何分发可执行文件?我还认识到,由于这个原因,CRAN上不允许使用该功能 例如,可执行文件是否应包含在软件包安装的/bin/子文件夹中,或者软件包是否应在自身安装时以某种方式下载可执行文件 此外,在这种情况下,我会面临什么样的许可问题呢?我在两个软

我正在准备一个包含第三方编译的可执行文件的R包。计划是使用system()调用将其连接到R。我有权分发此可执行文件,但没有其源代码。不幸的是,它只在Windows 32位下编译,并且不可能在不同的体系结构下轻松地重新编译它

了解到这个包的受众有限,应该如何分发可执行文件?我还认识到,由于这个原因,CRAN上不允许使用该功能

例如,可执行文件是否应包含在软件包安装的/bin/子文件夹中,或者软件包是否应在自身安装时以某种方式下载可执行文件


此外,在这种情况下,我会面临什么样的许可问题呢?

我在两个软件包上做过类似的工作,由于CRAN二进制限制(顺便说一句,这对我来说似乎完全合理),这两个软件包都托管在R-forge上。(我不认为你的问题遗漏了任何明显的东西——只是在这里说我选择做什么。)

  • cpcbp
    包(公共主成分/反投影)使用由Patrick Phillips编写的代码编译而成的二进制文件;源代码是不可分发的,因为它使用了一些数值公式例程。我一直想用R重写这个核心(这只是简单的数值线性代数,不会那么难)。我突然想到,我可能不得不修改这一个的许可证——我可能说“GPL”,但考虑到不可分发的组件,我认为我实际上无法做到这一点
  • glmmADMB的
    glmmADMB
    软件包使用可自由再发行的源代码(BSD许可证),但是工具链非常复杂,我不希望用户必须下载整个支持软件包
在这两种情况下,我都将二进制文件放在
inst/bin
中,并可能放在特定于体系结构的子目录下(安装在
/bin
中),然后使用适当的逻辑来检测体系结构并运行正确的二进制文件


我想原则上你可以通过将不可再发行的部分下载(如你所建议的)来绕过无法通过GPL授权的问题,但这似乎违反了精神…

本·博尔克建议的方法也被CRAN包“dismo”所使用,以使函数maxent()工作,您必须下载maxentjava二进制文件并将其放入主包文件夹中相应的子目录中

这是一个有趣的、提出得很好的问题,但并不是真正的编程。我认为这个问题已经包含在这个网站的范围内了,大致是这样的(来自FAQ):编程人员Hanks Joshua常用的软件工具。这是真的,严格来说不是一个编程问题。然而,对于R程序员和软件包开发人员来说,一个绝对感兴趣的问题是,CRAN不会接受二进制文件,这对我来说是个新闻。为了其他人的利益,这一点在“请注意,CRAN将不再接受包含二进制文件的提交文件,即使这些文件已列出。”的第1.1节中有说明。其他地方也可能有说明。除了R-Forge外,Bioconductor还提供了第二个示例。他们的方法是一种不雅观的、直截了当的安装方法:
source()
他们托管的安装脚本。有安全意识的管理员通常不喜欢远程托管代码的执行,但这是一种不同的分发方法的示例。谢谢@Ben。这些都是对软件包进行建模的绝佳起点。回答不错。关于许可和GPL:GPL解决了有关非免费二进制库、系统库等的有趣问题,这可能是关于软件包是否符合自由和开放源码软件规则的有趣问题。有关进一步的说明,请参阅的链接。