The Bukkit Implosion: A History

December 10, 2015

The release of version 1.8 of Minecraft, in the autumn of 2014, was marred by uncertainty and confusion when the Bukkit project imploded in a very public and spectacular manner. Bukkit and its sibling CraftBukkit ceased to exist and cast the future of multiplayer Minecraft into doubt.

So what exactly happened, for those who are out of the loop or still confused by the situation? Here’s the general gist of the situation…

Prologue

Mojang hired a few of the Bukkit project’s developers (Dinnerbone being one of them) to work on Minecraft itself. With this hire, they supposedly bought the whole Bukkit project at the same time. * Bukkit is an open source plugin development API licensed under the GNU Public License, which enumerates irrevocable conditions that protect the freedom of the end user to run, distribute and modify a program.

CraftBukkit is a compiled Minecraft server jar that takes the closed source Minecraft server from Mojang and incorporates the Bukkit API, the end result being a runnable Minecraft server. This was done with Mojang’s permission. Now, the GPL expressly forbids code licensed under it from being baked into a closed-source (or “GPL incompatible”) program, as one of the stipulations of the license is that any program that uses GPL code must also be licensed under the GPL or a GPL compatible license…which a closed source application certainly is not.

For two years, Mojang let the Bukkit project operate independently, with many of the active developers being completely unaware of the acquisition. So they continued working, unaware that they were basically doing free volunteer work to enrich a multi-million dollar corporation by maintaining the largest Minecraft server platform in use.

The Beginning of the End

It all started when Warren “EvilSeph” Loo announced that Bukkit would be discontinued. The former leader of the Bukkit project, he was hired by Mojang to work on Minecraft itself. In October of 2013, he left to pursue other interests, but continued his role in the Bukkit project. Then in a surprise forum post in August of 2014, he announced that the Bukkit project would be discontinued. He cited Mojang’s unpopular changes to the EULA and poor support from Mojang in aiding development as contributing factors.

As the Internet collectively freaked out, Mojang employees Jens “Jeb_” Bergensten and Nathan “Dinnerbone” Adams posted to Twitter, stating that the project wasn’t “his to discontinue” and that Dinnerbone would personally update Bukkit to support Minecraft 1.8.

This is when it came out that Mojang had secretly acquired Bukkit, which EvilSeph confirmed. This didn’t sit well with the active developers of Bukkit…

The DMCA

Enter Wesley “Wolverness” Wolfe, one of the most prolific contributors to the Bukkit project. Mr. Wolfe had been contributing to Bukkit since 2012 and his code was all over the Bukkit source, encompassing some very critical functionality. In short: his contributions were inextricable, comprising a very large chunk of Bukkit’s codebase.

Wolverness, from the indications given, didn’t like the fact that he’d been toiling away on what he thought was a community project, only to learn that he’d basically been doing free work for Mojang, a multi-million dollar corporation that made a select few very wealthy, while former colleagues were getting paid to work on the game.

So Wolverness filed a DMCA complaint, arguing that his contributed code was used in violation of the (GPL) license it was issued under.

The key thing to remember is that, unless there’s a prior agreement (e.g. in the case of an employment contract or a reassignment agreement) the copyright of any creative work is held by its author. So anybody who contributes code to a GPL project like Bukkit still retains the “ownership.” They’re just licensing it under irrevocable terms that must be followed by all else, or they are comitting copyright infringement under the law.

“Mojang has not authorized the inclusion of any of its proprietary Minecraft software (including its Minecraft Server software) within the Bukkit project to be included in or made subject to any GPL or LGPL license, or indeed any other open source license” — Vu Bui, Mojang’s Chief Operating Officer

With that statement in hand, it becomes clear that CraftBukkit—a binary server combining the GPL Bukkit API with the proprietary Minecraft code—was technically in violation of the GPL.

A core tenet of “copyleft” licenses like the GPL is the protection of the end user’s right to run, distribute and modify a piece of software. Under the GPL, it’s a violation of the license to:

  • Use GPL code in a proprietary program, as any interconnecting code linked against it must also carry the GPL as its license.

  • Distribute a compiled binary of a GPL application without the exact source code being available to download or distributed along with it. This includes derivative works. (e.g. Linksys was sued by the Free Software Foundation for using modified GPL software which they distributed in their routers for a time, without making the modified source code available.)

CraftBukkit broke both of those.

“The GNU General Public License does not permit incorporating your program into proprietary programs.” - The GNU Public License

After the notice was disseminated, the CraftBukkit downloads were pulled from the website and GitHub locked the relevant repositories. Mojang had to cease any activity related to CraftBukkit or face potential legal action.

And that was the end of Bukkit. With CraftBukkit dead, most of the developers left and work on the Bukkit API ceased…leaving everyone without a moddable Minecraft server compatible with the then-new version 1.8.

Spigot Carries the Torch

Amid the chaos and uncertainty, a familiar name stepped up and brought some order. Spigot, then known for for being a performance-tuned fork of Bukkit/CraftBukkit with various minor changes, released an updated version for Minecraft 1.8. It took awhile, but once again there was a way to run a Minecraft server with non-vanilla extensions. Since then, Spigot has been issuing security updates and keeping releases in pace with Mojang’s releases.

How do they do it, legally? Spigot doesn’t distribute a precompiled server jar like CraftBukkit. They have a program called BuildTools.jar that takes the GPL-licensed Spigot API (Spigot’s fork of the Bukkit API) and the decompiled Minecraft server code and compiles it all right there on your computer, automatically. So they never distribute Mojang’s software, and they never distribute GPL code compiled against proprietary code. This makes it a little harder to use, since you have to compile it yourself, and you technically aren’t allowed to distribute the compiled server jar to others yourself. But it’s not susceptible to a DMCA takedown, and it works.

What’s Next?

A year later and the future of Minecraft server plugins is still murky. There are two principle options:

  • Spigot: The clear leader, offering complete compatibility with Bukkit plugins and active development of a production-ready server. The Spigot team has also announced that they intend to, with the upcoming release of Minecraft 1.9, pick up working on the API where Bukkit left off. A few new additions are already planned, along with a shift to a more rapid approach to development that will mean more additions to the API. The only drawback is the BuildTools.jar situation, which makes it harder for novices to get started.

  • Sponge: The newcomer. Sponge is a brand new API with a different approach, and support from some big name developers. However, it’s in early phases still and lacks a lot of features and support. It’s reached a stage where it can be run on top of Forge (a vanilla server implementation of the Sponge API is still forthcoming) and some documentation is starting to appear, but it’s not going to overtake Bukkit any time soon.

Things are looking up for multiplayer Minecraft at last, but it’s hard to say which will win out in the end: Spigot, continuing Bukkits legacy, or Sponge.