WordPress themes and plugins DO NOT inherit the GPL v2

handcuff-money-gpl

Last week, the WordPress scene once again exploded with debate about the GPL v2.  The fuse?  A WordPress developer was removed from the CodePoet.com directory because he actively supported the commercial theme “Thesis” 1.  The community ruckus  spawned several articles about the subject, including this article I wrote as a response to the situation.

This post is an update to my previous article.  Though I think I made a valid argument, I no longer think it’s accurate and it’s doesn’t cover the “whole truth” which I’m going to do here.

While reading all the articles that have been written recently, I came to an epiphany!  Most of these articles, including my own, make one critical error:  They missed facts and focused on beliefs.

I’ll have to thank Matt Mullenweg for pointing out this fantastic quote:

“In reality, we often base our opinions on our beliefs, which can have an uneasy relationship with facts. And rather than facts driving beliefs, our beliefs can dictate the facts we chose to accept. They can cause us to twist facts so they fit better with our preconceived notions. Worst of all, they can lead us to uncritically accept bad information just because it reinforces our beliefs. This reinforcement makes us more confident we’re right, and even less likely to listen to any new information.”

– Joe Keohane in How facts backfire.

One of the most well written articles on the subject of Derivative Works and WordPress would probably be Mark Jaquith’s “Why WordPress Themes are Derivative of WordPress” 2.  It spends most of it’s space explaining why WordPress themes should be considered “derivative works” without ever quoting a single line of the GPL v2.  He spent 2,000+ words on defining what makes something derivative but he missed one fact that qualifies, or in this case, disqualifies his entire opinion.

I commented:

Your article does a detailed job of describing your opinion. I truly appreciate hearing your point of view.

That said, I can’t help but notice that you don’t mention which part of GPLv2 you’re basing this opinion on. I think it’d be helpful to the readers to see what part of the license brings you to your conclusions.

Mark responded with the following:

The crux of it, to me, is this:

These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works

I do not consider themes independent and separate works. They form one work, when combined with WordPress, and necessarily contain WordPress code and WordPress-derivative code.

BAM!  There it was.  The qualifier.  Not the quote from the GPL v2, but his words:  ”when combined with WordPress”.  As Matt Mulenweg’s post quoting Joe Keohane helped me realize, Mark Jaquith twisted some facts by omitting this one statement from his entire article.  Perhaps he did this intentionally, or maybe it was just his beliefs driving his facts.

Mark made some very valid points throughout his article and it is VERY well written.  Points about how themes are run, how they interact with WordPress the same way that WordPress interacts with itself and how a theme uses the same functions as the core uses.

Yes, valid and convincing points indeed, except none of his points qualified until after a theme is distributed.  The GPL v2 is a distribution license, after all.  Until a theme is combined with WordPress, none of his points are valid.  If you go back and re-read his post, adding “when combined with WordPress” to each point, the article takes on a completely different meaning than what it’s title implies.

Now lets take a second to review James Vasile’s “official legal opinion” 3 as posted on WordPress.org back in July of 2009.  Since his legal opinion tends to be the de facto go-to when issues of WordPress and commercial themes come into question, I think it’s a very important read for everyone.  Since Mark and several others pointed to this Legal Opinion, I decided to read it one more time — really trying to absorb it this time, opening my mind to any new information that I may have missed in the past.

Now, I’m guessing I can’t be the first person to notice this — and I’m sure someone will point it out (please do).  James Vasile qualifies his entire legal argument with the following statement:

On the basis of that version of WordPress, and considering those themes as if they had been added to WordPress by a third party, it is our opinion that the themes presented, and any that are substantially similar, contain elements that are derivative works of the WordPress software as well as elements that are potentially separate works.

As James sates, it’s his official legal opinion is that themes AS IF THEY HAD BEEN ADDED TO WORDPRESS BY A THIRD PARTY are derivative works.

How the HELL did I miss this the first 10 time I read it?  Perhaps because I wasn’t expecting the go-to, “Official Opinion”, to support my opinion of commercial themes and plugins as they are currently distributed.  I read right over that statement because I was looking at the information and trying to find ways to refute it rather than agree with it.

So, there ya go – I now officially agree with the official WordPress.org published legal opinion of James Vasile.

WordPress themes and plugins that do not contain actual code from within WordPress and that are distributed without WordPress are NOT derivative works.  They do not become derivative works until a third party places them within the codebase of WordPress.  As we all know, people selling commercial plugins almost NEVER distribute them with WordPress and if they’re on the up-and-up, they’re not distributing copy pasta 4 that could possibly cause their code to inherit the GPL v2.

