jamulussoftware / jamulus

Jamulus enables musicians to perform real-time jam sessions over the internet.
https://jamulus.io
Other
1.01k stars 223 forks source link

Clarify ASIO SDK usage #2417

Closed hoffie closed 2 years ago

hoffie commented 2 years ago

It seems to be non-obvious how the ASIO SDK and its license integrates with Jamulus. We should do everything to make the situation more clear.

References: See PDF in the SDK zip.

I'm currently don't plan to work on this myself, but I do think that we should move this forward for the next release and have added it to 3.9.0 therefore.

gilgongo commented 2 years ago

The approved wording for the copyright statement is: ”ASIO is a trademark and software of Steinberg Media Technologies GmbH”

gilgongo commented 2 years ago

I think the least problematic option here is to give anyone who receives the Jamulus source an additional permission under GNU GPL v3 section 7 as follows:

Parts of this program that relate to hosting ASIO device drivers under Microsoft Windows are covered by the terms of the Steinberg ASIO SDK Licensing Agreement. The licensors of this Program grant you additional permission to convey this Program modified or not, provided you agree to Steinberg’s terms in writing. For further information, see https://www.steinberg.net/developers/

This hinges on the assumption that the Steinberg agreement does not contain any non-permissive additional terms considered "further restrictions" within the meaning of section 10 of the GPL v3, and that we are NOT distributing the ASIO SDK itself along with Jamulus source.

I've got notes on the thinking (and other options) around this if anyone wants to read that here.

Also note that this could change depending on a new interpretation of the texts that I've not spotted :-)

gilgongo commented 2 years ago

@hoffie I've amended the text on this to be more specific about what's needed.

As far as I can see, we should take the "additional permission" route and not treat ASIO as a system library (see my comment above).

If that's agreed, then I can sign the Steinberg agreement unless anyone else wants to (what's the name of the Jamulus "organisation" now BTW?), and we can get on with displaying the copyrights notices as I've detailed above meanwhile.

hoffie commented 2 years ago

Thanks for working that out!

I think the least problematic option here is to give anyone who receives the Jamulus source an additional permission under GNU GPL v3 section 7 as follows:

I think we would have to choose the GPLv2 version of this which also exists at https://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs. We should keep any modifications to that text to the bare minimum -- they likely did think a lot about the proper wording.

As far as I can see, we should take the "additional permission" route and not treat ASIO as a system library (see my comment above).

That'd effectively be a license change though. That would mean that we would need to get approval by all relevant contributors, right? Luckily, it seems like it is sufficient to do that for the parts which interact with the library (ASIO), so that would only be windows/sound.{h,cpp}. Based on (emphasis mine):

In either case, you should put this text in each file to which you are granting this permission.

$ for x in windows/*.cpp windows/*.h; do git blame $x | sed -rne 's/.*\((\S+ ?\S+)  .*/\1/p' ; done | sort -u
ann0see
Martin Passing
Noam Postavsky
Stefan Weil
Tony Mountifield
Volker Fischer

That'd be really good as it seems absolutely realistic to reach those few people. Some exceptions:

https://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs

But if you want to use parts of other GPL-covered programs by other authors in your code, you cannot authorize the exception for them. You have to get the approval of the copyright holders of those programs.

I guess this would also only apply to the relevant files (windows/), right?

gilgongo commented 2 years ago

@hoffie Good point about the GPLv2 version...

That'd effectively be a license change though.

Not sure I understand why that would be. Can you explain?

hoffie commented 2 years ago

Basically this:

> Only the copyright holders for the program can legally release their software under these terms.

As we do not assign copyright, every author with major contributions must be considered to own (partial) copyright as far as I understand. Volker could have done it alone. Now, it can only be done when all relevant authors agree to that change.

gilgongo commented 2 years ago

Re. the GPLv2 permission wording though, the GPLv3 one feels safer because it doesn't seem to let distributors remove the notice on modified versions as far as I can tell (If we wanted to stick to the wording in the gnu.org FAQ, and not go off piste as I did above).

At least in so far as we're saying we're releasing under the "GPLv2 or above", we can align this with GPLv3, no?

ann0see commented 2 years ago

Since I‘m not a fan of copyleft I‘ll happily hand my copyright (which is certainly arguable since my changes were minor) to Volker Fischer or Tony Mountifield (so you can remove me from the list).

gilgongo commented 2 years ago

Since I‘m not a fan of copyleft I‘ll happily hand my copyright (which is certainly arguable since my changes were minor) to Volker Fischer or Tony Mountifield (so you can remove me from the list).

