为什么使用 Affero GPL
GNU Affero 通用公共许可证是普通 GNU GPL 第 3 版的修改版本。它增加了一个要求:如果您在服务器上运行修改后的程序,并允许其他用户与其通信,那么您的服务器还必须允许他们下载与该处运行的修改版本相对应的源代码。
GNU Affero GPL 的目的是防止影响经常在服务器上使用的自由程序开发人员的问题。
假设您开发并发布了一个在普通 GNU GPL 下的自由程序。如果开发者 D 修改了程序并发布,GPL 要求他也以 GPL 的方式分发他的版本。因此,如果您获得了他的版本的副本,您可以自由地将他的一些或全部更改合并到您自己的版本中。
但是,假设该程序主要在服务器上使用。当 D 修改程序时,他很可能会在他自己的服务器上运行它而不会发布副本。那么您将永远不会获得他的版本的源代码副本,因此您将永远没有机会将他的更改包含在您的版本中。您可能不喜欢这种结果。
使用 GNU Affero GPL 可以避免这种结果。如果 D 在每个人都可以使用的服务器上运行他的版本,您也可以使用它。假设他已遵循许可证要求,允许服务器的用户下载他的版本的源代码,您可以这样做,然后您可以将他的更改合并到您的版本中。(如果他没有遵循,您可以让您的律师向他投诉。)
普通 GNU GPL 第 3 版和 GNU Affero GPL 都包含允许您在一个程序中链接这两个许可下的模块的文本。
GNU Affero GPL 不能解决服务即软件替代 (SaaSS)的问题。
SaaSS 指的是用户使用别人的 Web 服务器来进行他们自己的计算。这要求他们将他们的数据发送到服务器,服务器为他们进行计算并将结果发送回给他们。SaaSS 是一种不公正的行为,因为当计算以这种方式完成时,用户无法控制他们的计算。
如果此服务器上的某些程序在 GNU Affero GPL 下发布,则服务器必须向用户提供该程序相应的源代码。这很好,但是拥有此源代码并不能让他们控制在该服务器上完成的计算。它也没有告诉他们该服务器上可能正在运行的其他软件,这些软件可能会以其他方式检查或更改他们的数据。
我们看不到任何合理的方式来通过对特定程序的许可证条件来解决 SaaSS 问题。即使编写一个法律条件来区分 SaaSS 使用和非 SaaSS 使用也是一个挑战,而且如果我们有这个条件,我们看不到程序的许可证在 SaaSS 情况下可能需要任何可以纠正 SaaSS 固有错误的条件。因此,我们解决 SaaSS 问题的方法很简单:拒绝使用 SaaSS 服务。
如果某个程序专门且仅用于 SaaSS,则您不应该编写它。但是,许多程序对于各种类型的服务都很有用,包括一些是 SaaSS 而另一些则不是。编写和发布这些程序是有用的,这样人们就可以使用它们来建立非 SaaSS 服务,并且以 AGPL 发布它们是很好的。