Licensing OXPs

Discussion and information relevant to creating special missions, new ships, skins etc.

Moderators: winston, another_commander

User avatar
Zbond-Zbond
---- E L I T E ----
---- E L I T E ----
Posts: 410
Joined: Mon Nov 24, 2008 3:49 am
Location: Healesville, Australia

Post by Zbond-Zbond »

Oh, yes, I see .. .. my only concern is that any bits (of code) I've copied (i.e. a planetinfo.plist which I've used as a sort of template but which has most elements deleted and 32 all new objects - "moons" - defined) does not infringe any current licence/wishes/whatever

I don't care what anyone does with my KBO's
User avatar
Thargoid
Thargoid
Thargoid
Posts: 5528
Joined: Thu Jun 12, 2008 6:55 pm

Post by Thargoid »

Zbond-Zbond wrote:
Oh, yes, I see .. .. my only concern is that any bits (of code) I've copied (i.e. a planetinfo.plist which I've used as a sort of template but which has most elements deleted and 32 all new objects - "moons" - defined) does not infringe any current licence/wishes/whatever

I don't care what anyone does with my KBO's
If you're just using it as a template (as in this entry goes here, that goes there, this needs also to be in to work etc) then that shouldn't be a problem at all (as in essence you're indirectly deriving your work from the wiki for example).

It's only when you start reproducing exact copies of code, or significant and recognisable functions of it that you need to start considering things.
User avatar
Zbond-Zbond
---- E L I T E ----
---- E L I T E ----
Posts: 410
Joined: Mon Nov 24, 2008 3:49 am
Location: Healesville, Australia

Post by Zbond-Zbond »

OK that sounds alright.

I take it, then, that there is no code that i can't see, containing stuff written by someone else, that I'd be failing to acknowledge.

Thanks.
User avatar
Commander McLane
---- E L I T E ----
---- E L I T E ----
Posts: 9520
Joined: Thu Dec 14, 2006 9:08 am
Location: a Hacker Outpost in a moderately remote area
Contact:

Post by Commander McLane »

And, by the way: as long as you are re-using code from Oolite itself (either Obj-C code from the, well, code; or XML/OpenStep/JS code from the contained (in Oolite.app/Resources/) plists and scripts), you're perfectly fine, because that's what Oolite's licence is all about: allowing you to re-use its code partly or in its entirety. The only thing you have to do is to distribute the resulting work under the same terms.

Note: as a general rule this is only valid for everything that lives within Oolite.app. OXPs may be distributed under differing licences, so if you want to re-use something from another person's OXP, you have to follow the licence terms of the OXP in question.
User avatar
Zbond-Zbond
---- E L I T E ----
---- E L I T E ----
Posts: 410
Joined: Mon Nov 24, 2008 3:49 am
Location: Healesville, Australia

Post by Zbond-Zbond »

So if I put the following statement:

This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

(which I've just copied from Ahruman's post 25.11.2009 topic: "Licensing OXP's - Discussion")

....in my ReadMe folder, then that will do?
User avatar
Kaks
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 3009
Joined: Mon Jan 21, 2008 11:41 pm
Location: The Big Smoke

Post by Kaks »

Yep.
Hey, free OXPs: farsun v1.05 & tty v0.5! :0)
User avatar
Smivs
Retired Assassin
Retired Assassin
Posts: 8408
Joined: Tue Feb 09, 2010 11:31 am
Location: Lost in space
Contact:

Re: Licensing OXPs

Post by Smivs »

I just found this article via Slashdot which proposes that Creative Commons drop the non-commercial and non-derivative elements of the Licences for the proposed CC4 licence.
Just thought it might be of interest.
Commander Smivs, the friendliest Gourd this side of Riedquat.
User avatar
Arexack_Heretic
Dangerous Subversive Element
Dangerous Subversive Element
Posts: 1876
Joined: Tue Jun 07, 2005 7:32 pm
Location: [%H] = Earth surface, Lattitude 52°10'58.19"N, longtitude 4°30'0.25"E.
Contact:

Re: Licensing OXPs

Post by Arexack_Heretic »

What happened to the CC sharealike licence?
Where all derative work can only be released under the same licence?

