Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Licensing]: libmve #774

Closed
JeodC opened this issue Apr 29, 2024 · 11 comments
Closed

[Licensing]: libmve #774

JeodC opened this issue Apr 29, 2024 · 11 comments

Comments

@JeodC
Copy link
Contributor

JeodC commented Apr 29, 2024

The Descent 3 open source team is looking at libmve options that comply with GPLv3--the current version needs to be replaced. I see rebirth's libmve is the same license, but the license headers redirect to COPYING.txt. If we were to use this version (with permission, never hurts to double check), how should we preserve the license?

Thank you.

@vLKp
Copy link
Contributor

vLKp commented Apr 29, 2024

The answer to this is complicated, due to the licensing history of Descent and Rebirth.

Regarding permission, the short answer is that I, personally, have no objection to your request. My contributions are under GPLv3, and the Descent 3 source appears to be likewise, so the licenses are compatible. However, I feel obliged to provide some history and a caveat that arises from that history.

When Parallax released the Descent 1 source, and later the Descent 2 source, it was provided under a license that prohibited deriving revenue from the source. Early contributions to Rebirth were done under a custom license, which you can see using git show ea71723dde0c42da1e5ea146d8ca5e15356c748f:COPYING.txt in this repository (or at https://github.com/dxx-rebirth/dxx-rebirth/blob/ea71723dde0c42da1e5ea146d8ca5e15356c748f/COPYING.txt if you want to see it online). In short, it was an attempt to ensure source remained available, and it acknowledged the combined nature of the Parallax source with the subsequent community contributions. In 2014, zico contacted prior contributors and, as I understood his actions, secured their agreement to relicense the community contributions under GNU General Public License v3, with an additional quirk to permit combining that code with code under the Parallax license, despite that the Parallax license would not normally be considered compatible with GNU GPL.

This then leads to the caveat: to the extent that the code you want to copy is considered Parallax code, you would also need to abide by the Parallax no-revenue license terms, or secure Parallax's permission to use their part under open terms. I hope this is not an issue for you, for two reasons.

First, you are asking because Descent 3's MVE code was stripped out due to licensing reasons. I expect that the code in Rebirth was likely written independent of Parallax for the same reason, in which case none of it would be considered Parallax code, so you would only be taking community code and therefore only be concerned with the community license terms. However, I have not verified through Git history that there is nothing from Parallax in those files. I am working only from memory here.

Second, since you are asking on behalf of people who appear to be the original authors for Descent 3, they may be in a position to secure Parallax's permission for a GPLv3 compatible license for any part that is considered Parallax code. Obtaining that permission would then let them use the Parallax code in the pure-GPLv3 Descent 3 source.


As regards preserving the licensing information, the simplest way would be to include a banner comment stating from which commit of dxx-rebirth.git you copied the code, and the file(s) from which you copied it, so that interested parties can find the Rebirth history and license information. If you wish, you could also include Rebirth's COPYING.txt, either renamed or relocated to an appropriate subdirectory (to clarify that it is not applicable to the entirety of the Descent 3 source), and reference that in the banner comment as well. This might be of value to future readers who want to check licensing information without needing to return to GitHub.


I will also take this opportunity to note that when the Rebirth relicensing was done in 2014, there was some hope that the Parallax code might one day be released under a fully GPLv3 compatible license, which would allow the Rebirth project to switch from this hybrid of "GPLv3 with additional permission to link to Parallax, and the no-revenue clause from Parallax" to a simple GPLv3 everything, so that contributors and redistributors could treat Rebirth like any pure GPLv3 program. In particular, I think the current situation led some projects to refuse to distribute Rebirth on any media for which they charge money (even if Rebirth is just a tiny portion of the media's contents), out of fear of the no-revenue clause. If the Parallax code were relicensed as GPLv3, that concern would go away.

My approval above is not contingent on such a relicensing. However, I, and I expect many others, would be pleased to see the Descent 1 and Descent 2 Parallax code relicensed as GPLv3 compatible. With the renewed interest in the Descent 3 source, it might be possible to get the attention of the right people to make that happen.

@JeodC
Copy link
Contributor Author

JeodC commented Apr 29, 2024

It's a shame you're not into discord--you could make that request yourself.

I appreciate your prompt response. I'll forward this to the team. Thank you.

@vLKp
Copy link
Contributor

vLKp commented Apr 30, 2024

Discord has many problems, some of which were discussed on a recent LWN thread when the rsync project started using it. Among them:

  • It is a terrible webapp and has no viable freestanding client. The only one I see is an amd64-only closed binary, which in turn seems to bundle Chrome.
  • I've never seen a public link to content on Discord, yet the issue where we are discussing this is easily readable anonymously using even a simple HTTPS client.
  • As best I can tell, none of a Discord community's content ever shows up on search engines.
  • Signing up requires solving a captcha. I hate captchas. People with more patience than me gave up trying to get past the captcha barrier and abandoned trying to join the rsync Discord over this.

Among the LWN comments about Discord that I found particularly relevant:

If you decide to read the LWN comments from that article more generally, I suggest that you skip the subthreads that wandered off into a discussion of Discord's ownership and potential government meddling incident to that. No useful technical arguments were raised there.

Putting all that together, anything that happens on Discord is invisible to me, and any project that requires Discord as a means of contact is unreachable. This is unfortunate, and is why I encourage people never to rely on Discord.

@JeodC
Copy link
Contributor Author

JeodC commented Apr 30, 2024

Other than this GitHub repository, then, what's a good way to contact you?

@JeodC
Copy link
Contributor Author

JeodC commented Apr 30, 2024

Also, to summarize:

Descent 1 and 2 had their source code released in ~1999, licensed by Parallax with the "no revenue" clause and did not include Interplay MVE libraries. D2X is derived from that. D2X is under GPLv3--it's unknown where it got its libraries from, but they are most likely reverse engineered. The MVE libraries are most likely under GPLv3, then. DXX-Rebirth derived from D2X and has a C++20 MVE library--which is also GPLv3.

Is that correct?

@vLKp
Copy link
Contributor

vLKp commented May 2, 2024

GitHub is the primary mechanism of contact. I do not maintain a presence on any interactive chat services, and the Rebirth forum I once frequented is long gone. Why do you ask?


Your summary seems fair. I can't rule out that someone else can give you a better answer about the provenance of the D2X MVE library. It might even be possible to get a good answer to that by inspecting the git history. Through git commands on this repository, I can readily trace it back to 44f0c0d when @btb added it with the log message initial movie support. On reading through that commit, I see some comments describing operation, but none that would address the question of provenance.

  • git log --follow -- d2x-rebirth/libmve/ leads to 7cda97c where I rearranged the directory layout, as part of putting D1X-Rebirth and D2X-Rebirth into a combined tree.
  • git log --raw 7cda97cc745bbbb297c6698b3d4f8b22a008fb05^ -- libmve/ gets the log from before the rearrangement, which traces back to b94413b when @zicodxx imported D2X code to start work on Rebirth. If, like me, you have the history replacement active (from the branch historical/d2x), this can follow further, and take you to 5ceb6c6, when @btb rearranged the movie code in the D2X repository.
  • git log --full-diff --raw 5ceb6c6deb4535bdf7a8293b8bcd403f68f058e8^ -- main/mveplay.h main/decoder16.c main/decoder8.c main/mve_audio.c include/mve_audio.h main/mve_main.c main/mvelib.c include/mvelib.h main/mveplay.c gets the log from before @btb's rearrangement, which leads back to the initial movie support commit.

I'm a bit puzzled that DescentDevelopers/Descent3#253 chose to take the original D2X version of MVE over the Rebirth version. I expect that any provenance concerns with the Rebirth version are inherited from the original D2X version, so rolling back to D2X doesn't help there, and rolling back forfeits all the cleanups and code maintenance from the Rebirth version.

@JeodC
Copy link
Contributor Author

JeodC commented May 2, 2024

We are using the C++17 standard, for one, and the d2x library lines up a bit more nicely with respect to existing functions found in d3movie.cpp, so the maintainer working on mve decided to go with it. If you think the code cleanups and maintenance are something that should be retained, I'd urge you to comment on the relevant issue over on Descent3.

Regarding communication, I ask for two reasons. One, to pass it along to the ones who have Parallax's ear. Two, so things not rebirth related don't have to be discussed on this repository.

@DanielGibson
Copy link

If you have anyone in the team who is familiar with C++, I'm sure they could easily port the C++20 code from DXX to C++17 (if it even uses any C++20 features).

@vLKp
Copy link
Contributor

vLKp commented May 4, 2024

Yes, if you're stuck with C++17, the current Rebirth MVE code will not work for you, as it does use some C++20 features (notably std::span). std::span is not particularly complex to backport though, and you could have forked from the last commit before the C++20 dependency. Regardless, the decision has been made, and I leave it up to the people who will be maintaining the code to pick the path that they like best. I think the old d2x code lines up better with d3movie because I rearranged parts of the MVE code later on, eliminating use of some global variables, propagating unnecessary arguments that were always constant, and so on.

Regarding communication, I suppose I should ask then, what answer were you hoping to get? It's been ages since I received any Rebirth-related e-mail, and even longer since I used Mumble to talk to anyone about Rebirth. The last Descent-related e-mail I got was from one of the original developers inquiring about how one aspect of the DOS release behaved, and that was more than a year ago now.

@JeodC
Copy link
Contributor Author

JeodC commented May 4, 2024

I suppose if you were interested in doing anything with Descent 3 you would have made that interest known by now. Anyway, thank you for the information--this one can be closed. :)

@vLKp
Copy link
Contributor

vLKp commented May 4, 2024

I am interested in the Descent 3 source, but these days I have so little time each week to work on Descent / Descent 2 that adding Descent 3 to the mix seems unlikely to end well. If I had the time to spend a couple of days a week on it, I'd be happy to jump in.

@JeodC JeodC closed this as completed May 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants