Google’s Chris DiBona emailed me this morning to tell me that unless I removed a specific line from the license of my jsmin-php project (a PHP port of Douglas Crockford’s JSMin), Google Code would no longer host the project.
The license in question is the one attached to the original jsmin.c, and is a slightly modified version of the MIT License. Here it is with the offending line emphasized:
Copyright (c) 2002 Douglas Crockford (www.crockford.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
The Software shall be used for Good, not Evil.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
As Google (and some others) interpret it, this additional requirement constitutes a vague use restriction and thus makes the license non-free. Chris explained that if I were to remove that line from the license and “return to a proper open source license that we support”, then jsmin-php could stay on Google Code. Otherwise, he said, “we can’t host you”.
Of course, I can’t change the license, because it’s not my license. It’s Douglas’s license, and he wants people who use his software and derivative works of his software to use it for good and not evil. All derivative works and copies of jsmin.c either include this license or are in violation of it.
I added jsmin-php to Google Code in 2007. Since then, it’s been downloaded over 20,000 times. As of today, its new home is GitHub.
I don’t really mind moving the project—I’ve been intending to do it for a while anyway—and I certainly appreciate the fact that Chris was kind enough to send me a personal email about this before taking any action. But jsmin-php is unlikely to be the only project affected by Google’s discovery of JSMin’s license.
In my reply to Chris, I asked him:
There are quite a few other projects on Google Code that are ports of jsmin.c or include either ports or the original. Does this mean those projects will also be banned from Google Code unless jsmin.c's license changes?
Chris responded: “Sadly, yes.”
I don’t know if Google intends to proactively hunt down all projects using JSMin or whether they’ll only take action when someone rats you out, but if you currently have a project on Google Code that is derived from or includes jsmin.c, you might want to consider migrating to a new host with less restrictive policies.
I asked Douglas what he thought of this. He responded: “When did Google stop being against evil?”
Update (2009-12-09): Via @miraglia, here’s a hilarious excerpt from Doug’s talk, “The JSON Saga”, in which he gives some background on why he added this clause to the license and how often people ask him to remove it:
When I put the reference implementation onto the website, I needed to put a software license on it. I looked up all the licenses that are available, and there were a lot of them. I decided the one I liked the best was the MIT license, which was a notice that you would put on your source, and it would say: "you're allowed to use this for any purpose you want, just leave the notice in the source, and don't sue me." I love that license, it's really good.
But this was late in 2002, we'd just started the War On Terror, and we were going after the evil-doers with the President, and the Vice-President, and I felt like I need to do my part.
[laughter]
So I added one more line to my license, which was: "The Software shall be used for Good, not Evil." I thought I'd done my job. About once a year I'll get a letter from a crank who says: "I should have a right to use it for evil!"
[laughter]
"I'm not going to use it until you change your license!" Or they'll write to me and say: "How do I know if it's evil or not? I don't think it's evil, but someone else might think it's evil, so I'm not going to use it." Great, it's working. My license works, I'm stopping the evil doers!
Audience member: If you ask for a separate license, can you use it for evil?
Douglas: That's an interesting point. Also about once a year, I get a letter from a lawyer, every year a different lawyer, at a company--I don't want to embarrass the company by saying their name, so I'll just say their initials--IBM...
[laughter]
...saying that they want to use something I wrote. Because I put this on everything I write, now. They want to use something that I wrote in something that they wrote, and they were pretty sure they weren't going to use it for evil, but they couldn't say for sure about their customers. So could I give them a special license for that?
Of course. So I wrote back--this happened literally two weeks ago--"I give permission for IBM, its customers, partners, and minions, to use JSLint for evil."
[laughter and applause]
And the attorney wrote back and said: "Thanks very much, Douglas!"
You can see the full video of the talk at YUI Theater (the excerpt above is from 39:45).
Comments
Derivate or not?
Hi,
you mention that jsmin-php of software is written in PHP, and not like the original jsmin in C. So how can it be a derivative? A derivative is as I understand it something to utilizes already existing code. So if you wanted, you could easily change the license. IMO, you shouldn’t though as although it’s not a strict derivative, it’s still a reimplementation. Legally, I think you could change it though.
Derick
Re: Derivative or not?
If I were to write a completely new JavaScript minifier from scratch, then that would not be a derivative work. But jsmin-php is a port of jsmin.c, which means that it’s derived from jsmin.c even though it doesn’t actually contain any of the original C code. As such, I have to abide by the terms of jsmin.c’s license.
That's correct.
We currently only allow open source code on code.google.com’s project hosting system. Douglas’ license isn’t open source, wasn’t cleared by the old OSI, and thus we cannot host it. Sorry.
Will all the lawyers and lawyer-wannabes STFU and STFD?
Someone at the Red Hat Bugzilla Forum writes:
“Red Hat Legal (who are lawyers) disagree.”
See below for an anecdote on lawyers.
“Its a bad license, with unenforceable clauses.”
It’s a license with an unenforceable clause
Still, good guys won’t be evil. Bad guys will ignore the line, so it’s still free in all useful senses. Use restrictions? Prove it was used for evil, if you can.
Will the self-righteous just get over themselves? Give it up and take a back seat, JHC. It’s not like the requirement is for the sacrifice of kittens at dawn. @@
—
Attending law school tends to turn out more than its fair share of annoying, overly precise ‘fachidioten’. I lived with a lawyer in a previous life. One beautiful summer evening, we found ourselves down at Half Moon Bay, drinking sundowners as the sun set. Two whales could be seen in silhouette as the cascade of color slowly melted into the Pacific horizon.
“That’s incredibly beautiful,” said I.
“What do you mean,” snapped the lawyer, an IP litigatrix.
“All of this, it’s amazing.”
“What are you talking about?”
“Err…the sunset. And the whales. And where we are sitting watching all of this. It’s beautiful, don’t you think?”
She paused for several seconds, analyzing the scene.
“Yes.”
I traded her in for a human girlfriend shortly thereafter.
@ That's Correct
Chris, which part of “don’t be evil” means “not open source” to you? I’m confused.
emal addy correction for the mod
Ignore, nothing to see here.
Missing the point.
The Evil here is the proliferation of too many bizarre open source licenses. The ability of open source software to interoperate and mix is a big deal, and it’s becoming a serious problem. Every time somebody mints a new license (whether it’s serious or just “cute”), it’s more gum in the legal works, more confusion and permutations for lawyers to sort out.
So for Google, the issue here isn’t about whether it’s a good or bad license, or whether it’s legitimately open source, or whether it’s enforceable or not. It’s that it’s mere existence as a non-standard license pollutes the open source ecosystem incrementally. We’ve taken a stand against this from the day we launched Google’s Project Hosting service: either use a standard license, or find a different host. And sometimes it makes us sad to have to enforce this stand, but we feel it’s for the sake of protecting open source overall.
-Ben, tech lead of Google’s Project Hosting
Re: Missing the point.
The point was very clear, Ben, and as I said in the post (and in today’s followup), it’s a valid one (albeit one that I disagree with). The problem is that you now have to ban projects like Etherpad too (or convince their maintainers to remove JSMin). Given JSMin’s prevalence and the prevalence of JSLint, which shares the same license, this is a pretty unfortunate situation.
No, it's JSMin's problem.
The author of JSMin intentionally decided to use a license that wasn’t open to all users. That was his choice; he’s perfectly free to do that. And it is your choice to make a derivative work of JSMin; it’s your option to do so. The resolution here is simple: Get JSMin to use a different license or make something that’s not a derivative of JSMin.
Re: No, it's JSMin's problem.
The resolution for me was very simple: I moved jsmin-php to GitHub, and was happy to do so. The resolution for Google is much less simple, because their own projects using JSMin and JSLint are still hosted on Google Code, and I don’t think they’re eager to move them to GitHub.
Re: Re: No, it's JSMin's problem.
Do you have a payed account on GitHub, or how else do you host software which is not open source there? It does not conform to the Open Source Definition:
“6. No Discrimination Against Fields of Endeavor
The license must not restrict anyone from making use of the program in a specific field of endeavor. For example, it may not restrict the program from being used in a business, or from being used for genetic research.”
libv8 & jsmin
Looks like the jsmin.py in libv8 is now a reimplementation with a standard license.
Re: Re: Re: No, it's JSMin's problem.
It’s more like an endeavor’s goal with regard to good or bad than a “field of endeavor”, at least from what I can tell looking at the example you quoted. In this case, the field would be a particular area of endeavor you would like to use the code in; i.e. electrical, aeronautical, etc.. What you’re thinking of is more like a “range of goodness”. In this case, that range would be a particular level of goodness that you would like to use the code in; i.e. good, bad, evil, virtuous, etc..
I haven’t looked at the OSD, but it probably doesn’t have provisions for this sort of “discrimination”, since it is vary arbitrary (though people do have a general consensus, opinions still vary widely). Although you could put this into the context of “field of endeavor”, it wouldn’t be technically correct for it to be there and (I would assume) wouldn’t be enforcible in court, so there isn’t really any point.
That clause is non-Free
That clause is definitely non-Free and thus also not allowed in Fedora nor Debian. It’s causing a lot of problems and thus it’s really JSMin’s license which needs to be fixed, or the code rewritten from scratch by somebody who didn’t look at the original. It’s not Google’s fault.
I'm with Google on this one.
I agree with Ben, When you add an innocent line to clause to just make it look cute (borrowing words from Ben), it presents a whole lot of confusion which would require more man-hours (lawyer-hours, if I may) to get it clarified. As a big corporation very careful about the steps it take, I really cant blame Google on this one.
You can remove the line of course...
Colour me crazy, but doesn’t the MIT license allow you to sub-license given that the text above the offending line remains intact, not that below it?
Re: You can remove the line of course...
That’s what I thought, but I figured with all the lawyers in the room that one of them would have noticed, so I wasn’t sure.
Don't feed the troll
Nice. A license written specifically to troll people that care about free software licensing.
The real joke is on the folks who find this software useful and don’t care about licensing issues though. They end up forced to defend this silliness or jump through unnecessary hoops to work around the meaningless restriction.
Re: You can remove the line of course...
@Rich: That’s an interesting point. I suppose it hinges on the definition of “this permission notice” in the following clause: “The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.”
If “this permission notice” is interpreted as referring only to its own clause, then it would seem that you could legally remove the Good/Evil clause that follows it. But if “this permission notice” is inclusive of its own clause as well as the Good/Evil clause, then it would prohibit removing any portion.
I’ve been interpreting it as applying to both clauses and thus prohibiting removal, and I imagine this is how Red Hat’s lawyers interpreted it as well, but now I’m curious.
Potato Salad License
I’ve had some of my code included in someone else’s package in the Debian repository and had to run a similar gauntlet.
With the wacky amount of licenses these days, I’m reminded of my Potato Salad License from back in 2001:
http://www.ashleyit.com/blogs/ brentashley/?p=193
non-free software
According to the FSF definition of free software, in order to qualify, the license must allow use for any purpose. Clearly this includes evil purposes. I have not checked, but I’m pretty sure the OSI and DFSG definitions will be the same in this respect. Therefore, by any reasonable standards, this license is non-free. I am not surprised at all by Google’s reaction and I support their decision.
Philosophically, I would stipulate that nobody knows whether they can satisfy the license, as you never know what long-term outcome your actions will have unless you know all possible outcomes. Intending evil may cause good in the long run, intending good may lead to evil. Hence it is impossible to say whether you are permitted to use the software, and so in order to be sure that you do not breach copyright you must never use this software.
Chilling effect
> they’ll write to me and say: “How do I know if it’s evil or not? I don’t think it’s evil, but someone else might think it’s evil, so I’m not going to use it.” Great, it’s working. My license works, I’m stopping the evil doers!
No, you (Doug) are not stopping the evil doers; as you already described, you’re stopping someone who wants to do good, but doesn’t know whether you’ll think it’s good. That’s a classic chilling effect.
Humour is all well and good, but in the absence of clear license terms, we get the default draconian copyright restrictions. Please, use well-understood, legally-robust license terms, for the sake of all software recipients.
Contradictions
Well, well: this license also applies to json (and not only to jsmin)…
And a cursory Google code search yields several interesting results..
… including this one hosted on Google Code itself. Ironically enough, opensocial-resources is a Google Code hosted project that is led and managed by Google itself
And including this other one . I think that Google App Engine is Google’s own? and this is hosted on Google Code.
And finally including this one which — though not hosted on Google Code — is Google’s own Dalvik VM that is part of Android.
While I do agree in principle that the proliferation of licenses is evil, if I were you I would point Chris to these (oh-so-minor and insignificant) inconsistencies.
And leave him to resolve this cornelian dilemma:
Is demanding not to force to not do evil evil or not?
public domain for the win
(the second bit is a request, not a license term, since the code is public and unlicensed)
All these free software licenses, especially the GPL, are actually getting in the way of creating a large body of truly free reusable code. What use is GPL’d code if I can’t combine bits of it with non-GPL’d code (e.g. plan 9 source code, or jsmin.c, or my public domain code)? The only way I can use it is to read it, learn from it, and write my own code. So it is open source (because I can see it), but it is not reusable code. May all “free software” licenses burn in hell! :) (I don’t want people to burn there, just those annoying bits of virtual paper!)
I really don’t care if my code is “free” to roam around and be developed without being “enslaved” into a commercial product, what I care about is if PEOPLE are free to reuse my code in their own work; building a body of freely available, reusable code and systems to make programmers’ lives easier and advance technology. I don’t believe that the hypothetical nasty companies who would refuse to give me any good code back in return are actually capable of writing decent code that I would want anyway. Take MS windows for example, it’s a 500 line program to solve a simple job that got carried away with itself, and I suppose the code is terrible – I don’t want to reuse that. I’d quite like to be able to reuse code by some people I admire though, if it wasn’t GPL’d cripple-source.
dual lisence!
You should dual liscence this work under the gpl and your no evil liscence so that it is open source to all good people, but big evil corps or alqaeda will have to release their changes or risk rms’ wrath.
Kinda right...
Hi,
See, if I have a porn site that implements your code, all christians will consider it “evil” thus making my use of your superb script illegal.
And google is affraid of EVERYTHING nowadays.