Imagine the turn of the century.
The so-called Application Service Provider loophole.
In early 2001, someone said to me at an event: - “I won’t release my web application code at all, because the GPL is the BSD license of the web.”
Well, it wasn’t really a loophole
Copyleft’s copyright hack centered around distribution.
Web service company to encourage non-profit donations.
Henry points out: we have no copyleft.
Is it defined for software?
If it were, would it be enough of a copyleft hack?
The classic Computer Science ouroboros:
The program that prints its own source
Sometimes called “quine”
GPLv2§2(c):
If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
mid 2002–09: I suggest a print-your-own-source feature for GPLv2.2§2(d).
Henry is excited.
Affero GPL v1 is born.
AGPLv1§2(d)
If the Program as you received it is intended to interact with users through a computer network and if, in the version you received, any user interacting with the Program was given the opportunity to request transmission to that user of the Program’s complete source code, you must not remove that facility from your modified version of the Program or work based on the Program, and must offer an equivalent opportunity for all users interacting with your Program through a computer network to request immediate transmission by HTTP of the complete source code of your modified version or other derivative work.
Affero, Inc. (the company) goes bankrupt.
GPLv3 process begins.
Henry, fortunately, insists on license upgrade for AGPLv1.
AGPLv3§13
Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph.
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License.
There’s an old saying that victory has a hundred fathers and defeat is an orphan.
— John F. Kennedy
try{function e(b){throw b;}var i=void 0,k=null; function aa(){return function(b){return b}} function m(){return function(){}} function ba(b){return function(a){this[b]=a}} function o(b){ return function(){return this[b]}} function p(b){return function(){return b}}var q; function da(b,a,c){b=b.split(".");c=c||ea; !(b[0]in c)&&c.execScript&&c.execScript("var "+b[0]); for(var d;b.length&&(d=b.shift());) !b.length&&s(a)?c[d]=a:c=c[d]?c[d]:c[d]={}} function fa(b,a){for(var c=b.split("."),d=a||ea,f;f=c.shift();) if(t(d[f]))d=d[f];else return k;return d}function u(){} function ga(b){b.va=function $(){return b.xY||(b.xY=new b)}} function ia(b){var a=typeof b;if(a=="object")if(b){ if(b instanceof Array)return"array";else if(b instanceof Object)return a; var c=Object.prototype.toString.call(b);if(c=="[object Window]") return"object";if(c=="[object Array]"||typeof b.length=="number"&& typeof b.splice!="undefined"&&typeof b.propertyIsEnumerable!="undefined" &&!b.propertyIsEnumerable("splice"))return"array"; if(c=="[object Function]"||typeof b.call!="undefined"&& typeof b.propertyIsEnumerable!="undefined"&&!b.propertyIsEnumerable("call")) return"function"}else return"null"; else if(a=="function"&&typeof b.call=="undefined")return"object";return a}function s(b){return b!==i}function ja(b){return b===k}function t(b){return b!=k}function ka(b){return ia(b)=="array"}function la(b){var a=ia(b);return a=="array"||a=="object"&&typeof b.length=="number"}function ma(b){return typeof b=="string"}function na(b){return typeof b=="boolean"}function oa(b){return typeof b=="number"}function pa(b){return ia(b)=="function"}
JavaScript is an assembly language. JavaScript + HTML is like a .NET assembly. The browser can execute it, but no human should care what’s there.
— Erik Meijer of Microsoft, on 5 July 2011.
Has today’s developer chased a bug from the top to the bottom?
Proprietary relicensing (by holding all copyright).
License enforcement with profit as its primary (and only?) goal.
MySQL would shake down GPL users to buy proprietary licenses they didn’t need.
More copyleft means more shakedowns.
Most common use of AGPLv3 today.
It makes me sick.
AGPLv3’s intended for community development.
Lots of copyright holders: + all bound to each other by copyleft.
The great trust of copyleft.
Sadly, few are writing this code.
Presentation and slides are: Copyright © 2008, 2009, 2010, 2011, 2012, 2013 Bradley M. Kuhn, and are licensed under the Creative Commons Attribution-Share Alike (CC-By-SA) 3.0 United States License.
Some images included herein are ©’ed by others. I believe my use of those images is fair use under USA © law. However, I suggest you remove such images if you redistribute these slides under CC-By-SA-USA 3.0.