How was the article?

Media
2019/02

Skyrim Together And SKSE Troubles Arise Over Use Of Code And Legal Issues

It looks like some modder issues that could become ugly have sprung up recently regarding Bethesda’s 2011 hit RPG The Elder Scrolls V: Skyrim. As of recent, an SKSE developer outlines how code from SKSE has been used in the Skyrim Together mod that violates several terms, which is said to reflect badly on the SKSE team and could lead to a “very bad legal position with Bethesda.”

If you don’t know, the Skyrim Script Extender (SKSE) is a tool used by many Skyrim modders, which allows scripting capabilities to reach new limits whilst adding additional/new functions to Skyrim.

This now leads to Skyrim Together, which is an upcoming mod that is currently in beta. This mod allows fellow Skyrim players to team up and explore the fantasy world of said game. However, the team behind the mod has a Patreon account that one must donate to in order to try out the beta:

“We have decided to give closed beta access to ALL former and future patreons, we do not care about the pledge amount, $1 is enough to get in. This is a BETA, we will not refund your $1 if you are unhappy with the state of the beta, because we don’t have time to deal with this. If you are unsure do not join the beta, we did this only to limit the amount of people joining our servers. Do not pledge if you are expecting a fully functional, bug free experience.”

But, there is a problem that could lead to a can of worms dealing with Bethesda and legal issues in this case. According to SKSE developer Extrwi, the following information on sub-reddit r/skyrimmods was posted on February 2nd, 2019:

“I guess it’s time for more drama. Sorry, I hate having to do stuff like this.

 

Skyrim Together is stealing SKSE code, uncredited, without permission, with an explicit term in the license restricting one of the authors from having anything to do with the code, who denies using any of it (in case this gets deleted)? The proof is pretty clear when you look at the loader and dll in a disassembler. They’re using a hacked-up version of 1.7.3 classic presumably with some preprocessor macros to switch structure types around as needed between the x64 and x86 versions.

 

Starting with the loader, it’s basically skse_loader with all of the options filed off and the error messages changed. In main, they check the error code of CreateProcessA against ERROR_ELEVATION_REQUIRED, then have a slightly reworded error messagebox to handle that case. That I could see being a slightly suspicious coincidence.

 

Head down to the actual DLL injection code at +4B81 and follow along with skse64skse64_loader_commonInject.cpp’s InjectDLLThread. The first function is just a SEH wrapper, calling DoInjectDLLThread to do the real work. DoInjectDLLThread looks almost exactly the same, only with the check that the DLL exists removed. The timeout for WaitForSingleObject is exactly the same, even being switched between INFINITE, 60 seconds, and not being called at all via two bool arguments with the same indices. That’s a pretty clear copy.”

Extrwi would follow up the above information with a post showing tons of file paths regarding the DLL in the below image:

View post on imgur.com

Extrwi later explains how the main SKSE source isn’t licensed under an open source license contrary to that of the SKSE common files (or the MIT-license):

“Common is of course MIT-licensed and doesn’t require attributation (but is always appreciated), but the main SKSE source isn’t. It’s technically always been under common copyright law.”

The write-up by Extrwi also touches on the copied unchanged code from SKSE:

“Looking throughout the DLL, there’s tons of code easily identifiable as copied unchanged from SKSE just from the strings and error messages. Most if not all of the new script functions are there, serialization, basically everything. RTTI data points to tons of SKSE custom classes; honestly the whole thing makes me feel sick.

 

If you want a great “smoking gun” of SKSE code being directly used in functions they added, look at the definition of TESNPC and compare it with the function at +2B5A00 which appears to be walking over the members of a TESNPC (among other things) to build a string. The names of the fields just happen to match up, even including the numbered “unknown” ones. That’s beyond coincidence.”

With the “smoking gun” on display, Extrwi ends by explaining what dangerous actions like the ones committed by the Skyrim Together team can bring on others:

“This source code theft is completely uncredited, denied by the authors, and I’m sure has been a great help in developing their mod that is currently only usable when paid. Currently I’m not sure what to do about this situation.

 

Note that it is normal for ordinary native code plugins to use the SKSE source code directly, and that’s OK. They are supposed to have their source available, but in reality that doesn’t always happen. ST is causing a problem by violating the license, not crediting, going out of their way to keep closed-source, and effectively charging for a mod. This reflects badly on us, and pushes us in to a very bad legal position with Bethesda.”

As listed above, the full post that Extrwi wrote up can be found over on r/skyrimmods.

Other Media