目前我正在主持一个我为自己的客户开发的Django应用程序,但我现在开始考虑将它卖给人们让他们自己托管.
我的问题是:如何打包和销售Django应用程序,同时保护其代码免受盗版或盗窃?分发一堆.py文件听起来不是一个好主意,因为我出售它的人也可以复制它们并传递它们.
我认为出于这个问题的目的,可以安全地假设购买它的每个人都将运行相同的(LAMP)设置.
不要试图混淆或加密代码 - 它永远不会工作.
我建议将Django应用程序"作为服务"出售 - 要么为它们托管,要么向它们出售代码和支持.写一份禁止他们重新分发的合同.
也就是说,如果您决定以某种方式对代码进行模糊处理 - 您可以将python应用程序完全分发为.pyc(Python编译的字节代码).这就是Py2App的工作原理.
它仍然可以重新分发,但是编辑文件非常困难 - 所以你可以添加一些基本的许可资料,而不是被一些软件挫败#
.
正如我所说,我不认为你会通过加密或混淆等方式成功地反盗版.根据你的客户,简单的合同,以及一些真正基本的检查将比一些复杂的解密系统更进一步. (并且更好地使用您的应用程序的体验,而不是希望不会更糟)
我的方式是这样的:
加密所有代码
编写一个安装程序,使用机器的主机名和许可证文件与服务器联系并获取解密密钥,然后解密代码并将其编译为python字节码
添加(在安装程序中)一个模块,该模块在导入时检查机器的主机名和许可文件,如果不匹配则死亡
这样,用户只需在主机名更改时和首次安装时联系服务器,但您会获得一小部分安全性.您可以将主机名更改为更复杂的内容,但实际上并不需要 - 任何想要盗版的人都会这样做,但是这样一个简单的机制会让诚实的人诚实.
您可以将整个内容打包为Amazon Machine Instance(AMI),然后让它们在Amazon EC2上运行您的应用程序.关于这个解决方案的好处是亚马逊将为您负责计费,并且由于您正在分发整个机器映像,您可以确定所有客户端都使用相同的LAMP堆栈.AMI是加密的机器映像,您可以根据需要进行配置.
您可以让亚马逊向客户收取一次性费用,基于使用费的费用或月费.
当然,此解决方案要求您的客户在亚马逊上托管他们的应用程序,并支付相应的费用.
"加密"Python源代码(或字节码,或任何使用它的语言的字节码 - 不仅仅是Python)就像有些人在网页上试图禁用鼠标右键的那些小JavaScript事件,声明"现在你不能偷我的照片!"
解决方法是微不足道的,并不会阻止一个坚定的人.
如果你真的非常认真地销售一块Python软件,那么你需要认真对待.支付律师起草许可证/合同条款,让人们在购买时同意这些条款,然后让他们拥有实际的软件.这意味着如果违反许可证/合同条款,您将不得不将人员绳之以法,但无论如何,您都必须这样做(例如,如果有人违反您的"加密"并开始分发您的软件),并且已签署的书面形式的实际适当形式的法律用语将长期为您的企业带来更好的效果.
但是,如果你真的那么害怕人们"窃取"你的软件,只需坚持使用托管模型,不要让他们访问服务器.许多成功的企业都以这种模式为基础.
你永远无法保留那些真正想要它的人的源代码.现在最好来掌握这个事实,并在以后拯救你自己的头痛.