Wohlstand / libADLMIDI

A Software MIDI Synthesizer library with OPL3 (YMF262) emulator
GNU Lesser General Public License v3.0
170 stars 17 forks source link

Make the library MIT or at least LGPL licensed #254

Open Wohlstand opened 2 years ago

Wohlstand commented 2 years ago

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:

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).

elvisish commented 5 months ago

To reference https://github.com/bisqwit/adlmidi/issues/3 and the PR at https://github.com/bisqwit/adlmidi/pull/7 are the MIDI Synthesizer and OPL3 driver still under GPL or do they still need rewriting?

Wohlstand commented 5 months ago

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:

elvisish commented 5 months ago

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? https://github.com/bisqwit/adlmidi/issues/3#issuecomment-1913338150 I was under the impression he had granted you the ability to relicense?

elvisish commented 5 months ago
  • 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 commented 5 months ago

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 commented 5 months ago

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 commented 5 months ago

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 commented 5 months ago

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

Wohlstand commented 5 months ago

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

bisqwit commented 5 months ago

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 commented 5 months ago

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 commented 5 months ago

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 commented 5 months ago

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 commented 5 months ago

Then, I cound do next:

Is that okay for you?

bisqwit commented 5 months ago

I prefer changes that retain buildability.

Wohlstand commented 5 months ago

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

Wohlstand commented 5 months ago

@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 commented 5 months ago

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 commented 5 months ago

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 commented 5 months ago

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 commented 5 months ago

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 commented 5 months ago

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: