Signal client for Sailfish OS

I think so long as you are transparent about your use of AI so people can make a decision that best fits them, fundamentally you shouldn’t care what others think on the matter. It’s your fork and you are associating your name with it. At the end of the day, you are the author, not the AI. You take (or should take) responsibility for the code and make sure you fundamentally understand it. After all, this is people’s personal messages we’re talking about here, you should treat that with the utmost importance.

If you want to be transparent about it, I’d suggest using the Assisted-by with specifying the provider + model. See AI Coding Assistants — The Linux Kernel documentation

I’ve written an AI Policy for my org (Buddies of Budgie). You’re welcome to get any inspiration from that and the Contributing guide that enforces DCO if you’d like. Or you can just completely ignore what I’m saying, do your own thing, and that’s that – no obligation from you of course.

9 Likes

It’s not the same thing. I’m pretty confident when you write code most of the time you inherently understand what you’re doing. AI does not. We all make mistakes but the type of mistakes can be very different.

1 Like

As promised:

I’d like to start with repeating @Rikudou_Sennin’s response. Whisperfish is published under the GNU Affero General Public License 3.0. @Toperz has the right to fork and make their own app. However, I received multiple responses yesterday from which it was apparent that people believed that Semaphore is a continuation of Whisperfish, rather than a totally independent project forked from Whisperfish. This is what warranted my rather hostile response. My apologies for the friction caused.

I do not believe any rights are being violated here. However, in a free software community, there are some social norms, which explain the severe reactions in this topic, including my own.

Whisperfish is actively developed software. I will dare say that Whisperfish is the most complete Signal implementation, outside of Signal’s own clients. Most of the UI was overhauled in 2021/2022 by @ichthyosaurus. At the time, it was one of the most elaborate, Sailfish-native user experiences. I believe it still is. The back-end was developed by me, and now by @direc85, taking care to correctly implement the very many privacy features that Signal has been building over the years. At the time, this involved building our own proper Rust cross compilation environment. The three of us spend months and years to get to a point where Whisperfish is usable by a few hundreds of real people. These people seem to appreciate Whisperfish, and we all do our best taking feedback from our user base.

It’s understandable that people are surprised, or even offended, when a new community member claims to show major improvements in Whisperfish. Especially the list of “Signal features supported”: all these features are present in Whisperfish, and the list reads rather deceptive. Whisperfish/Semaphore’s sticker support only shows an emoji (and not the full sticker system of Signal). Voice/video calls are not experimental in either: they’re just unfinished and only show a call notification. Semaphore’s source code does not show any changes to either.

Most of the mentioned UI features would be very welcome in Whisperfish. Link previews, message forwarding, a more elaborate video player (now that Gallery is open source, can someone please implement the Gallery UI for pictures?) are all really useful.

Your changes amount to 76 files changed, 2545 insertions(+), 2782 deletions(-) in QML code alone. This implies some huge changes in UI features and look. Sharing screenshots could help everyone understand the benefits of your work. Upon reading some patches, I notice you have replaced panic!/unwrap/expect calls with error-handling, but your changes fail to handle the errors: they print an error and continue operating through invalid states.

Most, if not all of these changes were vibe coded with Claude, as you mention yourself, as is clear from your Github profile (i.e., forks of libsignal-service-rs, etc., show Claude’s profile icon), and as is clear from the code itself. I don’t mind people using code generation tools or even vibe coding in general. I, too, have spent some money on drying up rivers in France lately, and it’s fascinating what those tools can do. However, the changes in your fork are committed in ignorance, and without human review.
Given the size of your changes, (50864 insertions(+), 38524 deletions(-)), I cannot possibly read through it all. However, even my few cherry-picks show rather fundamental mistakes. Additionally, the feature list is grossly overstated by your LLM. I’ve also let some vibe coding tools loose on Whisperfish to see what they can do, and even regarding simple tasks they make mistakes. Here’s @direc85 fixing a mistake which I made using Mistral Vibe this week, as a showcase: Split receipts from AugmentedMessage (!758) · Merge requests · Whisperfish / Whisperfish - Signal on Sailfish OS · GitLab.

I have two major issues with the use of LLMs for code generation. First, it tricks people into believing they know what they are doing; it makes one believe the generated code is correct. Second, the resulting diffs and commits are often unreviewable. Another example pertaining to Whisperfish: Implement Groups V2 Zero-Knowledge Operations and Profile Credential Requests by roder · Pull Request #401 · whisperfish/libsignal-service-rs · GitHub. This makes collaboration on a codebase practically impossible.

I want to make one final point. Signal is relied upon in life or death situations. Contrary to my own advice to use upstream Signal apps for these cases, I have strong reasons to believe that Whisperfish, too, is used by people in various dangerous situations. Reliability and safety of applications, especially something like a Signal client, depends on testing, peer-review, and deep understanding of Signal’s architecture and various protocols.

