Relicensing Dolphin: The long road to GPLv2+

Since its resurfacing as an open source project in 2008, Dolphin has been licensed under the GNU General Public License version 2 (GPLv2). This license, created in 1991, is still a fairly common license used in the open source world. But as with anything that deals with technology, times are changing at a rapid rate. More recent projects are using GNU Public License version 3 and Apache 2.0, for their additional freedoms, protections from outside liability, and improved inter-license compatibility. Unfortunately these newer licenses are not compatible with GPLv2, and any project using these licenses cannot link to Dolphin and thus, Dolphin cannot link to them.

Back in 2008, GPLv3 had just come out and most projects were GPLv2, so licensing the project GPLv2 seemed like the smartest decision at the time. Since then, one of Dolphin's original founders, ector, has repeatedly mentioned how he regrets licensing Dolphin under GPLv2 instead of GPLv2+. GPLv2+ allows a later version of the GPL license to be substituted in place of GPLv2. This includes new licenses as they are released, so while GPLv2+ only means GPLv2 and GPLv3 right now, it will include GPLv4 onward once they're released. This gives a project a lot of leeway when linking with other software that a static license does not. Case in point, ector recently relicensed another extremely successful emulator he founded, PPSSPP, under GPLv2+.

Though many knew that licensing issues were inevitable, relicensing was repeatedly shelved so everyone could remain focused on improving the emulator. And for many many years, GPLv2 was perfectly fine for Dolphin with licensing issues staying out of the way of development.

Licensing Conflicts

Licensing problems jumped to the forefront of development early last year when it was brought to our attention that Dolphin's Android builds were linking to Apache 2.0 licensed APIs. As noted, Apache 2.0 is not compatible with GPLv2. The Free Software Foundation cited that "the patent termination and indemnification provisions as restrictions not present in the older GPL license." This meant that we were technically in violation of our license even though we weren't aware of it until that point.

A minor maintenance pull request was cancelled in order to prevent more licensing issues while bigger decisions needed more time. This left a dark cloud hovering over Dolphin's Android release with only two options; either relicense the whole project or the Android version had to be scrapped. It took years of development to get it this far after fighting immature drivers, weak hardware and other limitations in order to bring GameCube/Wii emulation to Android devices. To see a roadblock such as this come up just as chipsets are getting to the point where they can run games at full speed was a brutal wakeup call.

Similar incompatibilities were discovered within Dolphin making the situation much more urgent. The Qt5 frontend would be limited, as newer modules are not compatible GPLv2. Other new features, including Virtual Reality support, would be nearly impossible to implement without relying on libraries that could not be used under the current licensing situation. The situation had finally reached a tipping point.

Super Mario Sunshine on Android
Without relicensing, some exciting new features would be nothing but lost potential.

Dolphin Virtual Reality Technical Preview: Exploring Outset Island
It was quickly becoming clear that this would be the trend, rather than exceptions.

The team quickly came to the conclusion that in order to keep Dolphin relevant in an ever-changing environment, it would need to be relicensed under GPLv2+. This would give Dolphin some much needed freedom to breathe within the open source landscape. As such, relicensing formally began in September of 2014.

The Challenge of Relicensing

One of the chief problems with relicensing a GPL project is that there is very little precedence on how to go about it. The first step taken was researching what other projects did during their relicensing proceedings in order to give an idea of what was necessary. Relicensing a GPLv2 licensed program is difficult because the license pretty much assumes you won't be relicensing, leaving us with very little to fall back on except copyright laws. In order to relicense under that notion, it required that we find everyone who submitted copyrightable code to the emulator and get their permission for relicensing.

Collecting up 12 years of Dolphin Contributors

Mouseover for details

The easiest part of relicensing is the active developers. Everyone more or less is around fairly often, and asking a quick question about relicensing is easy enough. If one active developer refuses, it pretty much kills the motion before it starts. Thankfully, among our active developers, there was a unanimous vote toward relicensing, moving the plan forward.

The second step taken was emailing all of the developers that have ever submitted code to Dolphin. This was to try and get responses from those who had since left the project. Quickly, over 70% of the developers agreed to the relicensing plan from a simple mass email. This kicked off relicensing to a very, very strong start.