While I guess getting permission can't hurt, I'm slightly confused as to why we need to (the GPL FAQ says you only need permission, "if you want to use parts of other GPL-covered programs by other authors in your code"). But I suppose it's not a big deal.

hoffie commented 2 years ago

At least in so far as we're saying we're releasing under the "GPLv2 or above", we can align this with GPLv3, no?

I no longer claim to have a full understanding of this by now, but I'd fear that this might only "solve" it for GPLv3 and not for GPLv2 which people would (and must) still be allowed to use. Based on that I'd use the GPLv2 suggestion.

I'm slightly confused as to why we need to (the GPL FAQ says you only need permission, "if you want to use parts of other GPL-covered programs by other authors in your code").

I find that paragraph confusing as well. The first part talks about single-author GPL programs (that's what I paraphrased), the last part talks about "other GPL-covered programs" (that's what you paraphrased). I don't see an explicit mention of "GPL programs by multiple" authors, but I still read the paragraph as: All authors must agree.

BTW, some of the initial TODO items in this Issue are now marked as obsolete. I agree with some of those (we don't have to document our ASIO-is-a-platform-library as we don't plan to go this route anymore), but regarding the other items I'm not sure. Wouldn't all users who self-compile and distribute still need to sign the agreement? If so, shouldn't we point them to it?

gilgongo commented 2 years ago

@hoffie OK I think there are multiple questions to sort out then:

I'd fear that this might only "solve" it for GPLv3 and not for GPLv2

  1. When we say our code is "GPLv2 and above" (AND we assume it's always said that) I take that to mean if v2 says one thing and v3 says another, then people can pick the permission they want. For a time, I mistakenly thought we were licensed ONLY under the GPLv2, which might have posed a problem in regard to the "ASP loophole" discussion here (and see DavidSavinkoff's fuller explanation of my mistake). So I take this to mean we can apply the terms of the GPLv3 in the ASIO "additional permissions".

Wouldn't all users who self-compile and distribute still need to sign the agreement? If so, shouldn't we point them to it?

  1. Regarding the GPLv3 vs V2 templates in the FAQ. My assumption is that we can write our own "permissions" in that statement - the ones given in the FAQ say that they are "examples". So, and assuming nothing else in the ASIO agreement are "further restrictions" within the meaning of section 10 of the GPL v3:

If you modify this Program, or any covered work, by linking or combining it with the ASIO (Audio Stream I/O) library (or a modified version of that library), containing parts covered by the terms of Steinberg ASIO SDK Licensing Agreement, the licensors of this Program grant you additional permission to convey the resulting work. For further information, see https://www.steinberg.net/developers/

Therefore, I don't think we also need to maintain a separate document for that - maybe we could link/paste the above in, say, COMPILING.md and places just to be nice though (it would be an addendum in COPYING I think).

BTW right now, I don't actually understand why the additional permissions stuff is different in the v2 vs v3 (I think it's 'cos v3 has Clause 7) but I don't think we need to as long as we're OK by v3.

I don't see an explicit mention of "GPL programs by multiple" authors, but I still read the paragraph as: All authors must agree.

  1. My reading of the FAQ is that when they say "Only the copyright holders for the program can legally release their software under these terms." they mean Steinberg, not us (at least, if it's not them, then the FAQ wuuld be saying we need to release our own program under our own terms, which is odd because that's what the GPL is: our terms). So instead we are, if you like, "passing on" Steinber's terms to others (as required by them, not us) in our own licence. But it's not a big deal if we want to contact individuals about this. They may point out some flaws in our plan! :-)

And lastly, what may as well be a footer to this entire thread: all the thinking here is to show "best endeavours" that we are trying to respect Steinberg's terms as well as the GPL's. We might have made a mistake, we're not lawyers, we can't pay lawyers, but we think we can make all this ASIO legal stuff work so that the Jamulus Windows version can continue.

gilgongo commented 2 years ago

OK so as further discussed on Discord just now, if we assume that the only issue is the distribution of the Windows client binary being the object of Steinberg's terms, then we don't have to worry about the source (which contains none of their code). Ergo, we don't need an addendum to the GPL. This assumes that because Steinberg don't mention source or binaries, we can interpret their rights granted for us to create "an application that can host ASIO device drivers" with the SDK as applying only to the binary, and the distribution (not use) of it.

I've updated the ticket with the actions we need to take, and will mark the above discussion items as "outdated" or "resolved".

gilgongo commented 2 years ago

I'm happy to sign the agreement once we have the stuff ready to publish on the website at least (app stuff can maybe wait a bit). In the box that says "Company or Organization" I assume it's just "Jamulus" (with me named as the representative).

