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

Make the library MIT or at least LGPL licensed #254

Open
2 of 4 tasks
Wohlstand opened this issue May 29, 2022 · 22 comments
Open
2 of 4 tasks

Make the library MIT or at least LGPL licensed #254

Wohlstand opened this issue May 29, 2022 · 22 comments
Assignees

Comments

@Wohlstand
Copy link
Owner

In addition to #226, this is the long-term plan on making this library to be LGPL-licensed at least (if not MIT-licensed).

The project currently is locked on a GPLv3 license because the original project was GPLv3-licensed, and many code pieces were been inherited and moded later to make this libADLMIDI project. And therefore, it has a GPLv3 license.

To get the LGPL license with less effort, the condition was noted by the original project's author (@bisqwit) is required. The pull-request is awaiting to be reviewed for two years and wasn't been taken ever. So, there is the alternative but long paths to get the desired license which requires completely rewriting all key modules from the scratch. Currently, there are MIDI sequencers and the database of embedded FM banks got been replaced with a brand-new one, but it's not enough. So, there is a full list of modules to be rewritten/replaced to get the less-viral license:

  • MIDI Sequencer - the module that parses MIDI/MUS/XMI files and sends MIDI commands to the attached MIDI synthesizer.
  • Database of embedded banks - the module that holds all sets of embedded banks at the compressed table and allows to take some for current use. The original module doesn't support multibank (MIDI sets with more than 128 instruments like GS and XG).
  • MIDI Synthesizer - the abstract layer that receives MIDI commands and interprets them over the OPL3 driver. This module also manages the mapping of MIDI notes over hardware voice channels of all supplied chips.
  • OPL3 driver - the abstract layer which converts generic API interface into raw chip register commands

Other parts of the project (WOPL parser under MIT, Chipset under LGPLv2.1+) were fine except for the DosBox OPL3 emulator which is licensed under GPLv2+. That will need to send the request to the DosBox development team to request at least an LGPL license for the emulator. This emulator is the fastest among others with good accuracy which is suitable to be used on low-end devices that can't run the Nuked OPL3 emulator (the most accurate, but requires powerful hardware for the real-time work).

@Wohlstand Wohlstand self-assigned this May 29, 2022
@Wohlstand Wohlstand pinned this issue Nov 14, 2023
@elvisish
Copy link

To reference bisqwit/adlmidi#3 and the PR at bisqwit/adlmidi#7 are the MIDI Synthesizer and OPL3 driver still under GPL or do they still need rewriting?

@Wohlstand
Copy link
Owner Author

To reference bisqwit/adlmidi#3 and the PR at bisqwit/adlmidi#7 are the MIDI Synthesizer and OPL3 driver still under GPL or do they still need rewriting?

Right now, these modules of libADLMIDI are GPLv3-licensed because they are directive parts of Bisqwit's ADLMIDI. There are one of two conditions will turn them into MIT:

  • @bisqwit will grant to me LGPL, he gave me a condition that I completed, however, he didn't reviewed/merged the stuff yet for many years.
  • I will code my own modules with blackjack and hookers to completely replace old Bisqwit's modules. As I already done with the MIDI sequencer and the banks database.

@elvisish
Copy link

To reference bisqwit/adlmidi#3 and the PR at bisqwit/adlmidi#7 are the MIDI Synthesizer and OPL3 driver still under GPL or do they still need rewriting?

Right now, these modules of libADLMIDI are GPLv3-licensed because they are directive parts of Bisqwit's ADLMIDI. There are one of two conditions will turn them into MIT:

  • @bisqwit will grant to me LGPL, he gave me a condition that I completed, however, he didn't reviewed/merged the stuff yet for many years.
  • I will code my own modules with blackjack and hookers to completely replace old Bisqwit's modules. As I already done with the MIDI sequencer and the banks database.

Ohh so he hasn't actually confirmed it yet? bisqwit/adlmidi#3 (comment) I was under the impression he had granted you the ability to relicense?

@elvisish
Copy link

  • I will code my own modules with blackjack and hookers to completely replace old Bisqwit's modules. As I already done with the MIDI sequencer and the banks database.

I don't suppose this is on the immediate horizon is it? ;)

@Wohlstand
Copy link
Owner Author

No, he hadn't granted me yet. On first case I hurried up, and he said that he didn't, and then I force-pushed a reversion of the change. He explained that a condition on which he will grant me LGPL is when I will remake his current ADLMIDI into the library thing, and I did that. He said that he has no time because of too much other works, and he didn't checked the stuff yet. So, because of such long waiting I am very close on just making a totally new thing to replace an old one. I do have some ideas on how to rework that. I think, I'll better to recode the thing into the pure C. That will allow me to bring it to some other places like Win9x or 3.x hardware drivers.

@Wohlstand
Copy link
Owner Author

Speaking about already redone parts, I wanted to add more functionality to MIDI sequencer and split it down from the libADLMIDI to turn it into real-time synthesizer, and the database was redone to allow multibank (bigger AIL banks and GS/XG banks), and optimize the storage in general.

@elvisish
Copy link

No, he hadn't granted me yet. On first case I hurried up, and he said that he didn't, and then I force-pushed a reversion of the change. He explained that a condition on which he will grant me LGPL is when I will remake his current ADLMIDI into the library thing, and I did that. He said that he has no time because of too much other works, and he didn't checked the stuff yet. So, because of such long waiting I am very close on just making a totally new thing to replace an old one. I do have some ideas on how to rework that. I think, I'll better to recode the thing into the pure C. That will allow me to bring it to some other places like Win9x or 3.x hardware drivers.

That sounds good, LibADLMIDI is really, really good sounding and to have even LGPL would be amazing, I'm not sure if you have a timeframe on when it might be complete?

@elvisish
Copy link

elvisish commented Feb 4, 2024

Also, have you considered using any parts of https://github.com/devinacker/ymfmidi ? This is BSD-3 licensed.

@Wohlstand
Copy link
Owner Author

A good idea, I could check it out and use some as hints/examples and mixing with my own experience.

@bisqwit
Copy link

bisqwit commented Feb 5, 2024

Sorry about the lack of attention to this topic lately. For the last ~3 years I have been studying in a university at 350% pace (compared to recommended schedule), in addition to having a day job, so I have had to neglect most of my side projects, and this continues even currently.
I have previously indicated some dissatisfaction towards the large holistic changes that were made in the Wohlstand’s project (compared to my ADLMIDI), and rather wanted an approach based on tiny, isolated commits, where each commit only changes one thing, that I could possibly read and understand and merge one at a time, but this never happened.

@Wohlstand
Copy link
Owner Author

Wohlstand commented Feb 5, 2024

that I could possibly read and understand and merge one at a time, but this never happened.

If you wanted small commits: the Pull-Request has a list of small commits, you can open EVERY single commit and learn it's changes, so, you can see the WHOLE history at "commits" page: https://github.com/bisqwit/adlmidi/pull/7/commits that I did in order to turn your existing ADLMIDI into the library.

@Wohlstand
Copy link
Owner Author

Sorry about the lack of attention to this topic lately. For the last ~3 years I have been studying in a university at 350% pace (compared to recommended schedule), in addition to having a day job, so I have had to neglect most of my side projects, and this continues even currently.

Oh, I see, I'm so sorry for that. But at least, I am very happy that you appear again!

@bisqwit
Copy link

bisqwit commented Feb 5, 2024

If you wanted small commits: the Pull-Request has a list of small commits, you can open EVERY single commit and learn it's changes, so, you can see the WHOLE history at "commits" page: https://github.com/bisqwit/adlmidi/pull/7/commits that I did in order to turn your existing ADLMIDI into the library.

A colossal pull request consisting of an entire repository made of dozens of commits is not the same as tiny commits that I could analyze and merge one at a time. The pull request is either approved wholly or not at all. And currently, out of those two options, I have chosen "not at all".

@Wohlstand
Copy link
Owner Author

Wohlstand commented Feb 5, 2024

Then, I cound do next:

  • Please make a new temporary branch named library (or anything you want to name), because every PR commit that I will send does not mean it will be buildable in the middle state (because changes done in the sequence do depend on each other)
  • I will send these commits sequentially to that new branch, so you can take them into the library branch.
  • Once the whole sequence will be sent, then merge the library branch into master and delete that branch completely.

Is that okay for you?

@bisqwit
Copy link

bisqwit commented Feb 5, 2024

I prefer changes that retain buildability.

@Wohlstand
Copy link
Owner Author

Then, I will need to squash some of commits to ensure every middle state is buildable on Linux at least.

@Wohlstand
Copy link
Owner Author

@bisqwit , so, I created the branch named library-seq where I will cherry-pick commits and I will send pull-requests via it. Once you merge first, I'll send the second, and do until all commits from the library-3 branch will reach you.

@bisqwit
Copy link

bisqwit commented Feb 5, 2024

Thanks. In any case, right now I have to concentrate on other things. I hope this won’t get delayed by years once again.

@elvisish
Copy link

elvisish commented Feb 5, 2024

If you wanted small commits: the Pull-Request has a list of small commits, you can open EVERY single commit and learn it's changes, so, you can see the WHOLE history at "commits" page: https://github.com/bisqwit/adlmidi/pull/7/commits that I did in order to turn your existing ADLMIDI into the library.

A colossal pull request consisting of an entire repository made of dozens of commits is not the same as tiny commits that I could analyze and merge one at a time. The pull request is either approved wholly or not at all. And currently, out of those two options, I have chosen "not at all".

Wouldn't it be easier for you to just relicense the whole thing and be done with it?

@bisqwit
Copy link

bisqwit commented Feb 6, 2024

Yeah why not relicence a program using a license meant for libraries and be done with that. Why didn’t I think of that.

@elvisish
Copy link

elvisish commented Feb 6, 2024

Yeah why not relicence a program using a license meant for libraries and be done with that. Why didn’t I think of that.

MIT wasn't meant for libraries but it's your call, naturally.

@Wohlstand
Copy link
Owner Author

Yeah why not relicence a program using a license meant for libraries and be done with that. Why didn’t I think of that.

MIT wasn't meant for libraries but it's your call, naturally.

Right now the first goal is to get the LGPL. The LGPL is a Lesser GNU Public License. In the past it was called as "Library GNU Public License". This license while popular among libraries, it CAN be used on non-library components such as code files that can be taken into other project (such as library that will inherit the LGPL license). Also: almost all known emulators here do have LGPL license except of DosBox with GPL and Opal which is Public domain. There is also YMFM thing which requires C++14, it have BSD-3-Clause license.

So, even I will replace all code with fully mine, the license of built library will depend on emulators being used:

  • If all emulators enabled, license will be GPL (because of DosBox). Even I will get the LGPL, if you want to get an LGPL-licensed build, disable DosBox emulator.
  • If DosBox disabled, but all other emulators enabled, license will be LGPLv3 because of JavaOPL3 which is LGPLv3.
  • If disable everything but Opal, then, license will be that I would set (MIT, BSD-3-Clause, etc.). Opal supports OPL3 mode only without the rhythm mode.
  • If use YMFM emulator, there are two licenses will be used as YMFM is licensed under BSD-3-Clause.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Backlog
Development

No branches or pull requests

3 participants