Sorry, I don't intend to read all the legalese in earlier posts. :oops:
Riding the Rocket!
User avatar
Commander McLane
---- E L I T E ----
---- E L I T E ----
Posts: 9520
Joined: Thu Dec 14, 2006 9:08 am
Location: a Hacker Outpost in a moderately remote area
Contact:

Re: Licensing OXPs

Post by Commander McLane »

Arexack_Heretic wrote:
What happened to the CC sharealike licence?
Where all derative work can only be released under the same licence?
Nothing. It's still there.
Arexack_Heretic wrote:
Sorry, I don't intend to read all the legalese in earlier posts.
You only need to read the legalese on the CC website. And you don't even need to read the legalese, only the icons. :wink:
User avatar
tinker
Deadly
Deadly
Posts: 166
Joined: Tue Jul 22, 2008 7:45 am
Location: Sachsen

Re: Licensing OXPs

Post by tinker »

It is possible that Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) is a better option now, it has better International coverage than 3.0 http://creativecommons.org/licenses/by-sa/4.0/
Semper Dissimilis
User avatar
Smivs
Retired Assassin
Retired Assassin
Posts: 8408
Joined: Tue Feb 09, 2010 11:31 am
Location: Lost in space
Contact:

Re: Licensing OXPs

Post by Smivs »

Yes, you are correct. This has been mentioned here recently, and I notice some authors are already moving over to 4. I expect to do the same as I update my portfolio.
Commander Smivs, the friendliest Gourd this side of Riedquat.
User avatar
Lone_Wolf
---- E L I T E ----
---- E L I T E ----
Posts: 546
Joined: Wed Aug 08, 2007 10:59 pm
Location: Netherlands

Re: Licensing OXPs

Post by Lone_Wolf »

I am considering switching from 'CC by-nc-sa 3.0' to 'CC by-sa 4' .

For oxps i started , like shieldcycler , i am the original copyright holder, so re-licensing it should be ok.

However, i also maintain oxps started by other people, like the ettBeaconlauncher .

The original author put it under 'CC by-nc-sa 3.0' , and the "CC by-sa 4.0" misses the NC part.
Do you people think re-licensing this way is allowed ?
OS : Arch Linux 64-bit - rolling release

OXPs : My user page

Retired, reachable at [email protected]
User avatar
cim
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 4072
Joined: Fri Nov 11, 2011 6:19 pm

Re: Licensing OXPs

Post by cim »

Re-licensing your own OXPs is fine in general [1], though anyone who has a copy under the old CC license can continue to use that license for that copy.

https://creativecommons.org/compatiblelicenses says that moves which take out (or add) the NC part aren't allowed if SA is in, but you can increase the version number. So you could move them from CC BY-NC-SA 3 to CC BY-NC-SA 4, but not to CC BY-SA 4 (unless the original author agreed to re-license, of course)

[1] Assuming in this case you've not incorporated anyone else's work into it since you created it, which makes things a bit more complicated.
User avatar
Lone_Wolf
---- E L I T E ----
---- E L I T E ----
Posts: 546
Joined: Wed Aug 08, 2007 10:59 pm
Location: Netherlands

Re: Licensing OXPs

Post by Lone_Wolf »

Thank you for the answer cim, that makes the situation much clearer.
OS : Arch Linux 64-bit - rolling release

OXPs : My user page

Retired, reachable at [email protected]
User avatar
Milo
---- E L I T E ----
---- E L I T E ----
Posts: 462
Joined: Mon Sep 17, 2018 5:01 pm

Re: Licensing OXPs

Post by Milo »

I want to add Priority AI scripts derived from Oolite Priority AI core scripts (such as oolite-missileAI.js) to Armoury OXP, which is licensed under CC-BY-NC-SA 3.0. Priority AI scripts are licensed under GPL v2 or later. CC-BY-NC-SA 3.0 and GPL v2 are incompatible.

CC-BY-NC-SA 4.0 is one-way compatible with GPL v3 (which is "or later").

CC-BY-NC-SA 3.0 can be upgraded to 4.0, but the copyright holder(s) need to agree (Thargoid gave special permission in his adoption thread for anyone to take over his work and said that supersedes the license, which I think means that he is giving adopters of his work a proxy to act on his behalf with respect to the copyright, so I could in theory upgrade the license to CC-BY-NC-SA 4.0 in this particular case).

