Also, if anyone would like to try out a beta version of adv3Lite 1.6 as it is right now, they can download a zip file of it from Dropbox - adv3Lite16beta.zip - Simplify your life. Note that this is not yet an official release, and I shall probably be continuing to work it before the final release version appears, but I suspect it’s probably now quite close to the final version.
Excellent. Would you prefer people submit bug reports on GitHub, or still the usual way? What’s your policy on pull requests?
I believe adv3lite is licensed as “freeware” but that can mean a lot of things, and since it’s now (more readily) open source there should probably be a LICENSE.MD file detailing what we can/can’t do with the library. Commercial use? Derivative works? Attribution requirements? If someone’s contributed code is merged into the main project, does it become yours as the copyright holder? Can someone use portions of adv3lite in their own project and under what conditions? TADS3 itself addresses most of these questions but not adv3lite. The legal status of the project should be sorted out before it becomes a problem instead of after.
Agree with thomas: 45 days can be enough for a thorough ßtesting and improvement, so, no pressure intended, but I feel feasible having a Xmas 1.6 release…
Perhaps rather than trying to reinvent the wheel here, I could use something like this (which I just found online):
<one line to give the program’s name and a brief idea of what it does.>
Copyright (C)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License (<https://www.gnu.org/licenses/>) for more details.
Although “library” might fit the context better than “program” in this case. Does anyone have any other ideas.
I’d probably find it easiest if people reported them here, but if someone wants to have a go at reporting them on GitHub, I’ll see if I can work with that too.
I’m not sure I have a policy as such. I know how pull requests work in theory, but I’ve no experience of working with them in practice. I suspect I’d want to review them on a case by case basis.
The GPL (GNU General Public License) has one very important feature: anyone who incorporates your code into their own project (which includes importing or linking to the library) also needs to release their own code under the GPL.
The LGPL (GNU Lesser General Public License) makes it so anyone who modifies the library needs to release the modified version under the LGPL, but can link to it without putting their own program under the LGPL.
For interactive fiction things, I tend to use the MIT license, which basically says they need to keep your copyright notice on it (but can do whatever else they want), or the CC-BY license, which says you need to be attributed (but they can do anything else as long as they do that). This means, for example, that people can use my Inform extensions in their works and still release or not release their own code as they like. They just need to acknowledge my name in the final game, which Inform does by default.
You can always just do what Inform is doing and explicitly state that a compiled game made using the library is not considered to be a derivative work, so the library’s license doesn’t apply to it:
For the avoidance of doubt, the Author makes the further grant that users of the Package may make unlimited use of story files produced by the Package: such story files are not derivative works of Inform and do not inherit the Artistic License 2.0 as an obligation. (This further grant follows the practice of projects like bison , which also copy substantial code into their outputs.)
Personally I don’t think the LGPL would be a great choice. It requires you to release the source code of any changes you make to the library (which would probably include any instances where you modify any parts of the library within your code).
Also, for all intents and purposes TADS3 game files are statically linked, so the LGPL’s exceptions wouldn’t apply at all.
It’s probably best to keep this as straightforward as possible and create the minimum of restrictions on use. So, putting together the various suggestions I’ve received, I’m arriving at something like:
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
For the avoidance of doubt, the Author makes the further grant that users of the Package may make unlimited use of story files produced by the Package: such story files are not derivative works of adv3Lite and do not inherit the Artistic License 2.0 as an obligation.
Yep, that looks like the MIT license, which I think is a good choice. If you’re using that one, you don’t need the last paragraph at all: that paragraph is because Inform’s code isn’t under the MIT license.
Inform uses the Artistic License, which is pretty similar, but adds a few extra restrictions: basically, if I write my own version of Inform 6’s library, I have to make it clear that it’s not the standard one. So it adds that disclaimer to make it clear that replacing a library routine in my game doesn’t give me any special obligations.
The MIT license doesn’t have those extra restrictions, so the extra paragraph isn’t needed. Modifying the library as needed is fully allowed.
Looks good, but there’s one more consideration that has to be made. From the TADS 3 license:
If you create a new work based on the library, or you so extensively
modify the library that you create a predominately new work, you must
still include the original copyright notice, but you may make the
original copyright notice secondary to your own and you may modify
the original notice to indicate that your work is "based on the TADS
3 library." For example, you might change the copyright notice to
read:
My Extended Library, copyright 2008 by John Q. Author
Based on the TADS 3 Library, copyright 1997, 2012 by Michael J. Roberts.
I’m not 100% sure whether you built the library from scratch or used adv3 code in adv3lite, but if it’s the latter, you’ll need to add that secondary copyright notice. (It’s also ambiguous whether you are allowed to re-license the derived library in the first place, but considering Mike Roberts has disappeared off the face of the earth for nearly a decade, that probably isn’t an issue.)
If adv3lite is in fact built from scratch, you’re completely fine how it is.
Thanks for pointing that out. Adv3Lite in fact has quite a mixed ancestry. A few bits were taken from the adv3 library with no or minimal modification. Quite a bit was based on the Mercury library that Mike Roberts started but never finished, and then invited anyone who was interested to pick up and build on as they saw fit. He knew I was doing so and seems to have had at least some familiarity with adv3Lite. The rest of adv3Lire (probably the bulk of it) was built from scratch. So perhaps to be safe I might say something like this:
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
For the avoidance of doubt, the Author makes the further grant that users of the adv3Lite library may make unlimited use of story files produced by the adv3Lite library.
This is great news, Eric. I think having a central repo will make reporting bugs and fixes much easier.
I’ve posted five pull requests to the repo. I’ll have more in the future, but these were the low-hanging fruit. Feel free to do what you want with them. Some I think are uncontroversial, but a couple you might want to handle differently. I’m happy to answer questions about them too.
Thanks for these. I’ve accepted three of them but want to think a bit more about the other two. In particular, adding objNotWorn in a couple of places may be a good idea, but I’m not sure about removing objHeld ; I’ll need to go back and examine the relevant bits of code in their wider context.