我将如何打包并出售Django应用程序?

目前,我正在为我的客户托pipe一个我自己开发的Django应用程序,但我现在开始考虑将其出售给人们,让他们自己主持。

我的问题是:我如何打包并出售Django应用程序,同时保护其代码免受盗版或盗窃? 分发一堆.py文件听起来不是一个好主意,因为我卖给它的人也可以复制它们并传递给他们。

我认为出于这个问题的目的,假设每个购买这个产品的人都可以运行相同的(LAMP)设置。

不要试图混淆或encryption代码 – 它永远不会工作。

我build议将“作为服务”出售给Django应用程序 – 既可以为他们托pipe,也可以向他们出售代码和支持 。 写一份合同,禁止他们重新分配。

也就是说,如果您决定以某种方式混淆代码 – 您可以完全分配python应用程序.pyc(Python编译的字节码)。这就是Py2App的工作原理。

它仍然是可以重新分配的, 编辑这些文件将非常困难 – 所以你可以添加一些基本的授权内容,而不是被less数几个版本挫败。

正如我所说,我不认为你会通过encryption或混淆等方式成功反盗版。根据你的客户,一个简单的合同,也许一些真正的基本检查将远远比一些复杂的解密系统(并且更好地使用你的应用程序的经验,而不是希望没有更糟糕的

我会这样做的方式是:

  1. encryption所有的代码
  2. 编写一个安装程序,使用机器的主机名和许可证文件联系服务器,并获取解密密钥,然后解密代码并将其编译为python字节码
  3. 添加(在安装程序中)一个模块,用于在导入时检查计算机的主机名和许可证文件,如果不匹配则会死亡

这样,用户只需要在主机名更改和第一次安装时联系服务器,但却得到了一小层安全性。 你可以把主机名改成更复杂的东西,但是实际上没有必要 – 任何想要盗版的人都会这样做,但是这样一个简单的机制会使诚实的人保持诚实。

您可以将整个事件打包为Amazon机器实例(AMI),然后让他们在Amazon EC2上运行您的应用程序。 关于这个解决scheme的好处是,亚马逊会为您负责计费 ,而且由于您要分发整个机器映像,因此您可以确定所有的客户端都使用相同的LAMP堆栈。 AMI是一个encryption的机器映像,可以根据需要进行configuration。

您可以让Amazon向客户开具一次性费用,使用费或月费。

当然,这个解决scheme要求您的客户在亚马逊托pipe他们的应用程序,并支付适当的费用。

“encryption”Python源代码(或字节码,或任何使用它的语言的真正的字节码,不仅仅是Python),就像一些人在网页上放置的JavaScript小东西,试图禁用鼠标右键,声明“现在你不能偷我的图像!“

解决方法是微不足道的,不会阻止一个有决心的人。

如果你真的想销售一个Python软件,你需要认真对待。 请律师起草许可证/合同条款,在购买时有人同意,然后让他们有实际的软件。 这意味着,如果违反许可证/合同条款,您必须将人们拖入法庭,但无论如何(例如,如果有人打破“encryption”并开始分发您的软件),您必须这样做,已经写在纸上的实际合法forms的文字和签名,对您的业务来说长远来说会好很多。

如果你真的对于 “窃取”你软件的人有些偏执,那么只要坚持托pipe模式,不要让他们访问服务器。 许多成功的企业都是以这种模式为基础的。

你将永远无法保持真正想要的人的源代码。 现在最好来处理这个事实,以后再省下头痛。

有一件事你可能要考虑的是FogBugz所做的。 只需包含一个为目标平台编译的小二进制文件(可能是C程序),并包含validation许可证的代码。

这样你可以保持诚实的人诚实,最小的头痛你的一部分。

作为朋友,我可以坦率地讲话吗? 除非你的应用程序真的很棒,你可能不会得到很多买家。 为什么浪费时间在律师,混淆,许可和什么? 您可以通过开源代码获得更好的声誉,并维护它。

Django来自许可(和混淆)的开源端。 当然,MIT的授权比GPL更普遍; 尽pipe它们与微软的EULA无异。 很多Djangophiles都会禁用闭源代码,只是因为这就是微软所做的。

此外,人们会更信任你的代码,因为他们将能够阅读它并validation它不包含任何恶意代码。 请记住,“混淆”意味着“隐藏”。 谁会真正知道你隐藏的是什么?

诚然,有没有简单的方法来开源代码的货币化。 但是你可以提供你的服务,甚至在Pledgie.com上发布一个活动,感谢那些为你所有的伟大工作而感恩的人。