GDK icon indicating copy to clipboard operation
GDK copied to clipboard

(Edit: GameInput) License is extremely restrictive

Open fredemmott opened this issue 1 year ago • 3 comments

Per https://learn.microsoft.com/en-us/gaming/gdk/_content/gc/input/overviews/input-overview :

GameInput is the recommended API for all new code, regardless of the target platform

If this is Microsoft's goal, the license (https://github.com/microsoft/GDK/blob/Main/LICENSE-EN-US.MD) is unsuitable - some highlights:

(i) “Microsoft Windows Platform” means personal computers or other devices running Windows OS where a Microsoft Windows Title can run and be distributed to customers by Microsoft, its Affiliates and/or a Licensed Publisher. (j) “Microsoft Windows Title” means a software product intended to run on the Microsoft Windows Platform and be distributed to customers by Microsoft, its Affiliates and/or a Licensed Publisher.

. Licensee shall be permitted to use the GDK solely to develop and test such Microsoft Windows Titles for the Microsoft Windows Platform.

In particular, this appears to mean the GDK is unusable by:

  • libraries/middleware
  • any software that doesn't wish to be extremely tightly coupled to Microsoft-approved distribution methods. For example, I can not use it in anything I wish to distribute via Github, Steam, or my own website

(1) Use the GDK internally only and solely for the Purpose

This - along with several other uses of the word 'internal' - appear to additionally ban any open source software - regardless of license - from using the GDK.

fredemmott avatar Jul 22 '24 17:07 fredemmott

For GameInput specifically, there's also https://www.nuget.org/packages/Microsoft.GameInput/0.2303.22621.3038/License

  1. b) ii-ii) are likely problematic for open source software under most common licenses. 2) c) ii) seems to ban use in any software under a GPL-like license, or that uses any other software under a GPL-like software.

fredemmott avatar Jul 22 '24 17:07 fredemmott

Specifically for GameInput, this appears to partially be a documentation issue: while all the documentation and repositories point either to this repository or nuget, GameInput.h is included in the Windows SDK v10.0.26100.0 , where it appears to be under significantly less restrictive terms than either this repository or the nuget package

This does however also require the DLL, which is not part of the Windows SDK. This appears to be included with some versions of Windows, but the version requirements do not appear to be documented anywhere, so using the Windows SDK is not currently practical.

fredemmott avatar Jul 22 '24 17:07 fredemmott

GameInput v2.0 has a slightly different license, but is still probably unsuitable for use by open source, freeware, or low-margin software due to similar license terms in the same sections:

https://www.nuget.org/packages/Microsoft.GameInput/2.0.26100.5312/License

2 b:

ii. require distributors and external end users to agree to terms that protect it and Microsoft at least as much as this agreement; and

iii. indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified distributable code.

So, using GameInput requires:

  • the software has a custom EULA that indemnifies Microsoft - not any of the usual open source licenses
  • the developer can justify the cost of getting an attorney to help draft such a EULA

This rules out GameInput for most open source, freeware, hobbyist, or other low-margin products.

3 c:

ii. modify or distribute the source code of any distributable code so that any part of it becomes subject to any license that requires that the distributable code, any other part of the software, or any of Microsoft's other intellectual property be disclosed or distributed in source code form, or that others have the right to modify it.

This probably makes GameInput unusable for anything under the GPL or similar licenses, except if you do not need to redistribute it, e.g. if both:

  • the version of the game input runtime included with windows is new enough for all versions of windows you need to care about
  • the system version of the runtime has not been modified by other badly behaved software/installers.

The second in particular is a real-world problem already. If distributing, a distributed-by-the-app DLL from the nuget package is clearly not 'system software', this is clearly not 'system software', so license restrictions on dependencies likely apply.

fredemmott avatar Jul 11 '25 15:07 fredemmott