You can also add another big cons: the only supported way to run Signal is to own a device that runs code that you can't control on the main CPU (an iPhone; or an Android device, which also means running proprietary drivers in user space in practice). I know, I'm repeating myself.
You can manage to use Signal with most features without the need to run proprietary blobs by registering your phone number using signal-cli or axolotl (and maybe alternatives, but I haven't tried). They can run on a regular desktop or on a GNU/Linux phone, and then pairing Signal-Desktop with it. This is not straightforward, and forget convenience on the phone for now (I haven't managed to make groups work on UIs based on signal-cli though they theoretically should, Axolotl does not fully support new groups and by that I mean it's missing essential features like accepting an invitation).
Then, the blobs you are running are "only" in your phone's modem, unless you also managed to use some service providing SMS from the internet.
This is totally unsupported because it depends on alternative Signal clients that are not allowed on the Signal's network. For some reason Signal-cli and Axolotl don't seem to have been asked to stop from the Signal team, but it happened to a Signal fork, Free-Signal, which only goal was to de-blob Signal. And they are in their own right to do so, I'm not questioning this.
This is painful, really. Signal is so close to be great. Matrix / Element works well enough. It has rough edges but I (re)-discovered that Signal has some too and I'm not speaking about this whole situation.