On the other side of things, our contribution agreement was modified on December 1st 2014, mandating that all coders who submitted code from that point forward were agreeing to license their contributions under GPLv2+. That was added to protect us from a case where a new contributor would show up, submit code, and disappear before signing off on the GPLv2+ relicensing plan.

Locating all but one of Dolphin's top 25 active developers and getting their approval was little issue at all. Finding a lot of the important contributors that left Dolphin long ago proved to be much more difficult. Over the course of 8 months, countless emails, some blind guesses, and those who agreed under the new contribution agreement; the team has managed to get confirmation or process the contributions from 95.05% of contributors.

The issue with relicensing is never getting the majority of people; it's getting permission from everyone. With just a single digit of contributors left to find, things got significantly more difficult. Developers behind features such as the DSP-LLE JIT, Software Renderer, Fifoplayer, Savestates and more remained impossible to contact. Our remaining developers were left with an unpleasant situation, where none of the typical solutions to relicensing seemed to fit.

There is little precedent, so together we decided to take action and figure out what would be best for the project while fulfilling our legal obligations.

Despite our best efforts, contacting every single member of Dolphin was something that simply isn't possible. Over the past 8 years of open source development, Dolphin has accumulated over 200 contributors often registering with only a username and an email with nothing else. Out of all those, we managed to contact all or take care of the code of all but 10 of those developers. Considering that many of those accounts are now dead and the people seemingly vanished from the Internet, finding the rest is akin to squeezing blood out of a stone.

That's when research provided us some much needed relief when it seemed as though relicensing was an impossibility. In 2003, Free Software lawyers consulted for Mozilla's relicensing project and stated that relicensing with the permission of just 95% of contributors was fine, as long as there were no objections in the remaining 5%.

The precedent for emulators is even less strenuous, PPSSPP relicensed under the precedent that everyone they asked was for relicensing. Considering that PPSSPP is an emulator made up of a similar group of people, their mentality is very similar to Dolphin's. Open source emulators are sort of like a big family; we collaborate, we argue, we sometimes fight, but in the end we share a singular common goal.

PPSSPP is a much younger project with fewer contributors than Dolphin, so the comparison isn't perfect. Instead of simply asking all of our active developers and relicensing, we made a very strong effort to get a hold of every single developer. Despite this, it simply wasn't feasible to make contact with every single person who worked on Dolphin.

As of 4.0-6349, Dolphin is GPLv2+ with every single person we were able to contact who still owns copyright in Dolphin agreeing to relicense. We definitely would love to hear support from those that we were unable to contact, and if there are any concerns we will gladly address them in a prompt fashion.

What Happens with the New License?

For those unsure of what relicensing means for our open source status, here's a quick rundown of what Dolphin's licensing change actually affects.

What This DOES NOT Change:

  • Dolphin is still open source, and all the source code will remain available for anyone to view and download.
  • Copyleft: Any project that links to Dolphin must share source code of any derivative of the Dolphin source code under any GPLv2+ license.
  • Compatibility with GPLv2 projects reusing Dolphin's source code: people can consider GPLv2+ as being GPLv2, as long as they accept that they won't be able to link with our (L)GPLv3 or Apache dependencies. This is unlikely to be a significant factor.
  • Ownership: any contributor still owns copyright on his contributions, we are not introducing any kind of CLA scheme.

What This DOES Change:

  • People will be free to interpret Dolphin's code as being GPLv3 licensed. In practice, GPLv3 only adds more restrictions to the license, and since the code is still GPLv2 licensed people can ignore these additional restrictions if they wish so.
  • This opens the possibility of a GPLv4 license being released that lifts some restrictions that were in GPLv2 or GPLv3, and the Dolphin codebase would automatically be licensed as GPLv4 (as well as v2 and v3). Given the views of the Free Software Foundation, which edits the GPL licenses, this should not be a big concern for a project of Dolphin's size.

You can continue the discussion in the forum thread of this article.

Next entry

Previous entry

Similar entries