There's also a "technical representative" needed. Any volunteers? I think they imply we have to print out the doc, sign it, then scan it and email the image to them.

pljones commented 2 years ago

I assume it's just "Jamulus"

Given the Github account is "jamulussoftware", I use "Jamulus Software" in full - that way it more clearly covers every usage under that account, rather than perhaps jamulussoftware/jamulus.

"technical representative"

Well, you know the set of qualifying volunteers. I'm happy to have my name there. Does it need my signature, too?

(Maybe photo your signature, cut-n-paste in an appropriate editor, print to PDF - no paper involved...)

pgScorpio commented 2 years ago

There's also a "technical representative" needed. Any volunteers?

If no one of the main contributers volunteer, I will.

gilgongo commented 2 years ago

Well, you know the set of qualifying volunteers. I'm happy to have my name there. Does it need my signature, too?

(Maybe photo your signature, cut-n-paste in an appropriate editor, print to PDF - no paper involved...)

Yes, needs a signature (and postal address, phone, email) so we can try the photo/cut-n-paste.

hoffie commented 2 years ago

Make a Windows server download using "nosound" which doesn't touch ASIO SDK

I'm no longer convinced that we should have this. I think there's a risk of confusing users ("why doesn't this work as a client with audio?") and it's yet another build target with questionable benefit. Do we really need it?

pljones commented 2 years ago

Make a Windows server download using "nosound" which doesn't touch ASIO SDK

I'm no longer convinced that we should have this. I think there's a risk of confusing users ("why doesn't this work as a client with audio?") and it's yet another build target with questionable benefit. Do we really need it?

We do it for Linux, seemingly without problems. We create two apps for MacOS, seemingly without problems. Why shouldn't Windows uses also have two?

There's a benefit in splitting the distribution - in my view more users get confused by Jamulus having a single binary for client and server. Having the server separately means the concept of "running a server" is easier to understand.

Technically (in licensing terms), no, there's little benefit.

gilgongo commented 2 years ago

Technically (in licensing terms), no, there's little benefit.

I suppose in the seemingly very unlikely event we had to take the Windows client closed source (ie if Steinberg said their terms covered the source after all) then I guess we might have to? But the practicalities of maintaining a private repo for that seem to make that a non-starter. We'd need funding, for one thing.

hoffie commented 2 years ago

Technically (in licensing terms), no, there's little benefit.

Hrm, maybe track it as a separate task then?

I suppose in the seemingly very unlikely event we had to take the Windows client closed source

I don't think this is possible at all.

gilgongo commented 2 years ago

BTW I've updated the requirements to make the logo not needed. For the installer and About screen it says in 3.b:

'the Licensee shall display “ASIO” and Steinberg’s copyrights notice or the ASIO compatible Logo and Steinberg’s copyrights notice'

and for the website:

'“ASIO” and Steinberg’s copyrights notice or the ASIO compatible Logo and Steinberg’s copyrights notice on any product website'.

At first I thought "ASIO" meant the logo, but it seems not so that's good.

hoffie commented 2 years ago

@henkdegroot I think you said you wanted to tackle parts of the open TODOs. Is this accurate? If so, which?

henkdegroot commented 2 years ago

@hoffie, that is correct. Offered to update the windows installer etc. to cover the requirements. But then I noticed a comment that it might not be needed after all.

gilgongo commented 2 years ago

I think all we need in the installer is the rights notice, not the logo. So I think the words "ASIO compatible. ASIO is a trademark and software of Steinberg Media Technologies GmbH”

henkdegroot commented 2 years ago

So I think the words "ASIO compatible. ASIO is a trademark and software of Steinberg Media Technologies GmbH”

So reaching the next question, in which screen (installer) should we show this information? First screen is a Welcome message. image

Second screen, is ASIO (or JACK) specific and only displayed when there is no driver installed. This can be updated to always show for ASIO and have the corresponding text included. image

Third screen, GPL Licence Agreement. I would say this needs to be kept GPL specific. image

Fourth screen, install location. This does not seem to be the appropriate page. image

Final screen, completing page. This could have the text included. image

Alternative, a new dialog could be introduced specific for the ASIO licence information. If this is selected, should it have an "I agree" button or would a simple "Next" be sufficient?

The "About dialog" is referenced as well. Would this be a separate item in the menu (like what has been done for Qt) or do we just add some information to the About or Libraries tab?

Thinking the "command line" help/version option should also be updated. Correct?

Translatable or not? We had some discussions in the past about licence text and it's translation. Does this text require translation?

