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.