• Hey Guest! Ever feel like entering a Game Jam, but the time limit is always too much pressure? We get it... You lead a hectic life and dedicating 3 whole days to make a game just doesn't work for you! So, why not enter the GMC SLOW JAM? Take your time! Kick back and make your game over 4 months! Interested? Then just click here!

Distribution LGPL violation with Windows export of GameMaker?

Hi guys, I thought I'd let you know this, if you don't already, I just skimmed through the forums and found nothing of it, so here's the post I found on reddit (mod edit: post link):

I recently found an LGPL violation in games exported using Game Maker.
Specifically, the problem is that Game Maker is statically linking to OpenAL-Soft under platforms such as Windows.

OpenAL-Soft is licensed under the LGPL, so even though you can dynamically link to it, you cannot link to it statically without also open-sourcing your code, or providing some way to switch out the OpenAL-Soft library with another library.

To see that Game Maker statically links to OpenAL-Soft, you can download a demo of a Game Maker game here:

https://studio-thunderhorse.itch.io/flynn-son-of-crimson-demo

Note that no DLL for OpenAL-Soft is found, but if you look at the executable, it has strings such as
Code:
1.1 ALSOFT 1.12.854
OpenAL Soft
OpenAL Community
AL\Alc\alcConfig.c
OpenAL\Alc\ALu.c
OpenAL\OpenAL32\alThunk.c
OpenAL\Alc\ALc.c
AL lib: %s:%d:
OpenAL\Alc\dsound.c
OpenAL\Alc\null.c
These would only be included if the Game Maker runtime statically linked with OpenAL-Soft.
In January 2018, I contacted both YoYo and the developer behind OpenAL-Soft about this.

YoYo initially did reply and told me they were taking the appropriate actions. For a while now, there has been no response from them, so I assume I'm not going to get any further communication from them.

Some games that violate the license of OpenAL-Soft under Windows as a result of this:
- Undertale
- Hyper Light Drifter
- Many others, practically all games that use the Windows runtime.

I've disclosed this to all affected parties, and have waited about ½ year for some statement or resolution from YoYo. I think it's time to let the public know so they can take appropriate actions.

end of post

I thought I'd post this here because you may be interested in knowing, since you wouldn't find out from /r/gamemaker because the mods delete the threads related to it (??).
Cheers
 
Last edited by a moderator:

sylvain_l

Member
I recently found an LGPL violation in games exported using Game Maker.
if I believe wikipedia, openAL was LGPL (but is proprietary since 1.1)
1.1 ALSOFT 1.12.854
edit: oops the next line state its the community version not creative !!
that let me assume the version use is certainly the last one not the LGPL...
but there are fork like openal soft that seems to be still often used and LGPL.
its a bit confusing.
but we don't know which version yoyogame use, so it feels a bit alarming to claim a violation and to assume that it is the lgpl without valid proof.
 
Last edited:

Tsa05

Member
To see that Game Maker statically links to OpenAL-Soft, you can download a demo of a Game Maker game here:
An incredibly innovative way to drive downloads of a demo game! Well done indeed.


but if you look at the executable
Quick reminder RE your investigative endeavors:


As an additional side-note, I'd be curious to know what OpenAL is being used for. Providing us with several arbitrarily printed out lines that say OpenAL on them seems not entirely helpful in the area of not jumping to assumptions. GameMaker doesn't expressly seem to indicate use of OpenAL in its Licenses section:

And so, as Sylvain mentioned, it's presumptuous to decide that all games made in Game Maker (clever invocation of popular GM game names aside) are in violation of one of many possible implementations of a license.

If, however, the strings pasted out of context by the OP are in something relevant, then it would be useful for YYG to clarify. And so begins the annoying trend of arbitrary and out-of-context assumptions and accusations followed by demands for official explanations ><
 

rIKmAN

Member
An incredibly innovative way to drive downloads of a demo game! Well done indeed.
Quick reminder RE your investigative endeavors
the strings pasted out of context by the OP
Just for clarity, as you seem to have misread the post or skimmed over the first line.

The OP isn't the one claiming the LGPL violation, he is reposting from a thread on reddit that someone else posted making the claims:
https://www.reddit.com/r/gamedev/comments/8l23h6/lgpl_violation_in_games_exported_with_game_maker/
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
I have replied to that Reddit post earlier today - thread author did not verify whether the issue is fixed before posting, and it is fixed in all GM versions released after February 2018 or so - the audio system had been rewritten to use a custom backend instead of OpenAL-Soft.
 

rIKmAN

Member
I have replied to that Reddit post earlier today - thread author did not verify whether the issue is fixed before posting, and it is fixed in all GM versions released after February 2018 or so - the audio system had been rewritten to use a custom backend instead of OpenAL-Soft.
/thread.
 
A

Agreeable

Guest
Just gotta open a GMS2 generated exe in notepad to see there are references to Open AL all over the place.