Now, many of you may wonder why I’m so adamant about this subject.  Those of you that know me, know that I wholeheartedly support Open Source and what it stands for.  WordPress and other Open Source projects have been putting food on my table for over a decade.  Why would I speak out against people like Matt Mullenweg and other GPL evangelists?

Well, the answer to that is very simple:  I believe in freedom in its purest form.

Just as much as I appreciate the work of people like Mark Jaquith, Matt Mullenweg, Andrew Nacin and all the many other contributors to WordPress, I also appreciate the fact that not everyone is able to put food on their table as a side-effect of freely contributing to a project such as WordPress.  I understand that some people might be creating original work that simply doesn’t have as much broad appeal or is amazingly innovative but simple, and the only way they’re time and effort will be repaid is by keeping the creation their own.

Yes, there are plenty of people that code commercial software that could contribute to the open source community and still make money, but it’s not my place, nor do I think it’s the intent of the GPL, to force those people to do the right thing.

Other good reads:

For a ton of research and potentially related case law, Chip Bennett did a very in depth write-up on this same topic, from a slightly different angle.

A short note on Chris Pearson:

Since I started this post with mention of Thesis, I feel I need to add a note about it.  As I don’t want to make Thesis a focus here, I’ll keep it brief.

Chris Pearson allowed code from within WordPress and other GPL’ed plugins into his code-base.  Because of this I believe he has, at least to some extent, violated the GPL.  If he had kept it clean and used only his own code in the making of Thesis, I would probably be supporting him and would be rejoicing a precedent-setting lawsuit against him.  As it stands I cannot support him, nor do I find any joy or purpose (other than to compel him to re-release his code under the GPL) in any legal action against him.  Thats is all.  I will not respond, and will probably delete any comments in direct regards to Chris or Thesis.

Notes:

  1. a commercial theme written by Chris Pearson, which Automattic, Matt Mullenweg and several others claim to be in “blatant violation of the GPL”
  2. http://markjaquith.wordpress.com/2010/07/17/why-wordpress-themes-are-derivative-of-wordpress
  3. I’m referring to his opinion and not the introduction which I find wholly inaccurate - http://wordpress.org/news/2009/07/themes-are-gpl-too/
  4. Nerd Slang for software that contains copy and pasted code from other peoples work

Extending GPL Licensed Code

one-thousand-1000-dollar-bill1

So — once again, WordPress GPL wars have erupted on the Twitter.

Today, it started with an independent WordPress consultant being removed from the CodePoet.com website.

CodePoet is a directory of WordPress consultants brought to you by Automattic, the company behind WordPress.com.

The reason cited  was that the consultant promoted the Thesis theme, a commercial theme written by Chris Pearson, which Automattic, Matt Mullenweg and several others claim to be in “blatant violation of the GPL”.

As these things go, members of the community immediately dug their trenches and started throwing verbal hand grenades around.  Very few people had any real valid points to make; Understandable as I’m quite sure  most people haven’t taken the time to read the GPL much less understand it enough to try to interpret it.  I don’t know why, but this WP GPL fight always brings up humorous memories of 2 groups of high school aged girls arguing over which actor in the Twilight series is hotter: Edward or Jacob.  Weird, hu?  Anyway, I digress …

First of all, lets take a quick second to review my point of view on the GPL and how it applies to WordPress extensions.  Mind you, this is my interpretation of it — not anyone else’s.  Furthermore, if I were to start selling premium or commercial themes or plugins for WordPress, there is a very good chance I’d release under a GPL compliant license.

  • WordPress code is release under the GPL, so obviously modifying it’s code and then reselling the code would be in violation of copyright law.
  • WordPress provides an API – an interface that allows it to be extended to work with 3rd party code as well as allow 3rd party code to interface with it.
  • Many 3rd party, commercial, plugins can and do work without WordPress.

So, those things said — I’m feeling a bit torn.  I think it’s a fringe area of the license and it requires someone unbiased, with a lot more contract law experience, like a Judge, to make the legal distinctions.  I do however feel like I sway towards non-gpl extensions being legal and not in violation of the GPL.

I’ll explain why with the following example:

WordPress, as well as countless other GPL licensed projects offer an interface for external applications.  Does the GPL extend to commercial 3rd party projects, such as FTP Clients, software media players or email clients?

Lets use an email client as a comparison to a WordPress theme.  Why?  On it’s exterior, it may seem like an apples to oranges comparison, but if we dig deeper these two things are much more similar than they seem.  You see, an email client doesn’t do much more than take information stored on a server, format it’s display and allow you to view and navigate it in a particular way.  In that same fashion, a WordPress theme does the same thing.  It takes an an authors content and formats how it’s displayed, and in most cases, gives you a method of navigating the content.