I hope my writing clarifies the concerns raised by the community, and I hope you will consider my concerns, if you decide to continue with your fork. In case you decide you want to join forces, I will be more than happy to welcome you to the Whisperfish project. I am truly sorry that this has been your experience in the Sailfish OS community. I commend your enthusiasm and effort behind Semaphore, and I believe in your goodwill as a contributor. In my experience, this community is generally super positive and happy, and that is the primary reason I work on Whisperfish.

42 Likes

Of course these sayings are generalisations. Exaggerating it makes no sense. Advisers are supposed to be experts, not everybodies.
I want to mention a video that Sen.Bernie Sandets posted recently. He asked Claude if its AI was safe to use. The Anthropic AI gave a lecture about the privacy violations of its own tool. LLM’s are easy and speed up work, but privacy ? No.

Beethoven
Thank you for the link. I read that PipeWire could be used for video in Whisperfish. Has that been implemented already?
Is the inability to cross platform an android app in Sailfish the cause of no camera access in Threema Libre?
Because android apps are in container?

Help me understand how anyone could not base their evaluation on what you made public. Isn’t it kind of the idea with open source that your competence shows in the work you publish?

Disabled error handling is a huge red flag to me, as I’ve seen this having bad consequences for projects. Now, I haven’t reviewed your code, so it might be that you did this with precision, knowing perfectly well where it would be safe. On the other hand, given the AI provenance of your changes, my default assumption would be one of great suspicion - and I would be inclined not to engage with the code, for reasons I outlined elsewhere:

While I don’t doubt your good intentions, I can understand the reception your announcement got. This could have been launched very differently, potentially with a better initial outcome.

Working together and combining efforts seems like a good thing to me. I hope you will find enough alignment in goals to reach cooperation on some level, unless the two projects have already diverged too far to share patches.

4 Likes

Well the whole extent of the fork looks to be. The absolute majority of the app is still just just Whisperfish.

It is, as mentioned several times, perfectly ok to fork an open source project. That was never my point of criticism.

However, rebranding a 2-week AI fork, publishing it widely and asking for donations is not “doing it for myself”.
The tone of the feature comparison was also such that it seemed to imply that Whisperfish was incapable of making these features or had even rejected them (as opposed to had simply not gotten to them yet). And apparently it was wrong too.

Not even trying to contribute is a really dodgy move - very much allowed but expect due criticism.

I am no Rust programmer, but replacing .unwrap() with .expect("some message") is not “proper error handling”. It is basic “please improve my app” slop. It is simply a design opinion. Add to that the cases where execution was let to continue as pointed out above.

7 Likes

tl;dr: To me, this looks either like a cash grab, or like yet another in the current string of attacks against Signal. Stick with Signal/Whisperfish, and do not trust the Semaphore app.


This person/bot took Whisperfish, let an LLM/“AI” rewrite Whisperfish’s code in a few giant, absolutely unreviewable commits with misleading commit messages, changed and deleted copyright headers, then published it as if it were a continuation of Whisperfish. Everything about this looks clearly AI generated to me, even the posts on OpenRepos and here in the forum (which @Toperz now started to delete).

Since Signal’s security is critical, it’s more than irresponsible to do coding like this. If this were a person/bot with malicious intent, it would be extremely easy to hide malicious changes in code like this. Claiming to work in “cybersecurity” while publishing code like this makes it even more untrustworthy. [edit: they just deleted the post claiming this]

Whisperfish has been in continuous development mainly by @rubdos and @direc85 almost every day over the last ~6-7 years. @Toperz has been around only a few months. This is not about bashing newcomers, but this person/bot shows in the code and in posts above that they don’t understand basics like Sailjail or Silica design. They already tried to social-engineer their way into Whisperfish a while ago with minor contributions without reacting to @rubdos’ questions or disclosing their use of AI (1, 2, 3, 4, 5). Apart from that, they don’t have any other public presence regarding Sailfish and no other published apps. Saying “trust me bro” and acting offended does not replace good practice and it does not make Semaphore trustworthy.

This all reminds me of the xz backdoor and the pattern of recent attacks against Signal: 1, 2, 3, 4. Given that Signal/Whisperfish is a critical app, and given that Sailfish is becoming more popular right now, and given that the EU wants to become more technologically independent, we should be very careful what random apps to trust. Read @rubdos’ post above again. By the way, @rubdos is an actual security researcher at an actual university who actually knows what he is doing.

Basically, this bot/person pushed Whisperfish through an LLM/“AI”, changed the name, and added their sponsorship info. To me, this looks either like a cash grab, or like yet another in the current string of attacks against Signal.

Do not trust the Semaphore app.

8 Likes

Awww, we had our own little FOSS drama and I missed it :sob:

Seriously though, this is not a cult. That’s the desperate last attack of someone who has been called out in a way that cannot be argued against.

Of course, you’re right :head_shaking_vertically: