有一个R包定义了一些方便的函数,用于将文件从zip存档中提取到C ++中的std::string
。我想在我自己的软件包中使用这些功能,但我无法简单地链接到它们,因为标头不在原始软件包的inst/include
目录中。
我的问题是基于我的理解,除非标题位于inst/include
中,否则C ++级代码在包外不可用。
要使用该代码,我的选项是:
请求包维护者将C ++头文件移动到inst/include
目录,以便我可以在linkingTo
文件中使用DESCRIPTION
从我的包中调用它。
复制并确认代码,这意味着将GPL-3许可证传播到我自己的软件包中。
复制并毫无意义地更改代码以逃避版权。
复制代码,大约20行,不要改变它,不要承认它,也不要传播GPL-3许可证。
< / LI>创建一个单独的小包,使我想要的代码在inst/include
中可用,向原作者承认,并向自己传播GPL-3许可(但不是我的实际包, includes
它)。
还有其他选择吗?我误解了Writing R Extensions或Rcpp吗?
澄清:我完全不宽恕选项3和4,在我看来,这是作弊。因此问题。阅读答案的人现在会看到这些事情被视为作弊。但它们是人们在做正确的事情时所考虑的事情。比简单Imports: package
更难,这就是我加入它们的原因。
答案 0 :(得分:4)
唯一可行的选择是选项1和2.
选项1的工作原理是R维护者愿意在GPL以外的许可下为您提供代码 。这当然意味着您将仅针对双重许可代码进行链接,而不是针对所有R链接。
如果您愿意将GPL用于代码以及链接到该代码的所有代码,则选项2有效。
选项3是剽窃的定义,只是不是选项。
选项4是可疑的,不道德的,而且在您公开宣布该选项的情况下也有点难以实现。
选项5不起作用,因为GPL也适用于您的单独包,并且扩展也适用于使用该包的所有代码。