AGPLv3 Ext/Plugin on the way for SourceMod
Disclaimer
I’ll start with the following disclaimer: I am not a lawyer, nor am I pretending to be one. The following post does not constitute, simulate, emulate, or in any way (including the aforementioned) pretend to be legal advice. This is simply my understanding of how my licencing choice affects users.
Backstory
I’m going to release a stable and fast modification for a couple of games … I’m going to release it under the AGPLv3, bearing in mind that I can run it on my own server under GPLv3, thus not sharing my own modifications until stable (or until I feel like it).
I’m told that such an action is open hypocrisy — I’m forcing others to share with others, but keeping my own changesets. Bear in mind that if I take an AGPLv3 changeset into my ‘core’ branch, that I can no longer run my own server’s extension under GPLv3, and will then need to share my own code. Of course, if the idea/notion/whatever already exists, or I have test code which is under the GPL, or may obtain code that is, I don’t need to share it — only if the person who owns the code won’t contribute it as GPLv3, which they can’t, because it needs to be AGPLv3.
What does this mean?
This means that by writing my extension, the include file, and the sample plugin under the AGPLv3 all users of the extension will be required to share their source with anyone who can access the server in such a manner that the extension is relevant to the user’s interactions. This means that if, by way of example, you cannot get past the login page (i.e. cannot pass the ‘password’ stage), you do not have the right to request the plugin source. There are ways around this (as usual), but it’s really a case by case basis.
If you want to release a derivative or extension plugin from my core, or any other derivation of it, you must release it as AGPLv3. There are no exceptions. The only person who can release a GPLv3 version (i.e. not share the source with users on request) is me, and only provided that I do not accept contributions on the AGPLv3 code.
To resolve any potential conflicts, I will maintain my ‘core’ branch, which is solely my work. I will also maintain a ‘community’ branch, on which I will accept contributions from people in the community. My ‘core’ branch is open to suggestsions and requests (which, unless coded by someone else, maintains my right to use it in GPLv3).
Where is your server?
Simply put, I don’t have one, and honestly have no intention of running one. However, if I do run one (say, temporarily off a VPS or a dedicated server I maintain), I want to have the ability to playtest potential features which will be applied to the core (and probably the community version) without having to release them.
Why should I trust you?
I don’t “mod” games these days. I write “meta-mods”, or modifications which support other modifications. Examples of this are the CTX natives I’ve supplied for Counter-Strike Source and Team Fortress 2, and less ‘magically’ Watch That Friendly Fire (which I haven’t really maintained, or fully released), and my plugin for toggling capture points. You might note that none of them are actual gameplay changes (except maybe the capture point breaker), and are designed (more or less) to support your own gameplay modifications. I have no interest in running a server and trying to ‘make profit out of ads on my MOTD’. With all of that said, even if I change my mind and want to run a server and try to ‘monetise’ it (as it were), I would be bound by the licence I chose, such that I could not just take AGPLv3 patches into my own tree.
AGPLv3 Fears
Neither the ‘configuration’ file, nor the ‘offset’ file are bound by AGPLv3 because they do not contain any copyrightable data. Furthermore, if you’re worried, they are attached via SourceMod interfaces, which remain GPLv3.
Is there a way around this so I don’t have to share my modifications to your code?
Only if you can convince me that you should have a GPLv3 version and that others shouldn’t. Good luck I’m unlikely to be swayed.
Why did you choose AGPLv3?
I’m working on a gamemode extension/modification for free. As such, I’m giving this extension and attached plugin (and the availability to edit both) to the community, for free. As such I’d like community members to actually give back, share ideas, and adapt the gameplay, creating a nice, neat, sensible experience for the users of their servers.
But can’t you just violate that and not share it?
Sure. And as the author of the code I could just use the GPLv3 version of my code (as I have the right to change the licence on my work) and adapt and run awesome versions on my own server.
That’s not fair!
Well, considering you’re getting several days worth of work, a re-vitalised version of my old Eventscripts plugin, which will (with any luck) run quickly, cleanly, and neatly, for free, I don’t see how. For anyone who wants to complain that I can use my own code privately, maybe you should write your own GPLv3 version, being certain not to copy my code (you’re free to use GPLv3 code and roll that in, because that’s how the licence works, but you can’t roll in AGPLv3 code unless you’re licencing under AGPLv3).
That’s still not fair!
I hate to be the one to tell you this, but I have the right to not share my code at all, how about instead of whinging at me that I chose a licence that ensures you share, you be grateful?
What if I don’t modify the extension?
Just point users to the core or community repository (to be shared when released).
What if I modify the plugin?
It’s AGPLv3 because it is a derived work (derived from both SourceMod — GPLv3 — and my AGPLv3 extension to SourceMod). Because it is directly attached to my extension, and the include I provide is AGPLv3, no matter whether or not you replicate or rename the variables in the natives, you’re still bound by AGPLv3. In the same way, you’re expected to share your source.
How do I do that?
When I release both extension and ‘sample plugin’ (which is likely to be bare features for the initial release), I will be creating a thread for each. At which point you’ll have the choice of attaching the SourcePawn to a post on the plugin thread, and linking users there, or hosting it in a code repository (on something like Bitbucket or GitHub).
I hate the licence / I won’t use it if it’s AGPLv3 / I hate you / This isn’t fair!
Then don’t use it.
Will you hunt me down and take action if I violate your licence?
Yes. And I’m sure your service provider (be it your ISP, GSP, or other service provider) will want to stay away from violations.
Why?
I’m giving this, with the expectation that others will either use it, or adapt it. Either way, my expectation is that you will share, as I have with you.
But I don’t want to share my exclusive server modifications?!
Then follow the licence. If you’re using my extension, you are required to share the source with anyone who can access your server in a way that makes it known that the plugin and extension are there. If you use the unmodified version of the extension and the plugin, and want to add ‘extra features’, try to find a way separate to it that allows you to do what you need. For instance, if you want the ‘LoneWolf’ to have a specialised weapon rather than what I’m giving it, hook the respawn event then give it to the player on the RED or BLU team (depending on what I do) — just don’t touch the console variable or anything else built into the extension and plugin. That is, you can still modify things around it, but you can’t touch it. So if you want donors who are the LoneWolf to have extra health, you’re pretty stuffed unless you run another hook to override mine (unexpected behaviour alert!), but if you simply want it to look different, or to have icons for some people, you could always hook various other things, based on the team I’m using.
So you’re not making it impossible to add things external to this?
No. If you want to work on the ‘team by team’ basis to do things to the ‘LoneWolf’, you still can. Bearing in mind some things (like OnTakeDamage) are hooked, and so you may experience some strange behaviour, in which case you should probably write it into the extension.
Will you add ‘donor support mode’ to this, whatever this is?
It’s partially supported in what will be the initial release, but I will not be adding stupid things like ‘donors take less damage’ or ‘donors move faster’. There will be options to abuse part of the modification using standard plugin features (advancing user statistics) based on the fact that some people may need them to ‘reset’ players if they mess up a database command.
Will I support admin/donor abuse? No.
I hope that this is all relatively clear. My plan is not to hurt anyone, or to put anyone at a disadvantage. If you feel it’s unfair that I’m not sharing “the best” of my code, or that I’m allowed to maintain my own core to run on my own server, remember that various other authors (I’m looking at ‘voogru’) run private extensions and plugins), sharing some of the neat things, and others still don’t share at all. The only difference between my choice and their choice, is that I choose to share in the first place. The option to keep my code private is taken through my right to licence my code under different licences (my choices being limited to GPLv3 and AGPLv3, as I’m using GPLv3 code).
If you think that this is unfair, I’d like you to take a moment and consider that I have this extension working under MetaMod:Source, which would mean that I could release a crippled version for free, as a binary, and never give you the source. While I want people to have it, I basically do not want the community’s trust to be abused, so I am taking this road.
I hope you understand my choice, but given the amount of time spend researching various aspects of this (which is part of the reason the CTX modifications are available at all), I believe that this is the best choice.
-
swixel posted this