OpenAL error: %d (%s)
audio_queue_buffer_sound : OpenAL Error queueing buffer
audio_queue_buffer_sound : OpenAL Error playing queued sound
OpenAl alcGetIntegerv currently does not support parameter %d
OpenAl alcGetString currently does not support getting the name of a device
OpenAL Device
OpenAL\ALCdevice_null.cpp
OpenAL\ALu.cpp
Could be obsolete code. I obviously can't say.
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
Could be obsolete code. I obviously can't say.
You sure you're opening a GMS2 exe made with current version? I linked one in my Reddit reply (linked) and it's not spotting any references to original OpenAL files.
 
A

Agreeable

Guest
You sure you're opening a GMS2 exe made with current version? I linked one in my Reddit reply (linked) and it's not spotting any references to original OpenAL files.
The Exe was built two minutes before posting here.
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
The Exe was built two minutes before posting here.
I'm asking whether you are using a current (>=2.1.4.200?) version of runtime for this, as that is not what I'm getting in executables I build with 212 and 218
upload_2018-5-23_14-39-6.png
That's the only mention of ALu.cpp in the entire executable, and there are no full matches with OpenAL-Soft's sets of strings, further concreting that a custom OpenAL implementation was written while maintaining a compatible interface.
 
Last edited:

Mick

Member
Has there been an official announcement about this from YoYo or was the audio engine replaced "silently"? It's good to know that there is no lgpl violation when building with more recent gamemaker versions but what about all the games already published with openal soft statically linked? This is quite serious!

Edit: I knew the audio engine was replaced recently, it introduced some audio issues in gms1.4, that's why I didn't update. I did not know that this was the reason for it though.
 
Last edited:

Yal

🐧 *penguin noises*
GMC Elder
I'm not a lawyer, but I've had a bunch of legal education as part of my job with linux systems. Just be disclaimer'd that I only have a hunch about this kind of stuff.

I think games themselves should be fine under current legal practice: the runner and game data blob are standalone. (The legal definition of dynamic vs static linking is fuzzy). Assuming this is correct, only YYC'd games would be subject to the LGPL violation. I'm not sure whether the game data blob and the runner count as fully independent (Linux kernel modules don't since they will simply not work unless they're compiled for exactly one version of the kernel, even though they're dynamically inserted and removed), but it would be possible to test this by replacing a runner with a different version and verify the whole system still works. Not sure if there's any demands of the runner needing to be independently developed. Ask a real FOSS/IP lawyer about that.

It feels like the best course of action for YYG at this point would be to release the source code to the runner (for versions < the affected version) as open source, since that makes it meet the license terms without any possible repercussions, and since GMS1 will be sunsetted very soon anyway with official support ending, there is no commercial incentive to keep it closed-source; releasing it publicly also makes it possible for dedicated users to fix support issues themselves past the sunset.


EDIT: Unrelated side note, it should be possible to manually make an extension that uses an OpenAL DLL/.SO and use that to play audio, circumventing the issues with the custom audio engine's playback quality.
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
It feels like the best course of action for YYG at this point would be to release the source code to the runner (for versions < the affected version) as open source, since that makes it meet the license terms without any possible repercussions
The LGPL requirement is for the library in question to be replaceable by a new version, be that through replacing the dynamically linked binary, or recompiling the binary itself if it was linked statically. YYG addressed the issue in current versions of GMS1 and GMS2 by trashing the LGPL library and developing a compatible custom one.

there is no commercial incentive to keep it closed-source; releasing it publicly also makes it possible for dedicated users to fix support issues themselves past the sunset.
Yes and no - every new iteration of GameMaker builds on the previous one in some sense - for example, probably good 80% of functions are still shared between GMS1 and GMS2, to the point where some functions can be used in current updates of GMS1 even though only GMS2 documentation mentions them. Source code is usually shared in such cases and version-specific behaviour is achieved via conditional compilation. I imagine that YYG aren't fond of idea of giving people more reasons to stick with old versions either - GM might be one of the few game engines where you have people using versions released 10 years apart.

EDIT: Unrelated side note, it should be possible to manually make an extension that uses an OpenAL DLL/.SO and use that to play audio, circumventing the issues with the custom audio engine's playback quality.
If situation requires, it is certainly possible to - people have made multiple audio playback extensions while GM's built-in audio functions were still tied to DirectSound.
 
H

HW.

Guest
Ah nevermind, i am not sure what i posted, just guessing roughly. so i edited this. :(
*P.S. sorry if i misunderstood to recognize both people.
Cheers
 
Last edited by a moderator:

Yal

🐧 *penguin noises*
GMC Elder
The LGPL requirement is for the library in question to be replaceable by a new version, be that through replacing the dynamically linked binary, or recompiling the binary itself if it was linked statically. YYG addressed the issue in current versions of GMS1 and GMS2 by trashing the LGPL library and developing a compatible custom one.
Which means the very existence of the new audio engine makes everything using the OpenAL version comply with the licensing terms even if they are not updated to actually use it, because they COULD do it in theory? That sounds surprisingly smooth.
 
Top