What is the community's view on this? Does including Priority AI scripts in OXPs mean that those OXPs must be released under GPL licenses? Can Priority AI be provided to OXP authors under a different, CC-BY-NC-SA 3.0 compatible license? Does transformative, creative, non-commercial, derivative use of Priority AI in the context of creating an expansion pack (which can be seen as a form of comment/criticism) represent fair use?

As a specific example, here's a script I want to include in the OXP:

Code: Select all

// Armoury OXP Field Missile AI adapted from oolite-missileAI.js
// Licensed under CC-BY-NC-SA 3.0 with clauses - see readme
// Derived from a work licensed under GNU GPL v2 (or later) as indicated below.
/*

missileAI.js

Priority-based AI for missiles

Oolite
Copyright © 2004-2013 Giles C Williams and contributors

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 2
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 for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA.

*/

"use strict";

this.name = "Armoury Field Missile AI";

this.aiStarted = function() {
	var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);

	/* This is probably too effective for standard missile AI, but
	 * might be worth setting separately on ships that use missile
	 * swarms as their main weapon. It makes the missiles avoid each
	 * other a bit, so that the detonation of the first missile won't
	 * destroy the remainder. */
	// ai.setParameter("oolite_flag_autoSpreadMissiles",true);

	/* Launch correction when fired at target in aft arc */ 
	if (this.ship.target && this.ship.target.position.subtract(this.ship.position).direction().dot(this.ship.vectorForward) < -0.8)
	{
		this.oolite_priorityai.setParameter("oolite_flag_launchAdjustMissile",true);
	}

	// prevent deceleration on launch
	this.ship.desiredSpeed = this.ship.maxSpeed;

	ai.setPriorities([
		{
			condition: ai.conditionMissileOutOfFuel, // The missile has traveled beyond the maximum missile range. The default is 30km, but this may be overridden by the oolite_missile_range parameter in shipdata script info.
			behaviour: ai.behaviourMissileSelfDestruct // Destroys the missile without detonating the payload.
		},
		{
			preconfiguration: ai.configurationCheckScanner, // Scans the missile's scanner range, placing a list of detected targets into the "oolite_scanResults" parameter. This is generally called in a preconfiguration before the first use of a conditionScannerContains... condition in the priority list.  If the scanner is particularly full, the list will not contain all visible objects. The current scan limit is 16.
			condition: ai.conditionScannerContainsUnspreadMissile, // The scan contains a missile which has the same target and owner as this missile, but is closer to the target and within 500 metres of this missile. This is mainly used for "smart" missiles to ensure that impact times for a salvo are spread out.
			configuration: ai.configurationMissileAdjustSpread, // This function sets an intermediate destination for "smart" missiles which are adjusting their flight path to spread out a salvo's impacts on target.
			// This configuration sets a destination, a desired range and a desired speed suitable for use with behaviourApproachDestination. Unless otherwise stated, cruiseSpeed (80%) will be used as the desired speed.
			behaviour: ai.behaviourApproachDestination, // Travels from the current position to within desiredRange of destination, avoiding obstacles on the way.
			reconsider: 2
		},
		{
			condition: ai.conditionMissileNeedsLaunchEvasion, // This function checks if the oolite_flag_launchAdjustMissile parameter is set to a non-null value, and returns true if so.
			configuration: ai.configurationMissileAdjustLaunch, // This function causes the missile to dive sharply. The intended use is in conjunction with conditionMissileNeedsLaunchEvasion to avoid collisions with the launching ship.
			// This configuration sets a destination, a desired range and a desired speed suitable for use with behaviourApproachDestination. Unless otherwise stated, cruiseSpeed (80%) will be used as the desired speed.
			behaviour: ai.behaviourApproachDestination, // Travels from the current position to within desiredRange of destination, avoiding obstacles on the way.
			reconsider: 2
		},
		{
			condition: ai.conditionHasTarget, // The missile's target is not null.
			behaviour: ai.behaviourMissileInterceptTarget, // Close to the desired missile range (default 25m, or specified by the oolite_missile_proximity key in script info), detonating when reached.
			reconsider: 5
		},
		/* If target cloaks, go to last known location */
		{
			condition: ai.conditionHasInterceptCoordinates, // The missile has intercept coordinates set in the parameter "oolite_interceptCoordinates". These are used by missiles to home in on a last-known location if the target cloaks.
			behaviour: ai.behaviourMissileInterceptCoordinates, // Close to the desired missile range (default 25m, or specified by the oolite_missile_proximity key in script info), detonating when reached. The coordinates to close in on are specified in the "oolite_interceptCoordinates". This is used to track missile targets which cloak.
			reconsider: 1
		},
		/* Target lost. Self-destruct */
		{
			behaviour: ai.behaviourMissileSelfDestruct // Destroys the missile without detonating the payload.
		}
	]);
}

