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

Permission to distribute Signal or a renamed fork on F-Droid #9966

Closed
tw-hx opened this issue Aug 27, 2020 · 29 comments
Closed

Permission to distribute Signal or a renamed fork on F-Droid #9966

tw-hx opened this issue Aug 27, 2020 · 29 comments

Comments

@tw-hx
Copy link
Contributor

tw-hx commented Aug 27, 2020

Sorry to file this as a bug report -- after my original bug report was closed, as suggested there I posted on the Signal User Community forums and filed a pull request in May 2020, but haven't received a response and don't know how else to reliably get in contact with the team.

As per the User Community discussion, I have written some patches to Signal that stub out Google Play Services, Firebase Cloud Messaging and Machine Learning code, so Signal can build and run without these libraries, connecting via WebSocket. I mentioned this on the F-Droid forums and users were receptive to the idea of distributing a Signal build there that meets their FOSS requirements, however this has never worked out in the past; the last time this was mentioned Greyson indicated signing builds would be a holdup.

So, which approach would the Signal team prefer?

  1. Signal merges some of these patches and removes Google/Firebase code from the Website APK release. The hard part would be finding a replacement Machine Vision library for facial recognition; a Maps patch using OpenStreetMap is already in the pull request list. Signal could sign builds, F-Droid could build them reproducibly, and list Signal's own signed builds in its catalogue if they match. Signal gets more users on official builds and F-Droid users get an easy download and update experience. This would also benefit MicroG and perhaps Huawei users who can have trouble with Google connections.
  2. Allow F-Droid to list a forked and renamed client based on these patches e.g. how they distribute Fennec instead of Firefox. Users are made aware it's unofficial and might break. It'll likely miss a few features e.g. facial recognition. I'd advocate for keeping build expiry, so in the event updates stop, legacy clients won't persist beyond a couple of months. They build from source + patches and sign themselves. Should still be a net win for everyone.

In any case, could Signal please merge the patch to remove a few unnecessary calls to GMS APIs? They're all one-line tweaks (usually using Signal's existing Util library code e.g. hex conversion) and that would make maintenance easier! I've signed the CLA; the best source is the latest branch on my GitHub with -FOSS in the name (currently 4.69.6.0-FOSS). Thanks :).

@dpriskorn
Copy link