If we apply the logic that all extensions of WordPress are covered under the GPL, then we would have to apply that same logic to software like Microsoft Outlook and Internet Explorer, not to mention the countless other products that interface with and extend GPL licensed software.

In the Pearson vs. Mullenweg scenario, who has more to loose?  Matt believes that the whole open source community would take a hit if it went to court and lost.  It’s an exaggeration, but sure, this same battle has gone on within other GPL projects and they might have to concede that 3rd party extensions that don’t use actual GPL licensed code might be in the right to sell their wares.  On the other hand, if the GPL side of the argument won, what would happen to all those commercial clients that interface with GPL code?

Not so Judicious capital_P

lowercase-p

So – after all the hype about the capital_P_dangit “feature” in 3.0 surfaced, the core team did decide to make a change.  They’ve implemented a “more judicious” version of the filter to help “fix” some of the technical glitches the original code caused.  Today I’ll take a quick peek at that code so we can see just how effective the changes are.  In this example, I’ll be using the very same, new and improved code.

Here we have the “new code” – I haven’t altered a single line of it nor have I disabled the capital_P_dangit() filter in this installation of WordPress (version 3.0.1 from the SVN).

function capital_P_dangit( $text ) {
// Simple replacement for titles
if ( ‘the_title’ === current_filter() )
return str_replace( ‘WordPress’, ‘WordPress’, $text );
// Still here? Use the more judicious replacement
static $dblq = false;
if ( false === $dblq )
$dblq = _x(‘“’, ‘opening curly quote’);
return str_replace(
array( ‘ WordPress’, ‘‘Wordpress’, $dblq . ‘WordPress’, ‘>Wordpress’, ‘(WordPress’ ),
array( ‘ WordPress’, ‘‘WordPress’, $dblq . ‘WordPress’, ‘>WordPress’, ‘(WordPress’ ),
$text );
}

Check out the screencast for a quick overview of the new filter — or read on.

Now, if you don’t code — you might not understand why, but if you cut and paste this code expecting it to work, it won’t. See, the code snippet I pasted into the post is not the same as the code you’re looking at here. The filter has changed some capitalization and rendered it useless. I intended to give you a working code snippet, I made sure the snippet worked, but WordPress has broken by transparently “correcting an error in my spelling”.

WordPress_my_intent() <- This is just an example of what a function could be called — but this too has been altered. So, if I were to use an incorrectly capitalized “WordPress” in my function names, perhaps in code snippets I wrote last year, I then upgraded to 3.0, none of my snippets would work for anyone.

And what about not technical articles where I was trying to make a point — for whatever reason — by spelling WordPress incorrectly?

Perhaps the next revision of this junk code, that should NOT be in the core, will include some advanced mind-reading fuzzy logic.

Removing the uppercase P filter…

lowercase-p

So — people got a little hyped about the capital_P_dangit() filter that is activated in the WordPress v3.0 core.

For those of you that have been hiding under a rock for the past few days, this filter keeps you from “misspelling” WordPress.  More accurately, it changes your “misspelling” of the word to the “correct” spelling, without letting you know that it’s doing so. It’s just a little snip of code that Matt Mullenweg himself submitted.  It doesn’t seem like it should be a big deal, but well — to some of us, it is.   We write our content, sometimes we intentionally misspell words.  Some of us like to make a point of NOT using the “correct” capitalization for WordPress, sometimes for reason, sometimes not.  But it’s our choice.  It’s really as simple as that.

It it REALLY a big deal?  Well, honestly — no.  I don’t think it’s a huge thing.  It’s something Matt wrote, probably on a whim, and didn’t take into consideration that it might change the message of someones writing.  He probably didn’t think about it, cause it is just a silly capitalization thing.  Perhaps he forgot that WordPress is primarily used by people who wish to express themselves and that they might be terribly bothered by someone changing ONE OR TWO letters of their content.  Frankly, and I think most people will agree, it’s such a silly thing it should have simply been removed from the core for 3.0.1 — problem solved, everyone is happy, content retains it’s integrity and a straw is removed from the back of the community camel.

See — that’s where something happened.  Rather than applying logic to the situation, someone decided to let ego dictate their decision.  They dug in and opted to stick behind a silly decision, which is normally fine, but has no place is a large community project like WordPress.

Anyway …

I pretty much kept clear of the Twitter discussions, but finally had to say something.  My comment:

@nacin @chip_bennett emoticons & curly quotes are typically an optional enhancement. Forced “P” is ma.tt forcing his vanity upon us.

http://twitter.com/flashingcursor/status/18086987146

The response to this from Andrew Nacin pissed me off:

@flashingcursor No, it’s not. You can hold whatever opinion you want, but “I hate Matt” is an invalid argument if there ever was one.

http://twitter.com/nacin/status/18103976774

I’m not sure where @nacin saw “I hate Matt” in my comment… But that response, and the many like it,  is what I find amazingly disturbing.  It’s become the instant response to any resistance or comments made about core changes in WordPress, no matter how basic, civil, or well thought-out and proper the resistance.

As I said before, you are in /complete control/ of your site. It’s a single line to remove a filter. If you don’t like the filter, vote with your feet or with a plugin. If the function cause a non-trivial number of people to avoid 3.0, leave WP, or install a plugin to deactivate I would seriously reconsider it. In the absence of that, there are a 1,001 better places to focus my attention with regards to WordPress.

This response from Matt Mullenweg, quite literally, had me rolling on the floor laughing.  Realistically, there are probably only 3 or 4 people who wanted to force the spelling of WordPress to its correct capitalization versus the hundreds that didn’t care for it (based on the total number of downloads of one of the “fix” plugins).  In the time it took Matt to make that comment and return to the 1,001 better places to focus his attention, he could have solved the problem.

Andrew Nacin has also expended an amazing amount of time arguing his point that “it’s the correct spelling” — and I think we all understand his argument.  But he’s arguing apples while we’re arguing oranges.  Personally, I make an effort to spell the brand name as it’s intended to be spelled, and it makes total sense to me why it needs to be that way.  The argument isn’t over that fact.  The argument we’re making is that many articles have been written on the subject and, unbeknownst to the authors, their articles read like a comedy skit because, effectively, Matt and Andrew have reached in and changed their writing.  We’ve stepped out of the arena of bugs and technical glitches and moved into the alterations of creative works — which is probably worse.

A few simple options:

  • Get rid of the code – easy.
  • Include the code as a deactivated plugin – not as easy, but it already exists, so …

Fact:  I put Matt Mullenweg and the other core developers up on a pedestal.  I think they’re great people and their creation has done AMAZING things for the world, the internet and for me personally.  I love what you’re doing, I love that you’re doing it under the GPL and making it available to everyone.  I understand that you often make decisions and prioritize things in ways that I don’t always agree with, but I know you’re doing it for the greater good of the project and I understand and respect those decisions.  This is NOT one of those decisions.

Watch this little cartoon and get over your egos boys.  I’d much rather laugh with you than at you.

A shorter version of the video below… Seems I went a little overboard with the first one.

To quickly remove the filter, you can add the following code to your themes function.php files:

remove_filter( 'the_content', 'capital_P_dangit' );
remove_filter( 'the_title', 'capital_P_dangit' );
remove_filter( 'comment_text', 'capital_P_dangit' );
Enjoy.

WordPress: A community conflicted

lines

An Open Letter to the WordPress Community

Every so often, the debates heat up and some of the more excitable members of the community get their panties in a bunch.

We’ve seen articles calling for Matt Mullenweg’s resignation, posts lambasting 3rd party developers that choose to go closed source, endless twitter fights and tantrums, and even the threat of law suits.  The GPL arguments alone have taken up hours of my time.

The whole situation turns into a black eye for WordPress and Automattic, and causes a great divide in an otherwise helpful and united WordPress community.

“Whenever you’re in conflict with someone, there is one factor that can make the difference between damaging your relationship and deepening it. That factor is attitude.”

– William James

If you came here expecting drama, you should stop reading now.  I’m not doing it.  In general, I think it’s the overly dramatic members of our community that have turned healthy debate into project poison.  For every conflict that exists within the WordPress community, simple non-combative solutions exist.  Thats what I’d like to talk about, and perhaps we can come up with some useful solutions.

So, if you’ve read this far, you might be thinking, “who the crap is this guy, and why should I be reading this?”, so let me take 10 seconds to introduce myself.  I’m a 37-year-old IT consultant and Sr. Project Manager with nearly 20 years of experience.  In a past life I was a very active and vocal contributor to the Mambo/Joomla communities and served as the “Head of 3rd Party Development Standards and Guidelines”.  I’ve been a WordPress fanatic for several years and have managed, developed and consulted on dozens of large and medium WordPress implementations and customizations.  Back in 2005, Yahoo was kind enough to give me a little award for a terribly simple implementation of one of their products.

All that said, I won’t pretend to be someone of any particular importance.  Although I’ve been very active in the community for several years, I’ve tried to keep my head low and let the debates and general bullshit arguments pass me by.  The only reason I’ve decided to get vocal now, after many years of relative silence, is because I see the cancer growing and I’d like it to stop.

[Read more...]