/* ECM response function, which must be set in shipdata script_info as oolite_missile_ecmResponse = "_ecmMissileResponse"; */
this._ecmMissileResponse = function()
{
	switch (1 + Math.floor(Math.random() * 20)) // roll d20 (1 - 20)
	{
		case 1: // 5% chance spawn mines around target position (or around missile location, if target lost) and detonate missile
			log("fieldMissile launched by " + this.ship.displayName + " responding to ECM by throwing mines around target and detonating");
			
			this.ship.AIScript._dropMines();
			
			this.ship.AIScript.shipAchievedDesiredRange(); // Detonate the missile and damage nearby ships (adjust with script_info oolite_missile_blastPower, oolite_missile_blastRadius, oolite_missile_blastShaping)
			return;
		case 2: // 5% chance brief tumble, then explode (no damage)
			log("fieldMissile launched by " + this.ship.displayName + " responding to ECM by tumbling and exploding (no damage)");
			this.oolite_priorityai.behaviourTumble(); // Start tumbling. Unlike most behaviours, this one does not include the standard responses, so you will need to manually request a reconsideration of priorities if one is needed.
			this.oolite_priorityai.setPriorities([ // replace the priorities list from aiStarted with new priorities: self-destruct only
				/* Self-destruct. */
				{
					behaviour: ai.behaviourMissileSelfDestruct // Destroys the missile without detonating the payload.
				}
			], 0.25 + Math.random() * 1.50); // delay for 0.25 to (almost) 1.50 seconds [setPriorities implicitly triggers a reconsideration of priorities]
			return;
		case 3: // 5% chance scatter mines around missile location, brief tumble, then explode (no damage)
			log("fieldMissile launched by " + this.ship.displayName + " responding to ECM by scattering mines, tumbling and exploding (no damage)");
			
			this.ship.AIScript._scatterMines();
			
			this.oolite_priorityai.behaviourTumble(); // Start tumbling. Unlike most behaviours, this one does not include the standard responses, so you will need to manually request a reconsideration of priorities if one is needed.
			this.oolite_priorityai.setPriorities([ // replace the priorities list from aiStarted with new priorities: self-destruct only
				/* Self-destruct. */
				{
					behaviour: ai.behaviourMissileSelfDestruct // Destroys the missile without detonating the payload.
				}
			], 0.25 + Math.random() * 1.50); // delay for 0.25 to (almost) 1.50 seconds [setPriorities implicitly triggers a reconsideration of priorities]
			return;
		default: // 85% chance no effect
			return;
	}
}

this._dropMines = function () {
	if (this.ship.target && this.ship.target.isValid && this.ship.position.distanceTo(this.ship.target.position) < 500) // if the missile has a valid target within 0.5km, spawn mines around the target
	{
		var mineCount = Math.ceil(Math.random() * 11) + 19; // 20-30 mines to be thrown around target position (250m radius)
		system.addShips("armoury_fieldMine", mineCount, this.ship.target.position, 250);
	}
	else // otherwise just scatter mines wherever the missile is now
	{
		this._scatterMines();
	}
}

this._scatterMines = function () {
	var mineCount = Math.ceil(Math.random() * 11) + 19; // 20-30 mines to be thrown around missile position (250m radius)
	system.addShips("armoury_fieldMine", mineCount, this.ship.position, 250);
}
Post Reply