我正在用Python开发一个软件,将分发给我的雇主的客户。我的雇主想用一个有时间限制的许可文件来限制该软件的使用。
如果我们分发.py文件或甚至.pyc文件,就很容易(反编译和)删除检查许可证文件的代码。
另一个方面是,我的雇主不希望我们的客户读到这些代码,担心这些代码可能被盗,或者至少是"新颖的想法" 。
有什么好办法来处理这个问题吗?最好是用一个现成的解决方案。
该软件将在Linux系统上运行(所以我不认为py2exe能解决这个问题)。
Python,作为一种字节码编译的解释语言,是很难锁定的。 即使你使用像 py2exe 这样的ex-packager,可执行文件的布局也是众所周知的,而且Python的字节码也很好理解。
通常在这样的情况下,你必须做一个权衡。 保护代码到底有多重要? 里面是否有真正的秘密(比如银行转账对称加密的密钥),还是你只是在疑神疑鬼? 选择能让你最快速开发出最佳产品的语言,并对你的新奇想法有多大价值持现实态度。
如果你决定你真的需要安全地执行许可证检查,那就把它写成一个小的C语言扩展,这样许可证检查代码就会特别难(但不是不可能!)被反向工程,而把你的大部分代码留在Python中。
你的雇主是否知道他可以"偷"回别人从你的代码中得到的任何想法?我是说,如果他们能读懂你的工作,你也能读懂他们的工作。也许看看你如何能从这种情况中获益,会比担心你会失去多少东西产生更好的投资回报。
[编辑] 回答Nick的评论。
没有收获也没有损失。客户得到了他想要的东西(并为之付出了代价,因为他自己做了改变)。由于他没有发布这一变化,就好像对其他人来说,这一变化并没有发生。
现在,如果客户出售该软件,他们必须修改版权声明(这是非法的,所以你可以起诉,而且会赢-->;简单的案例)。
如果他们不改变版权声明,第二级客户会注意到该软件来自于你的原创,并想知道发生了什么。他们有可能会与你联系,这样你就会了解到你的作品被转卖的情况。
我们再次有两种情况。原始客户只卖了几份。这意味着他们反正也赚不了多少钱,所以何必呢。或者他们卖了很多。这意味着你有更好的机会了解他们的工作,并为此做些什么。
但最终,大多数公司都试图遵守法律(一旦他们的声誉被毁,就更难做生意了)。因此,他们不会窃取你的工作,而是与你一起工作来改进它。因此,如果你包括源代码(有一个保护你不被简单转售的许可证),他们有可能会简单地推回他们所做的修改,因为这将确保该修改在下一个版本中,他们不需要维护它。这就是双赢:你得到了改变,如果他们真的非常需要改变,即使你不愿意将其纳入正式版本,他们也可以自己做出改变。