严格模板库

时间:2017-07-11 16:16:39

标签: c++ templates obfuscation commercial-application

我们商业C ++库的很大一部分依赖于模板。我们计划将我们的产品作为头文件和动态链接库(闭源)出售,但由于我们的大多数代码库都集中在头文件中,我们事实上将它作为开源发布,缺少小的,易于更换的块。

以下是库接口中我们的一个类的示例:

template<class ItInput, class ItOutput>
struct serialize{
  ItOutput operator() (ItInput first, ItInput last, ItOutput d_first) {
    // operation on pointers (assuming that ++, -- and * operators work as expected for pointers) 
} 

有没有办法为我们的模板化代码提供等于或优于常规代码编译的混淆程度(即技术上可逆但不盈利但也不是最佳代码)?

编辑:为了澄清,我们的目标是阻止用户阅读实施,而不是阻止非法复制我们的工作。为了解决这个问题,请假设我们有正当理由要求这一要求。

1 个答案:

答案 0 :(得分:7)

  

我们事实上将它作为开源发布

错误。 “开源”意味着您的许可证与Chart兼容,而且可能不是。{/ p>

询问您的律师。

你错误地寻求法律问题的技术答案。

  

是否有办法为模板化代码提供等于或优于常规代码编译的模糊处理级别

如果你有时间花钱,你可能会用一些无用的垃圾替换库中的每个标识符。例如,如果您使用secret标识符,请添加类似

的内容
#define secret s_1eovFxBcc2F

在任何其他代码之前。稍后您甚至可以运行一个脚本,用secret替换s_1eovFxBcc2F的每一次出现。当然,您的secret不应出现在您使用的任何系统标头中。

恕我直言,这会耗费时间,但可能会让你的经理感到高兴。

真正重要的是适用于您的客户的许可证。没有严肃的事情(当然也不是大事)可以承受违法行为。

  

澄清一下,我们的目标是阻止用户阅读实施,

然后,仅提供一组类似C(并且可能已声明为extern "C")的函数作为库的已发布接口,仅提供OSI

BTW,您是否考虑采用相反的方法,使您的图书馆成为开放源代码,可能使用GPL许可证(并出售替代,减少免费软件,许可证),以便每个(分发)使用它的程序也必须是GPL编辑(或者必须购买你广泛的其他许可证)?

(我坚持认为,法律问题通常没有技术解决方案)