我如何打包和销售Django应用程序?

时间:2008-10-02 22:27:57

标签: python django distribution piracy-prevention

目前我正在托管我为自己的客户开发的Django应用程序,但我现在开始考虑将它卖给人们让他们自己托管。

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

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

7 个答案:

答案 0 :(得分:56)

不要尝试混淆或加密代码 - 它永远不会起作用。

我建议将Django应用程序“作为服务”出售 - 要么为它们托管,要么向它们出售代码和支持。写下一份禁止他们重新分发的合同。

也就是说,如果您决定以某种方式对代码进行模糊处理 - 您可以将python应用程序完全分发为.pyc(Python编译的字节代码)。这就是Py2App的工作方式。

它仍然可以重新分发,但是编辑文件非常困难 - 所以你可以添加一些基本的许可资料,而不是被少数{{1}挫败}秒。

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

答案 1 :(得分:11)

我的方式就是:

  1. 加密所有代码
  2. 编写与服务器的主机名和许可文件联系的安装程序,获取解密密钥,然后解密代码并将其编译为python字节码
  3. 添加(在安装程序中)一个模块,该模块在导入时检查机器的主机名和许可文件,如果不匹配则死亡
  4. 这样,用户只需在主机名更改时和首次安装时联系服务器,但您获得了一小部分安全性。您可以将主机名更改为更复杂的内容,但实际上并不需要 - 任何想要盗版的人都会这样做,但这样的简单机制会让诚实的人诚实。

答案 2 :(得分:11)

您可以将整个内容打包为Amazon Machine Instance(AMI),然后让它们在Amazon EC2上运行您的应用。这个解决方案的好处是亚马逊将take care of billing for you,并且由于您正在分发整个机器映像,您可以确定所有客户端都使用相同的LAMP堆栈。 AMI是一个加密的机器映像,可根据需要进行配置。

您可以让亚马逊向客户收取一次性费用,使用费或月费。

当然,此解决方案要求您的客户在亚马逊上托管其应用,并支付相应的费用。

答案 3 :(得分:10)

“加密”Python源代码(或字节码,或任何使用它的语言的真正字节码 - 不仅仅是Python)就像有些人在网页上试图禁用鼠标右键的那些小JavaScript一样,宣称“现在你不能偷我的照片!”

变通办法是微不足道的,不会阻止一个坚定的人。

如果你非常认真地销售一块Python软件,那么你需要认真对待。支付律师起草许可证/合同条款,让人们在购买时同意这些条款,然后让他们拥有实际的软件。这意味着如果他们违反了许可/合同条款,您将不得不将人们绳之以法,但无论如何,您都必须这样做(例如,如果有人违反您的“加密”并开始分发您的软件),并且已经在纸上签名的实际正确形式的法律用语,以及他们的签名,对您的业务来说将长期好得多。

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

答案 4 :(得分:7)

您永远无法保留真正想要它的人的源代码。现在最好来掌握这个事实,以后可以避免头痛。

答案 5 :(得分:4)

我可以坦率地说,作为朋友吗?除非你的应用真的太棒了,否则你的买家可能不会很多。为什么要浪费时间在律师,混淆,许可和诸如此类的东西上?您可以通过开源代码并维护它来获得更好的声誉。

Django来自许可(和混淆)的开源端。当然,麻省理工学院的许可证比GPL更常见;他们与Microsoft的EULA之间的距离都很远。许多Djangophiles会对封闭的源代码不屑一顾,因为这就是微软所做的。

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

当然,没有简单的方法可以通过开源代码获利。但是,您可以在Pledgie.com上提供您的服务,甚至发布一个活动,感谢那些感谢您所有出色工作的人。

答案 6 :(得分:3)

您可能想要考虑的一件事是FogBugz的作用。只需包含为目标平台编译的小二进制文件(可能是C程序),并包含验证许可证的代码。

通过这种方式,您可以保持诚实的人诚实,让您的头痛最轻微。