42

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

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

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

4

7 回答 7

62

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

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

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

它仍然是可重新分发的,编辑文件会非常困难 - 所以你可以添加一些基本的许可内容,而不是被一些#s挫败。

正如我所说,我认为您不会通过加密或混淆等方式在反盗版方面取得成功。取决于您的客户,一个简单的合同,也许一些非常基本的检查会比一些复杂的解密系统走得更远(并让使用您的应用程序的体验更好,而不是希望不会更糟

于 2008-10-02T23:10:21.443 回答
15

您可以将整个东西打包为 Amazon Machine Instance (AMI),然后让它们在Amazon EC2上运行您的应用程序。这个解决方案的好处是 Amazon 会为您处理计费,并且由于您正在分发整个机器映像,您可以确定您的所有客户都使用相同的 LAMP 堆栈。AMI 是一个加密的机器映像,可以根据您的需要进行配置。

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

当然,此解决方案要求您的客户在亚马逊托管他们的应用程序,并支付适当的费用。

于 2008-10-02T22:54:43.557 回答
13

我的做法是这样的:

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

这样,用户只需在主机名更改和首次安装时联系服务器,但您可以获得一小层安全性。您可以将主机名更改为更复杂的名称,但实际上没有必要——任何想要盗版的人都会这样做,但是像这样的简单机制会让诚实的人保持诚实。

于 2008-10-02T22:40:24.200 回答
10

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

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

如果你真的很想卖一个 Python 软件,你需要认真对待。聘请律师起草许可/合同条款,让人们在购买时同意,然后让他们拥有实际的软件。这意味着如果他们违反许可/合同条款,您将不得不将他们告上法庭,但无论如何您都必须这样做(例如,如果有人破坏了您的“加密”并开始分发您的软件),并且拥有从长远来看,已经写在纸上的法律文字的实际适当形式以及他们的签名,对您的业务来说会好得多。

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

于 2009-01-15T07:01:38.453 回答
7

您将永远无法从真正想要它的人那里获得源代码。最好现在就掌握这个事实,以后不用再头疼了。

于 2008-10-03T14:48:12.870 回答
4

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

Django 来自许可(和混淆)频谱的开源端。当然,MIT 许可证比 GPL 更常见;它们仍然与微软的 EULA 之类的东西相去甚远。很多 Djangophiles 会拒绝封闭源代码,仅仅是因为微软就是这样做的。

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

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

于 2011-05-06T18:40:40.743 回答
3

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

通过这种方式,您可以让诚实的人保持诚实,而不会让您感到头疼。

于 2008-12-28T04:19:39.013 回答