Today, I will be looking into the reasons for which I advocate so strongly for open source modding.
Admittedly, though, I went too far in the recent days. Some people have been annoyed due to my over-the-top mentioning of the same subject over and over, and rightfully so. It's one of those disadvantages of mine: sometimes, I'm too vocal. Sorry to those who found my behaviour annoying.
Let's see the advantages that an open source mod has:
- Pull requests. Pull requests are, hands-down, the best thing about open-source mods. If someone finds a feature missing in your mod, they don't need to bother the developer to add it or write hacky workarounds in the form of coremods; they can just write it themselves and give it to the developer, saying "Hey! I made this so we can both benefit!". This lets the developer focus on other stuff that he finds more important. Look, for instance, at the Tinker's mods. Tinker's Construct has received 615 pull requests. They included everything - from mod compatibility, through bugfixes and API changes other people needed, to many, many translations. This let people such as mDiyo focus on actually adding new features to the mod, while the community handled things they care about more.
- An easy way out from abandonment. If someone abandons a closed-source mod, it's over. Nobody can legally take it up without the explicit permission of the developer, which sometimes is not given at all (see RedPower 2, whose author went MIA, or LegendGear, whose author just didn't give the permission). This is very bad for players because they need to figure out a solution of moving over things from the mod if they ever want to update their Minecraft version without losing worlds (for instance, Tekkify had a Bukkit plugin written to convert all RP2 microblocks to Immibis' microblocks back in the early 1.5.2 days). This is especially a problem for the type of servers that are very popular amongst vanilla players: long-term servers which don't change their map for many months, sometimes even 2-3 years. Some servers still run the very same map they had in Minecraft Alpha! It's a very interesting server type, but it can't work if mods are abandoned every few Minecraft versions. (I'd like to use this space that there is a notable mod which is not fully open-source, yet gives explicit permissions to port over the mod once the author disappears: Ex Nihilio. That is a very nice move by Erasmus and I greatly appreciate it, especially as his mod is now core to almost every skyblock map out there.)
- More freedom for developers, players and administrators. If someone doesn't like a design direction in an open-source mod, they have the right of veto; the right to say "no, I'd rather have this mod go in a different direction.". This is what happened with Project: Red (it decided to take RedLogic, emulate RP2's crafting system and world generation further, and eventually get ported to Forge MultiPart by ChickenBones). This is what almost happened with BuildCraft (there's an unfinished, unofficial port of the pre-CovertJaguar BuildCraft to either 1.4.x or 1.5.x going around, if I recall correctly). Look at IndustrialCraft 2, for instance. A great amount of players are not happy with Player's changes, adding microcrafting and heightened difficulty to IC2-exp. I'm sure they would be far happier if a legitimate way existed to roll the changes back (we technically have IC2 Classic, but it's in a legal gray area as it abuses a legal rule formulated in different times - specifically, the right to publish modified versions of the IC2 JAR, which was made in mind with the lack of coremods in Minecraft 1.1/1.2.3 days). Some people argue that Algo made bad design decisions - with forking, they could just go and add config options to restore them to their liking. If a server administrator finds that the mod doesn't work with MCPC+, they can go and fix it themselves instead of whining about incompatibilities. I could go on and on about this.
- Providing learning material to new modders. Open-source code can be freely dissected and analyzed. This lets new modders look at the source code of mature mods and see how certain things are done properly, which is very important with the scarce documentation that exists for Mojang's messy Minecraft "APIs". I have myself studied the code of BuildCraft and a few other mods quite a few times to learn things. This is a very good thing for those of us who are just starting out.
Okay, it's time to be a bit less one-sided. There is one disadvantage to an open-source mod that a closed-source mod does not have:
- Control. The modding community, as it is often full of people who don't read instructions or READMEs, doesn't always understand that two similar mods are not identical, often whining about things not working like they should. Being closed lets a mod author keep full control of their vision and version of the mod, clearing off all the confusion. It also makes sure that the future of your mod can go entirely on your own decisions and not on the decisions of other people. Going open doesn't mean that you will lose all control, though. I'll get back to it in a moment.
There are a few misconceptions and questions many people have about open mods, though. Let me clear some of them:
- If I make my mod open-source, everyone can steal my code and call it their own!
No. Every source code license has provisions in case to make sure that does not happen. From simple ones such as MIT (include the text of the license with the mod and every substantial portion of it) to advanced ones such as the GPL (all modified versions of the mod must be under the GPL, meaning you can just take the changes back as they cannot suddenly become closed). Going against the rules of the license would be identical to someone decompiling your mod and calling it their own, which, with Java, is very easy to do. Both are illegal. There, I bolded and italicized it. Illegal. (Unless you use a public domain license).
- If I make my mod open-source, someone will make a better version and I will lose control over it!
Not really. First of all, you need to have a higher self-esteem! I am sure you can make the best version of your own mod.
Second, that depends on the license. If you use MIT, anyone can do anything with your code as long as they give you credit by including the license. They can even make it closed. MIT is a very non-restrictive license and it gives a lot of freedom to others. The (L)GPL, on the other hand, forces you to keep the same license. What does that mean in practice? You can just take their changes back and put them into your own mod, integrating them with features you made yourself. That way, you still have the best version of the mod around.
Also, competition is healthy. Just look at late-90s Microsoft.
- Okay, so you told me so many things about licensing... How do I pick a proper license?
Here's a very simple explanation, in which the toy is the program in question and borrowing means modifying it in some way; creating a fork or making a patch.
And if that didn't explain anything, here is a very shortened version of what each license means:
- GNU GPL - it is one of the more complex licenses, created by the GNU project to secure rights for their software. In addition to forcing everyone to release modified versions of your code under the same GPL license, it forbids you from using any code that is not GPL to link with it (in case someone would add all their changes to a separate, propiertary library). As such, it is legally unenforceable within the Minecraft community and should not be used.
- GNU LGPL - it is a variant of the GPL. It is mostly the same (lets everyone use, redistribute and modify the program, requires everyone to release their changes using the same LGPL license), but lets you link with libraries under a different license.
- MIT/BSD - it is one of the more permissive and short licenses. In general, you can do anything you want as long as a copy of the license is included with all source and binary copies of the software. That includes changing the license, but the license includes credit so they cannot just steal the mod. Some variants of the BSD license also include a clause that means your name or the name of the mod cannot be used to advertise forks; that is, the name has to be changed. This is known as "3-clause BSD".
- WTFPL - quoting the license, you just DO WHAT THE FUCK YOU WANT TO. That is, it's essentially public domain: anyone can do anything. While its legal enforceability is arguable, the FSF has approved it as a free software license.
There are also a few lesser known licenses you might want to look into:
- Boost - Boost has a license derived from the MIT license, with one significant diference: the license does not need to be distributed with unmodified (no source code changes) binary versions of the program. This takes some of the packaging effort off from the developer.
- Apache License - It lets you modify and redistribute the code and even change the license as long as you include the license and put a notice in every modified file stating that you modified it.
There also was a Minecraft-specific license pioneered by BuildCraft, the MMPL (Minecraft Mod Public License). As pointed out by deathcap, though, it is NOT free software:
The Minecraft Mod Public License contains the following provision:
"user must own a legally acquired copy of Minecraft"
While this provision is already made by the Mojang Minecraft EULA, it stands in conflict with "use of the program however you wish" and Mojang's own public relations stance. (That's what you get for combining open-source licensing quirks with closed-source software. It's kind of a pain.)
I am not a lawyer, though, and I encourage you to go to tldrlegal.com to find the perfect license. Another good site to check out is choosealicense.com (thanks Dean from #computronics!)
(I advocate you either use the BSD or the LGPL license. The GPL is legally unenforceable in the case of Minecraft and the WTFPL is too scary to use in this community unless you're a real man.)
- Hey, mod ABC has source code on GitHub/BitBucket! Why do you call it closed-source if the source code is here?
The source code's availability is not what open source is about. It's about what you can do with it, and that's defined by a license file (by law, a lack of a license file is equal to all rights reserved). I personally believe that an open program should have those four rights:
- I can use the program,
- I can redistribute the program,
- I can modify the program,
- I can redistrbute modified copies of the program.
The Four Freedoms of the FSF, in essence. Some people prefer the Open Source Initiative's OSD (google it, if you wish). It is a bit more precise, but has some points unrelated to the program's freedom and related to the OSI donators' freedom.
I think this concludes what I wanted to say about FOSS modding for now. See you next time!
EDIT (11/05/14): Changed some minor details and added a small section on the MMPL.