(Edit: GameInput) License is extremely restrictive
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.
For GameInput specifically, there's also https://www.nuget.org/packages/Microsoft.GameInput/0.2303.22621.3038/License
- 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.
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.
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.