Why the Affero GPL

The GNU Affero General Public License is a modified version of the
ordinary GNU GPL version 3. It has one added requirement: if you run
a modified program on a server and let other users communicate with it
there, your server must also allow them to download the source code
corresponding to the modified version running there.

The purpose of the GNU Affero GPL is to prevent a problem that
affects developers of free programs that are often used on
servers.

Suppose you develop and release a free program under the ordinary
GNU GPL. If developer D modifies the program and releases it, the GPL
requires him to distribute his version under the GPL too. Thus, if
you get a copy of his version, you are free to incorporate some or all
of his changes into your own version.

But suppose the program is mainly useful on servers. When D
modifies the program, he might very likely run it on his own server
and never release copies. Then you would never get a copy of the
source code of his version, so you would never have the chance to
include his changes in your version. You may not like that
outcome.

Using the GNU Affero GPL avoids that outcome. If D runs his
version on a server that everyone can use, you too can use it.
Assuming he has followed the license requirement to let the server's
users download the source code of his version, you can do so, and then
you can incorporate his changes into your version. (If he hasn't
followed it, you have your lawyer complain to him.)

Both the ordinary GNU GPL, version 3, and the GNU Affero GPL have
text allowing you to link together modules under these two licenses in
one program.

SaaSS means that users use someone else's web server to do their
own computing. This requires them to send their data to the server,
which does their computing for them and sends the results back to
them. SaaSS is an injustice because the users cannot control their
computing when it's done that way.

If some program on this server is released under the GNU Affero
GPL, the server is required to offer the users the corresponding
source of that program. That is good, but having this source code
does not give them control over the computing done on that server. It
also does not tell them what other software may be running on that
server, examining or changing their data in other ways.

We don't see any sensible way to address the SaaSS problem with
license conditions on particular programs. Even to write a legal
condition to distinguish between SaaSS use and non-SaaSS use would be
a challenge, and if we had that, we don't see anything that the
program's license might require in the SaaSS case that would correct
the inherent wrong of SaaSS. Thus, our solution to the problem of
SaaSS is simple: refuse to use services that are SaaSS.

If a program is meant specifically and only for SaaSS, you
shouldn't write it. But many programs are useful for a variety of
kinds of services, including some that are SaaSS and some that are
not. It's useful to write and release these programs so people can
set up non-SaaSS services with them, and good to release them under
the AGPL.