Kicking the Bukkit: Anatomy of an open source meltdown
slideshare.net
slideshare.net
The talk seems to focus on license as the resolution - and it's an important point. However important licenses are, they aren't as important as not linking third-party closed-source binaries in your "FOSS" project.
Just seems as a much safer way to go about modifying software that restricts all redistribution.
We are, however, very careful that all submissions are accepted under the original author's name. We rarely accept patches of the form "I took someone else's half-complete patch and fixed it up." In addition, all submissions are assumed to be released under the project's license. If the original submitter doesn't have permission to release their submission under that license, then the violated party should take that up with them.
It looks like the lesson from Bukkit is that if you use GPL and there's some problem, then a disgruntlend copyright holder (of GPL-licensed code) can get your entire project into trouble.
The project of course was wrong to include or link to proprietary code. But had they used a free license for their own stuff, Wolfe wouldn't have had a claim to make.
It gave a developer the power to take down a project violating the GPL. That's probably a quite good power for them to have. I don't see how that's a problem for anyone except if you currently are or wish you could violate the terms of the GPL.
Having an agreement isn't a no-cost option, it adds another barrier to contribution to a project.
You change from license A to license B to your project without asking permission of those that contributed under license A. Some party uses the code under B and violates B, but not A. Their attorney argues that you didn't have permission to re-license from all contributors, so the switch wasn't possible. You try to contact all developers that committed under A. Sadly, one of them died a year ago. To add a problem, that person lived in a legislation where you cannot give away authorship.
Suddenly, you are in a legal mess. You can choose to follow through or drop the case.
coldpie seemed to assume s/he meant "any changes", not "any changes to the license"
Aside from the few token counter examples (most of which presuppose the FSF or poison pill clauses), there is almost no possible way to exercise that power in a way that benefits the project's contributors or users.
It's also always contained the Do Not Distribute term. Bukkit has always been in the wrong here. It's not the EULA clarification that did that.
The motivation was many faceted, but the basic impetus for most people in the server mod world is that the vanilla server was so inadequate for running a server.
I got involved with a small server, and (quickly! that was a mistake haha) started to help sysadmin the box. I got us on to hMod, which was terrible in many ways but provided a vision for the future - a central, modded server, with plugin points that proffered server admins incredible flexibility configuring their servers.
hMod was run by a single (apparently inexperienced) dev, and the community grew too quickly for him so bukkit was formed.
By this point I had started contributing to hMod, but realised it was a sinking ship and switched my efforts to bukkit. It started as trying to build plugins for our server, but as I started getting commits into the core project it quickly ramped up into full on team participation.
The dev team was really really fun to be a part of. I was on mumble and irc all day talking to the other devs, and would often spend over 8 hours working on code or talking about plans. Upgrades were hectic, and everyone pulled long shifts when they happened.
As time went on and the community grew it became more like a real job, and momentum kept me going for a long time. Eventually I actually got a real job, and my participation waned.
I can't speak for others, but my motivation seemed to be a spectrum that started with scratching an itch end ended with the satisfaction of contributing to a community; the knowledge that your code is being used by thousands, if not millions, of people.
What's the motivation for running a server? and how do people using the game decide which server to use and why? I'm really stuck at the basics.
You can either join a server someone else is running, or you can set up your own server.
The Minecraft software had severe limitations around things like "griefing protection" (preventing people causing havoc); charging for stuff (which is one way servers used to raise funds); or minigames.
Larger servers have complex mods that add tremendous functionality to the game. Some may have roleplaying mods, where you can find a role (blacksmith, lumberjack, etc) and participate in the economy. Others may set up a world just for pure creation, a way to make sculptures.
There's a lot Minecraft has been extended to, so there are many reasons you may have to set up a server.
Looking back, I suppose it was a bit odd that there was a group of people, most of them quite a bit older than me, who spent large amounts of time working on this project.
From the bits and pieces of personal information that I gathered about my team members, many of them, including the team leader, had 'proper jobs'. One of them actually worked as a lead level designer on a triple-A game.
I got the impression that they spent all this time on the modification because they loved building games, they loved not being constrained by budgets or non-passion related factors, they wanted to build up a portfolio to find a way into the gaming industry, or 'all of the above'. And it worked for some of them.
I'm not sure if this is the case for a majority of 'modders', but I suspect the reasons I mentioned are quite common. If you love developing things, a game is a really great thing to build. It's, ultimately, purely about fun and joy. It doesn't have to be useful. That might be enough for those who work on (boring) useful stuff during the day.
Which, of course, is why modders should be encouraged to use platforms where you retain greater control of the project, which is why I'm a fan of OSS gaming.
People can and do build things without dollar signs in their eyes.
You can have it free. And it's ok. But having success is possible too (recheck my examples).
You can refuse to pay. But, if you want support : $$$ for value++. (you just buy the brand)
See this for more info https://www.gnu.org/philosophy/selling.en.html
There's a great difference between selling access to your software and selling your project itself, i.e. the copyright assigned to your code and/or logos, trademarks, etc.
I regularly see comments on one project or another pointing to a XYZ license as the reason a project failed / has few contributors as if the 'problem' with that particular license is entirely self-evident.
It's awfully confusing as I'm sure I've seen polar opposite opinions on every major license under the sun, each entirely bereft of context.
Okay it contains the Minecraft server binary, remove it. If it's the issue then it's no longer an issue if it's the user that download it themselves (I'm pretty sure it was working like that in the past).
Is it the signatures of the methods from the official server? Is it really an issue? Isn't all GPL project full of methods signature and call to windows binaries?
All that said I'd be very interested to see this play out in court, not to imply that it will get there. I feel strongly that the developer forfeit his control of the code on contributing it to the project. I can't say for sure though, I'm not a lawyer.
There may have been a way to achieve that (and we talked about a few of them quite a few times) but it was never as simple as just 'linking to the binary'.
The Bukkit project was actually composed of a few different pieces, designed to make maintenance of the mod manageable across upgrades of the game. This architectural change was one of the main reasons Bukkit split off from hMod in the first place.
There were 4 main codebases in play; the Bukkit API, the CraftBukkit server mod, the reverse-engineering-tools project, and various plugins supplied by the Project or for use as examples.
I go into more detail below, but the reason why just hooking into the binary was so hard is two fold, and meant that CraftBukkit could never really just be a server wrapper.
1. Methods, method calls, and program logic needed to be modified directly to enable things like turning off fire on the server. Anytime the game tried to start a fire CraftBukkit had to fire an event, and allow that event to be cancelled. So CraftBukkit had to be a mod in the purest sense.
2. Obfuscation meant that modified files had to be translated every single upgrade. To reduce this burden large swathes of the code was de-obfuscated, so that the upgrade process was de-obfuscate core code -> translate any mod changes that used obfuscated code -> apply mod changes on top of the core code -> fix the thousands of bugs we missed in the translate step. So much of the mod was on top of this de-obfuscated version of the server that any distribution would require distributing large amounts of de-obfuscated code - there was no other source for this.
So there may have been ways to avoid shipping Mojang code, but it was always going to be a hard slog. When the core team started conversations with Mojang it always seemed like there was never a pressing need, and as I understand it Mojang still hasn't shut down Bukkit. It was a lone developer asserting a DMCA take down.
I would be very interested to know if there is a better architecture that solves these problems, some more of which I have listed out below.
==== More Details ====
The Bukkit API consisted of JAVA interfaces, providing a stable(ish) API against which plugin authors could build plugins, and some glue code to manage the plugins. This had no code from Mojang in it.
The various 'official' plugins were coded against the API, and similarly had no Mojang code in it.
The reverse-engineering-tools project was used to, perhaps unsurprisingly, reverse engineer the official server. A lot of the code had been de-obfuscated, but that de-obfuscation was usually a painstaking task performed by hand. These tools made that process much easier. It included a decompiled version of the official server code, but the project was private and wasn't distributed. Not sure how that impacts everything.
The CraftBukkit server mod of course DID contain Mojang code, the modded server. It's job was to implement the Bukkit API.
The API was almost entirely event based. Plugins would hook on certain events, and the server would wait for the plugins to process the events before continuing with whatever it was doing.
Someone tries to set a house on fire -> LightFireEvent is fired -> NoFire plugin hooks the event -> NoFire plugin cancels the event -> in game no fire is lit.
In order to implement these events, entire code paths within the game need to be diverted, hooked in to, subverted, or replaced. There are lots of ways a fire might start, so we had events triggering when lava ignites a block next to it, and explosion sets some grass on fire, someone uses flint to light a tree, etc. Each one requires
* finding the obfuscated code path that implements the feature we want to hook
* de-obfuscating the code so it is clear(er) to see how to modify it correctly
* modifying the de-obfuscated code to introduce the hooking code, and implement the API
Every time there was an upgrade to the server we would have to map every modification made to the new obfuscated code base. So if CraftBukkit had modified or included a call to an obfuscated method (which happened often enough for it to be a pain) then those changes had to be mapped to the new method signatures of the upgraded server. c(wx, f, b, 23) might now be e(ww, f, b, 23) and translating that to a modified code base can be hell.
The Bukkit team took that process on itself, which is one of the reasons it was so successful. As long as the API points used don't change, a plugin will continue working as soon as CraftBukkit is upgraded.
I'll have to look in to forge, I haven't yet seen what they are doing, but it sounds interesting.
EDIT: the other aspect was the fact so much code was written against the de-obfuscated version of the code base. There's an argument that distributing that patch would also be distributing mojang code.
How much of the updating and deployment tasks could be done by a script on the user's computer/server? Decompile with MCP and pull in all the changes as patches, like the Craftbukkit github was when I saw it?
GPL on VLC for Iphone can work without changing IOS or something else licence.
Note : Microsoft for example hates GPL projects for no reasons... Just check their publishing agreement. It's why I prefer Google Play Store ^^.
Note for me : Abandon Apple and Microsoft products
Maybe it's just my idealist part, but isn't it a shame so many efforts (or much effort? not sure) in this world went to waste just because of blabla you can't distribute or blabla you cant build upon... This is digital millenium, wake up!
Granted, Mojang did make a lot of Money with Minecraft regardless but especially with open source projects building on other open source projects or especially non-profit projects in this case, this would be really problematic.
Developers don't need to wake up, they just need to put in the effort to chose the right license and make everybody who wants to contribute to their project agree with licensing their own code under said license.
If it weren't for projects that make better versions by building upon others' source, I wouldn't be here. Hopefully in the future someone will also find my code good enough to build something upon.
Just enforce GPL licence and you'r ok ;-)
Just ask Software Freedom Law Center and your fine. (every body can do this move; like you)
For example, it works against Cisco : http://en.wikipedia.org/wiki/Free_Software_Foundation_v._Cis...