我们商业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)
}
有没有办法为我们的模板化代码提供等于或优于常规代码编译的混淆程度(即技术上可逆但不盈利但也不是最佳代码)?
编辑:为了澄清,我们的目标是阻止用户阅读实施,而不是阻止非法复制我们的工作。为了解决这个问题,请假设我们有正当理由要求这一要求。
答案 0 :(得分:7)
我们事实上将它作为开源发布
错误。 “开源”意味着您的许可证与兼容,而且可能不是。{/ p>
询问您的律师。
你错误地寻求法律问题的技术答案。
是否有办法为模板化代码提供等于或优于常规代码编译的模糊处理级别
如果你有时间花钱,你可能会用一些无用的垃圾替换库中的每个标识符。例如,如果您使用secret
标识符,请添加类似
#define secret s_1eovFxBcc2F
在任何其他代码之前。稍后您甚至可以运行一个脚本,用secret
替换s_1eovFxBcc2F
的每一次出现。当然,您的secret
不应出现在您使用的任何系统标头中。
真正重要的是适用于您的客户的许可证。没有严肃的事情(当然也不是大事)可以承受违法行为。
澄清一下,我们的目标是阻止用户阅读实施,
然后,仅提供一组类似C(并且可能已声明为extern "C"
)的函数作为库的已发布接口,仅提供OSI。
(我坚持认为,法律问题通常没有技术解决方案)