If it was up to me I would simply remove all ML code and features. Face recognition is not secure anyway as a picture could be used to trick it (I never tried Signal so I don't know what the ML is used for besides that)

@greyson-signal
Copy link
Contributor

Hey there! Just some background on the website release: it was never intended to be completely free of any Google Play dependencies -- instead, all our builds have a fallback such that during registration, if we detect there's no Play Services, we will fallback to using a websocket for notifications. Using FCM for notification delivery still provides the most reliable user experience and is something we'd prefer to use if the user has Play Services available on their device.

Concerning F-Droid, we already providing an auto-updating APK directly from our site, and we really don't want forked versions of the app maintained by other parties connecting to our servers. Not only could the users using the forked version have a subpar experience, but the people they're talking to (using official clients) could also have a subpar experience (for example, an official client could try to send a new kind of message that the fork, having fallen out of date, doesn't support). I know you say you'd advocate for a build expiry, but you know how things go. Of course you have our full support if you'd like to fork Signal, name it something else, and use your own servers.

I think the rest of the discussion can happen on #9644. Thanks!

@tw-hx
Copy link
Contributor Author

tw-hx commented Sep 11, 2020

Hi @greyson-signal , I've force-pushed the patch in the pull request to just the utility function removal, thanks if you can merge that for now.

@goyalyashpal
Copy link

Concerning F-Droid, we really don't want forked versions of the app maintained by other parties connecting to our servers. Not only could the users using the forked version have a subpar experience, but the people they're talking to (using official clients) could also have a subpar experience.

@greyson-signal wow, big misunderstanding here. fdroid doesnt distribute a "forked version" - it builds the app from the official source code repo - NO FORKING at all. It automatically builds the update 1-3 days after u push an update in OFFICIAL repo - again from the SOURCE in OFFICIAL repo.

i dont know where did u infer that fdroid is about forking and all. or how did u miss the part that it builds from OFFICIAL source. But i hope u reconsider ur stance know that u know.


some links:

@goyalyashpal
Copy link

fdroid also supports reproducible builds

@greyson-signal
Copy link
Contributor

@yashpalgoyal1304

wow, big misunderstanding here. fdroid doesnt distribute a "forked version"

Nope, no misunderstanding on my part. I wasn't saying that F-Droid inherently requires forking -- I was responding to OP's second suggestion:

Allow F-Droid to list a forked and renamed client based on these patches

Hope that helps.

@gsbnlda
Copy link

gsbnlda commented Oct 28, 2021

How much safe this link then ? https://langis.cloudfrancois.fr/ adding respiratory Fdroid . since signal is privacy concerned .

@tw-hx
Copy link
Contributor Author

tw-hx commented Oct 28, 2021

@gsbnlda as safe as any other fork I guess. Langis still includes Google binary blobs, just sets them not to be used, and publishes its source code.

@sneak
Copy link

sneak commented Jan 11, 2022

we really don't want forked versions of the app maintained by other parties connecting to our servers

Note to anyone who happens across this thread that that's not at all how free software works. If Signal authorizes their userbase to connect to their servers, Signal has authorized their userbase to connect to their server. Those users can use whatever clients they wish.

Publishers of open source/free software applications don't get to dictate what the forks do with the code. Forks of Signal are 100% free to leave the official Signal(tm) API server URLs in the source code of those forks, and distribute those forks. The software license 100% allows this, and the fact that Signal staff "don't want forked versions of the app" being used by users is, well, explicitly contrary to the license which Signal releases the Signal clients under.

That's literally the point of open source: users can use forks if they so desire.

Signal wants to control the "product", but critically there are two important parts here:

  1. Software. An app you run on your phone. It has a software copyright license. In this case, it's GPL 3. This means you are free to fork the software for any purpose and distribute it, and the original authors have no say whatsoever in the modifications you make or your relationship to the users who use that software.

  2. A service. This is an API run by Signal that end users connect to. It's governed by a Terms of Service which applies to those users. It does not ban third party clients (though it could, but that would be insane, like Google saying you have to use Chrome to access google.com and if you use IE you're a criminal) and it applies to end users that connect to those APIs, not publishers of client software.

Fork away. Rename it so you don't violate Signal trademarks, but don't let these sorts of mixed messages dissuade you: the software license expressly permits you to make and distribute forks that talk to the Signal official API. If Signal doesn't want Signal's end users using third party clients, they can take that up with them in their Terms of Service. As of right now that has not happened, and I do not expect that it will.

@raffaem
Copy link

raffaem commented Jan 15, 2022

Concerning F-Droid, we already providing an auto-updating APK directly from our site, and we really don't want forked versions of the app maintained by other parties connecting to our servers. Not only could the users using the forked version have a subpar experience, but the people they're talking to (using official clients) could also have a subpar experience (for example, an official client could try to send a new kind of message that the fork, having fallen out of date, doesn't support).

@greyson-signal I'm sorry, I'm not an experienced coder, but isn't that what "protocol version" is supposed to do?

You are basically saying, if I' not mistaken, that User A with the forked version uses "Signal protocol 1".

User B with the official app uses "Signal protocol 2" (the new kind of message).

Then both would have a way to find out which protocol version the other is using. So the version of User B could either send the message using "Signal Protocol 1", or if that protocol has no way to deliver that particular content, the version of User B would display "Sorry, the version of Signal used by User A doesn't support that content. Please ask User A to update".

By the way, if the "new kind of message" is introduced in Signal v. 25, what happens to users of Signal v. 24? They can't talk with users of Signal v. 25, and viceversa?

I mean, Matrix (and before that, IRC) has basically the same idea of Signal. Is there a reason why there are no problems in using different apps (Element, WeeChat) with the Matrix protocol, but it's advisable to have just one app for the Signal protocol?

@gsbnlda
Copy link

gsbnlda commented Jan 19, 2022

Totally confused all above answers and this also https://www.twinhelix.com/apps/signal-foss/ , A fork of Signal for Android with proprietary Google binary blobs removed.

@Cerberus0
Copy link

Cerberus0 commented Feb 18, 2022

If Signal doesn't want Signal's end users using third party clients, they can take that up with them in their Terms of Service. As of right now that has not happened, and I do not expect that it will.

As of May 2018, Signal's Terms of Service have stated: "You must not (or assist others to) access, use, modify, distribute, transfer, or exploit our Services in unauthorized manners, or in ways that harm Signal, our Services, or systems. For example you must not (a) gain or try to gain unauthorized access to our Services or systems; (b) disrupt the integrity or performance of our Services; (c) create accounts for our Services through unauthorized or automated means; (d) collect information about our users in any unauthorized manner; or (e) sell, rent, or charge for our Services."

In this thread, a Signal team member has explicitly stated that "we really don't want forked versions of the app maintained by other parties connecting to our servers." Doesn't this already mean that forks are explicitly "unauthorized" from using Signal's official API (the "Service")? From what I've understood, anyone who uses a fork to connect to the Signal service does so in an unauthorized manner and is therefore breaking the ToS, and anyone who publishes forks that connect to the Signal service is also breaking the ToS for "assisting others" to do so in an unauthorized manner. I am not a lawyer.

@sneak
Copy link

sneak commented Feb 19, 2022

The choice of client software does not make access to a server authorized or unauthorized. That would be like Google saying that you're not authorized to use google.com unless you do so with Chrome. That's not how the internet (or the laws surrounding the internet) works at all.

and anyone who publishes forks that connect to the Signal service is also breaking the ToS for "assisting others"

The ToS does not apply to those who publish software based on the Signal client source code, only the software license does. The ToS applies to users who connect to the Signal service. Do not confuse Signal the free software application (with a free software license that explicitly permits forking!) and signal.org the API and web service (which is governed by the ToS).

@Cerberus0
Copy link

The choice of client software does not make access to a server authorized or unauthorized. That would be like Google saying that you're not authorized to use google.com unless you do so with Chrome.

Believe it or not, that is exactly what appears to be happening here. A Signal representative just said above that they do not want people who use unauthorized third-party clients to use "signal.org the API and web service (which is governed by the ToS)" because it could degrade the experience of those who use the official authorized clients: "Not only could the users using the forked version have a subpar experience, but the people they're talking to (using official clients) could also have a subpar experience (for example, an official client could try to send a new kind of message that the fork, having fallen out of date, doesn't support)."

Signal's ToS says that you may not assist others to use or exploit their Services in an unauthorized manner. I still don't see how the use of an unauthorized client doesn't count as unauthorized use of the service, given what they've so clearly expressed above. In order to comply with Signal's ToS, it looks like anyone who decides to publish a fork should remove every connection to the Signal service unless they've been explicitly authorized to keep those connections. Again, I am not a lawyer.

This conversation appears to be going in circles, and besides, this issue tracker is not meant to be used as a discussion forum. It might be best to move this over to the Signal community forum: https://community.signalusers.org/

@sneak
Copy link

sneak commented Feb 21, 2022

Signal's ToS says that you may not assist others to use or exploit their Services in an unauthorized manner. I still don't see how the use of an unauthorized client doesn't count as unauthorized use of the service, given what they've so clearly expressed above. In order to comply with Signal's ToS, it looks like anyone who decides to publish a fork should remove every connection to the Signal service unless they've been explicitly authorized to keep those connections. Again, I am not a lawyer.

Signal's ToS applies to users of the signal.org API service, not those who publish software. That's the part that has you confused. The ToS does not apply to people publishing forks at all, if they are not users of the signal.org API service.

@Aeris1One
Copy link

Anyway, ToS, opposite to Software Licence, have no legal value!

If Google wanted google.com to be only reached through Chrome, they would have enforced it with some kind of checks and ban accounts who are using Firefox.
They are only able to ban accounts, not to pursue anyone who break the ToS, in fact ToS are not legal requirements for a website (except in case the website offers something paid, then it becomes Terms of Sales). Put on the other hand, Google can ban anyone anytime, even if the banned person isn't breaking the ToS.

Same applies for Signal, if they don't want a fork to appear and connect to the server, the have two choices :

  • change the software licence, but older versions would still be under GPL and so forks would be able to appear based on them
  • setup a check on the server to ban anyone who is connecting through a non-official client

I won't personnaly create any fork, nor FDroid team will accept any fork in official repo, because them and I don't want to be in conflict with Signal devs. But just wanted to clarify : there's nothing that prevents you from creating forks connecting to the server ! Neither the ToS, nor the Software Licence.

@cherti
Copy link

cherti commented Sep 23, 2022

@Aeris1One

Anyway, ToS, opposite to Software Licence, have no legal value!

That is entirely irellevant here, because the ToS are not in opposition to the License, as the License doesn't grant usage permission of the signal.org API. The License gives you permission to fork the code and change it as you desire. That is however, entirely separate from using that code with the signal.org API. The code is covered by the license, the signal.org API is covered by ToS.

Otherwise I could legally fork the code of Signal or Matrix and could just implement a DoS-Tool in those codes and then neither Signal nor Matrix.org could complain that I DoS'ed them? That would be the consequence of what you stated and it is just plainly incorrect.

@cherti
Copy link

cherti commented Sep 23, 2022

@sneak

Note to anyone who happens across this thread that that's not at all how free software works. If Signal authorizes their userbase to connect to their servers, Signal has authorized their userbase to connect to their server. Those users can use whatever clients they wish.

One can have one or the other opinion on this issue, but this is plainly incorrect. The GPL covers the code, but the permission to change the code does not include permission to use specific services. They are covered by ToS, which in this case specifically state that you may not use modified clients. You absolutely may modify those clients and use them on your own installation, but not with the signal.org API. That is not covered by AGPL, as far as I am aware of the license. If there is a passage that I missed that explicitly states that AGPL overrides ToS, then I'd be curious to know. :)

Th

@sneak
Copy link

sneak commented Sep 23, 2022

They are covered by ToS, which in this case specifically state that you may not use modified clients.

The ToS says no such thing. This is a commonly repeated falsehood.

Go read it yourself: https://signal.org/legal/#terms-of-service

@cherti
Copy link

cherti commented Sep 23, 2022

I did, emphasis is mine:

Harm to Signal. You must not (or assist others to) access, use, modify, distribute, transfer, or exploit our Services in unauthorized manners, or in ways that harm Signal, our Services, or systems. For example you must not (a) gain or try to gain unauthorized access to our Services or systems; (b) disrupt the integrity or performance of our Services; (c) create accounts for our Services through unauthorized or automated means; (d) collect information about our users in any unauthorized manner; or (e) sell, rent, or charge for our Services.

They very explicitly say that. Alternatively, I'd like to see how modified clients count as authorized given every single statement that has been made by the Signal team in the past says otherwise.

@sneak
Copy link

sneak commented Sep 23, 2022

Yeah, the authorized manners are those set forth in the ToS. The ToS says nothing about forks or clients.

You can of course make the legal argument that unauthorized manners are anything the service operator says is unauthorized. This is what the CFAA does, and it's been generally rejected by courts and industry.

Fact of the matter is, this is actually off-topic for this thread. The only part that applies to the forking and publication is the software license - not the ToS. The ToS applies to users. That means that if you want to distribute a fork, including a fork that connects to official signal.org servers, the AGPL (the software license) says that yes, you can do that.

@cherti
Copy link

cherti commented Sep 23, 2022

So you are now not saying anymore that the ToS don't say that, but that the ToS are invalid? Just to understand your reasoning here.

@sneak
Copy link

sneak commented Sep 23, 2022

Or I'd like to see how modified clients count as authorized given every single statement that has been made by the Signal team in the past says otherwise.

The ToS applies to those who connect to the service as users.

The statements made by the Signal team to which you refer are aimed at developers who want to release software. The only terms that apply there is the AGPL license to the code.

It's clear Signal doesn't want forks connecting to their service. A user using a fork is not however prohibited in the ToS, and a developer publishing a fork that talks to signal.org is not prohibited in the software license.

Furthermore, even if Signal were to codify this preference into the ToS, it's unlikely that it would be enforceable, technically or legally. As I mentioned above, this would be like Google saying that anyone using google.com without using Chrome to access it is in violation of the ToS (and potentially the CFAA!). It's nonsense and the Signal people know that.

@sneak
Copy link

sneak commented Sep 23, 2022

So you are now not saying anymore that the ToS don't say that, but that the ToS are invalid? Just to understand your reasoning here.

I'm saying that:

  • the vague and circular "anything that is unauthorized is unauthorized" in the ToS is not a prohibition on the use forked clients with signal.org as written, and, thus
  • the ToS does not prohibit use of forked clients on signal.org, and,
  • the stated preferences of the Signal team are not legally binding addenda to the published ToS

@sneak
Copy link

sneak commented Sep 23, 2022

They very explicitly say that.

That's not what "very explicitly" means. In fact, the part of the ToS you highlighted:

You must not (or assist others to) access, use, modify, distribute, transfer, or exploit our Services in unauthorized manners

...is about as vague as something could be on the topic of modified client software.

@cherti
Copy link

cherti commented Sep 23, 2022

The statements made by the Signal team to which you refer are aimed at developers who want to release software. The only terms that apply there is the AGPL license to the code.
It's clear Signal doesn't want forks connecting to their service. A user using a fork is not however prohibited in the ToS, and a developer publishing a fork that talks to signal.org is not prohibited in the software license.

If you say the rules under the "Using the service" section don't apply to users, then I can't help feeling that this is primarily bending the words so they say what you want them to say. In which case I'm not sure if this would be a fact-oriented discussion.

@Aeris1One
Copy link

In fact, a developer publishing a fork connecting to signal.org API is breaking the ToS (kind of, the ToS said nothing about specifically modified client, but the Signal team stated that forks are unauthorized). The developer account could be banned or sued (but Signal is unlikely to win with such vague ToS).

Using a modified client is not unauthorized.

That's what I understood from your arguments

@cherti
Copy link

cherti commented Sep 24, 2022

Using a modified client is not unauthorized.

From how I read the ToS it is, because everything but the official clients is not authorized and the ToS specifically state that one must not use the service in unauthorized manners, which such a client would be. That is under the "Usage" section, so I intuitively this statement applies (primarily even) to usage, otherwise it seems unlikely this section would explicitly carry the title "Usage".

@sneak
Copy link

sneak commented Sep 27, 2022

In fact, a developer publishing a fork connecting to signal.org API is breaking the ToS (kind of, the ToS said nothing about specifically modified client, but the Signal team stated that forks are unauthorized). The developer account could be banned or sued (but Signal is unlikely to win with such vague ToS).

This assumes that someone forking the Signal client code and publishing their modifications is also a user of the Signal service and API, which, while practically is a safe assumption, is not guaranteed. You could find a developer who has never once used Signal and has no account (and thus the ToS does not apply to them) and pay them to fork the client, make any desired modifications, and publish them, leaving all API references pointing to the official signal.org servers. This is 100% permitted via the AGPL.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

10 participants