Libwebsockets, modifications, and license

Down to the final 3P component with an un-ordinary license!

It appears libwebsockets has a LGPL 2.1-with-various-exceptions license. (https://github.com/EpicGames/UnrealEngine/blob/4.15.2-release/Engine/Source/ThirdParty/libWebSockets/libwebsockets_src/LICENSE).

  • What in fact is the original libwebsockets (there are references to v1.7.4, v1.6, v1.7-stable, and others) linked in UE?
  • Are the version(s) of libwebsockets in UE modified in any way from the original libwebsockets source? My understanding from the UE EULA is that license/attribution requirements for 3P software are in /Engine/Source/ThirdParty/Licenses, and the notice for libwebsockets there is just the attribution without a mention of modifications, so I’m assuming there are no modifications.
  • If UE is linked to a modified libwebsockets, under para 2 of exception 1, is the modified source available somewhere publicly without access control so that we can provide it to our own users?
  • If modified and not already available publicly, are we permitted to replicate and distribute publicly (outside of the UE licensee github access controls) the entire contents of https://github.com/EpicGames/UnrealEngine/tree/4.15.2-release/Engine/Source/ThirdParty/libWebSockets (replacing the git version with whichever version we’re releasing a product for)?
  • Is the entirety of that folder (including files with Epic Games copyright notices) licensed under the libwebsockets license at https://github.com/EpicGames/UnrealEngine/blob/4.15.2-release/Engine/Source/ThirdParty/libWebSockets/libwebsockets_src/LICENSE ? I ask because the .tps file in that folder refers to a Location directory that does not exist and may have been moved.
  • And finally, can I confirm libwebsockets license is compatible with UE EULA (it seems obvious, but I guess I have to ask)?

Please see my replies to your questions below.

Are the version(s) of libwebsockets in UE modified in any way from the original libwebsockets source? My understanding from the UE EULA is that license/attribution requirements for 3P software are in /Engine/Source/ThirdParty/Licenses, and the notice for libwebsockets there is just the attribution without a mention of modifications, so I’m assuming there are no modifications.

The source for the libwebsockets in UE was not modified.

If UE is linked to a modified
libwebsockets, under para 2 of
exception 1, is the modified source
available somewhere publicly without
access control so that we can provide
it to our own users?

If modified and not already available
publicly, are we permitted to
replicate and distribute publicly
(outside of the UE licensee github
access controls) the entire contents
of
https://github.com/EpicGames/UnrealEngine/tree/4.15.2-release/Engine/Source/ThirdParty/libWebSockets
(replacing the git version with
whichever version we’re releasing a
product for)?

Since the libwebsockets source was not modified, there are no modifications to make publicly available.

Is the entirety of that folder (including files with Epic Games copyright notices) licensed under the libwebsockets license at https://github.com/EpicGames/UnrealEngine/blob/4.15.2-release/Engine/Source/ThirdParty/libWebSockets/libwebsockets_src/LICENSE ?

There are a few Epic authored files in the the root libwebsockets folder (https://github.com/EpicGames/UnrealEngine/tree/4.15.2-release/Engine/Source/ThirdParty/libWebSockets). Everything under the subfolders contains only libwebsockets code.

I ask because the .tps file in that folder refers to a Location directory that does not exist and may have been moved.

Thanks for pointing this out. We’ll update the .tps file to point to /Engine/Source/ThirdParty/libWebSockets/.

And finally, can I confirm libwebsockets license is compatible with UE EULA (it seems obvious, but I guess I have to ask)?

We view the libwebsockets license as compatible with the UE EULA.

With regards to your first question, I’ve asked our engineering team to confirm whether or not there are any other version of libwebsockets is used in UE. I’ll revert back with a response.

Thanks - any luck with figuring out which version(s) are used?

Thanks for your patience on this. I’ve had a chance to look into our use of libwebsockets, and need to correct a few points.

Are the version(s) of libwebsockets in
UE modified in any way from the
original libwebsockets source? My
understanding from the UE EULA is that
license/attribution requirements for
3P software are in
/Engine/Source/ThirdParty/Licenses,
and the notice for libwebsockets there
is just the attribution without a
mention of modifications, so I’m
assuming there are no modifications.

The object code version of libwebsockets distributed with UE is in fact modified.

What in fact is the original
libwebsockets (there are references to
v1.7.4, v1.6, v1.7-stable, and others)
linked in UE?

The object code version of libwebsockets distributed with UE is a modified version of libwebsockets 1.7.3. As I had previously indicated, we are currently also distributing the source of the unmodified version of libwebsockets 1.7.4.

If UE is linked to a modified
libwebsockets, under para 2 of
exception 1, is the modified source
available somewhere publicly without
access control so that we can provide
it to our own users?

Epic maintains publicly available GitHub (without access control), which contains the modified source of libwebsockets 1.7.3. You can access it here.

And finally, can I confirm
libwebsockets license is compatible
with UE EULA (it seems obvious, but I
guess I have to ask)?

Confirmed. We do not view libwebsockets license as a “Non-Compatible License” for purposes of Section 1(B)(ii) of the UE EULA.

Thanks. Does what you said depend on the version of UE we are using? For example, I use UE 4.15.2. Am I understanding correctly that UE 4.15.2:
(a) statically links to an unmodified libwebsockets 1.7.4,
(b) statically links to a modified libwebsockets 1.7.3 whose source is at ThirdParty/libwebsockets-1.7.3 at master · EpicGames/ThirdParty · GitHub,
and (c) uses no other version of libwebsockets?

UE 4.15.2 statically links to a modified version of libwebsockets 1.7.3, the source of which is available at the github link you indicated. We also distribute the source (unmodified) to libwebsockets 1.7.4, but UE is not linked against it.

UE 4.15.2 does not use other versions of libwebsockets.

Sorry for continuing to dig into this, but IIUC, you’re saying libwebsockets 1.7.4 isn’t actually used in UE 4.15.2, but the 1.7.4 source is just there? Thanks for your patience; just want to make sure we have gathered all the needed license notices.

And does that also apply to 4.16 as well?

Yes, UE 4.16 similarly statically links to the modified libwebsockets 1.7.3.

Both UE 4.15.2 and 4.16 include the source of libwebsockets 1.7.4, but it is not compiled into UE.

Our engineering team has done a bit more digging into libwebsockets and has informed me that the unmodified version of libwebsockets 1.7.4 is in fact also used in UE. This means that in both UE 4.15.2 and 4.16 the modified libwebsockets 1.7.3 and the unmodified libwebsockets 1.7.4 are statically linked.

Thanks, any change in this for the latest 4.17.* versions?

We removed libwebsockets 1.7.4 from UE 4.17. Otherwise, libwebsockets use in UE remains as described above.