Sorry for all these questions, too many options to make a good educated guess.

pgScorpio commented 2 years ago

I would say use the second ASIO specific screen and maybe include a "(!) No ASIO drivers found!" or "(v) n ASIO driver(s) found." message.

(!) == Red exclamation mark icon, (v) == Green checkmark icon.

The "About dialog" is referenced as well. Would this be a separate item in the menu (like what has been done for Qt) or do we just add some information to the About or Libraries tab? Thinking the "command line" help/version option should also be updated. Correct?

I think a message at installation time should be sufficient.

Translatable or not? We had some discussions in the past about licence text and it's translation. Does this text require translation?

Why not translate if all the other texts are translated ?

gilgongo commented 2 years ago

@henkdegroot

I'd be inclined to just put it on the first screen. Can we put it in the blue area at the bottom so as to get it out of the way of the instructions? There is no "I agree" required by Steinberg, BTW.

The "About dialog" refers to what you get in the app, not the installer.

The command line is not mentioned in the Steinberg terms I don't think, but I guess if we wanted to be nice we'd put it in there (and therefore also in that damn man page...)

The translation issue is interesting. I suppose it makes sense to have it translatable although Steinberg don't mention that. For all I know there may be a "wrong" way of translating it. But maybe have it as a translatable string at least?

@pgScorpio OK, but that's a separate issue.

pgScorpio commented 2 years ago

@gilgongo

@pgScorpio OK, but that's a separate issue.

What is a separate issue ?

I suggest to use the ASIO specific screen that normally is only showed when no ASIO driver is installed. So when we always show this screen to show the ASIO disclaimer we should, maybe, have an indication whether an ASIO driver is installed or not.

gilgongo commented 2 years ago

@pgScorpio Sorry, I meant that if we are changing the way the messaging works or adding wording/layout changes then that's a separate thing we need to look at I think unless Henk wants to also do that.

The reason why I say put it on the first screen is that would having it on the second ASIO screen confuse things for users of the JACK version?

henkdegroot commented 2 years ago

The reason why I say put it on the first screen is that would having it on the second ASIO screen confuse things for users of the JACK version?

The ASIO screen does not apply to the JACK version. You get a JACK screen, when JACK is not found.

I like the suggestion of adding it to the ASIO screen with the extra icon to indicate error/green mark and might be easier in case we decide to move to a different audio integration.

@gilgongo, if added to the help/version output...then it should only be for the Windows build with ASIO. So no update to the man page I would say.

I also assume the disclaimer in the About screen should also only be there when actually running a build with ASIO support. Do you see it the same?

gilgongo commented 2 years ago

The ASIO screen does not apply to the JACK version. You get a JACK screen, when JACK is not found.

OK. Be that as it may, while the Steinberg agreement doesn't talk explicitly about installers, it does talk a lot about "Startup-/Splash-screens", which is why I think we may be safest putting on the first screen in the installer, since that's effectively a "startup" screen, even though you only see it once. And yes, I guess the rights statements need only appear in the ASIO version of the installer.

I forgot that the man page is only for Linux, so agree that's not relevant.

As to the extra icons - if you want to add those in then don't let me stop you if it's easy enough to do as part of adding the ASIO rights text.

henkdegroot commented 2 years ago

@gilgongo, well if we add it to the first page, then the ASIO page does not require changes (at least for now).

Following text is taken from the Steinberg agreement:

if an About Box or a Startup-/Splash-screen exists that includes any reference to any third party or third party’s right, “ASIO” and Steinberg’s copyrights notice or the ASIO compatible Logo and Steinberg’s copyrights notice in every About Box or every Startup-/Splash-screen.

They also have the OR in bold and even underlined.

I believe the dialogs display in the installer are NOT the so cold startup-/splash-screens. To my knowledge a startup-/splash-screen appears when you start the software, which is something we don't have/use. For reference, the installer dialogs log do not mentioned Qt as well, so we don't have any third part right displayed in that.

Also the highlighted OR makes me wonder if we should just about the About box and just include it in the libraries tab.

What do you think?

gilgongo commented 2 years ago

Yes, we could interpret what they say as, "You need to add our rights statement in any startup screen, but that doesn't include the startup screen in your installer." But I feel that's not in the spirit of their agreement 🙂

henkdegroot commented 2 years ago

In the spirit of their agreements it is :) Will do a PR later this week (probable next weekend) with this added to the first screen and About dialog.

pgScorpio commented 2 years ago

Why not simply just add an About "ASIO" to help for the ASIO builds, like we also have an "About Qt". Wouldn't that be much simpler ? Even adding a splash screen (first thing started from main) would be simpler than adding conditional code al over the place... (And a splash screen also would make Jamulus seem more responsive at startup.)

gilgongo commented 2 years ago

Why not simply just add an About "ASIO" to help for the ASIO builds, like we also have an "About Qt"

It's debatable of course, but I don't think that would comply with Steinberg's wish that we put their rights statement on our about screen. Maybe I'm just being over-cautious.

Even adding a splash screen (first thing started from main) would be simpler than adding conditional code al over the place...

I can't comment on code complexity, but if we had a splash screen for the app, we'd still need an About screen with the Steinberg right statement on it.

henkdegroot commented 2 years ago

"About Qt". Wouldn't that be much simpler ?

I don't think it will matter. A conditionally inculded menu item or conditionally included text.

pgScorpio commented 2 years ago

I can't comment on code complexity, but if we had a splash screen for the app, we'd still need an About screen with the Steinberg right statement on it.

AFAIK the Steinberg documents says "About Box or every Startup-/Splash-screen." so not and

ann0see commented 2 years ago

We don't have a Startup/Splash screen, so I'd just go with a conditional logo in About. That makes the difference between JACK and ASIO enabled builds also easier.

henkdegroot commented 2 years ago

I was thinking about the following for the About and version text: about-libraries

command-line-version

Not sure how "easy" the installer Welcome page can be modified. The blue section (left part) is a relative small size image, adding text is not really nice. Perhaps I can add the ASIO logo here and in the "text" part of the dialog, add the disclaimer at the bottom...but still investigating if that can be done.

ann0see commented 2 years ago

Yes. But wouldn't we need a logo there?

... I still don't get why we need to add anything to the installer. The app would be enough, I hope...

gilgongo commented 2 years ago

@ann0see it's somewhere in the discussion above in Section 3, b of the terms, but the logo appears optional (maybe, with the possible exception of the website...). As to the installer: https://github.com/jamulussoftware/jamulus/issues/2417#issuecomment-1094251324 They list a number of places where they want it, and while they don't actually say "installer" it would be odd for them to exempt that.

(basically, they are extremely vague about what they want, but I'd rather we do our best and not be unnecessarily picky)

gilgongo commented 2 years ago

@henkdegroot if using the logo is easier, we can I think use that (they supply a jpg) instead of the text since the image has both the logo and the text:

Steinberg ASIO Logo Artwork.zip

gilgongo commented 2 years ago

BTW I may as well add the rights statement to README.md while we're at it.

hoffie commented 2 years ago

@henkdegroot

I was thinking about the following for the About and version text:

I like that very much. We should give credit where credit is due (and even more so when required by a license... ;)). It's also appropriate to list ASIO SDK as third item after Qt and opus, in my opinion. We must comply with the license demands, but we should not make ASIO stand out too much. Also, it would obviously be best if all of this would be restricted to Windows ASIO builds.

As for the installer, I think we should add the text as well as we do display other license text, too. The existing combined "license agreement" page seems appropriate (this page may seem like "it's just the GPL", but it isn't -- it contains licenses of other bundled libraries. Maybe this should somehow be made more obvious by adding a header or something).

I don't think we should add splash screens or additional installer pages as part of this issue.

henkdegroot commented 2 years ago

I think we should add the text as well as we do display other license text, too.

You are correct, the license text is loading the COPYING file from the root folder. I do not see an easy option to combine two files and if that would be possible, it would add the ASIO text at the end of the file. Would it be okay to have a COPYING_ASIO which contains the same text as the existing COPYING file and also include the required ASIO text just after the OPUS details.

The installer can then load the file depending on JACK or ASIO. And the first screen of the installer can then include the ASIO logo.

ann0see commented 2 years ago

The installer can then load the file depending on JACK or ASIO.

Better copy the COPYING_ASIO file to the installer via deploy_windows.ps1 (that's what I'd do since this allows us to have less logic in the installer

henkdegroot commented 2 years ago

installer via deploy_windows.ps1

Not sure if that is a good idea, think it would be best to keep "installer" related logic in the installer nsis and that is already capable of handling the jack/asio condition.

My concern is more about having two almost the same "COPYING" files in the root.

ann0see commented 2 years ago

I mean you could also just echo (append) the ASIO text to the COPYING file programatically?

henkdegroot commented 2 years ago

I did not realize that the logo also includes the rights statement and therefore believe we do not have to add the steinberg text to it after all. Here is a sample of the start and finish page of the installer, they both use the same bitmap image: installer-welcome installer-finish

This will only be used when the installer is created for the ASIO version.

Let me know what you think about this.