Giter VIP home page Giter VIP logo

Comments (25)

rubdos avatar rubdos commented on September 26, 2024 4

Good! I have an army of alpha-testers over at the Sailfish community. We'll need them, because our tests are ... well we have more alpha testers than tests :'-D

from libsignal-service-rs.

mjtorn avatar mjtorn commented on September 26, 2024 4

Sure I do agree! And this is a very interesting turn of events, worthy of celebration :)

from libsignal-service-rs.

rinigus avatar rinigus commented on September 26, 2024 3

Let me chip in on Silica, Ubuntu Touch, and Kirigami QML. As started with Pure Maps, it is possible to split QML into platform-specific and generic parts. This approach with the platform-specific parts has been used also for OSM Scout Server and Amazfish. The latter has the newest revision of these platform-specific bits and should probably extended from there.

The platform gets selected during compilation, so you can support (on GUI side) all these platforms. It is not super-trivial to do so and the app has to be rewritten in part, but not a huge effort either. For SFOS developers, it means that you can actually develop new functionality on the desktop which is way faster than syncing with the device. At least that is my experience with the maps apps.

I presume that the code for contacts updates from OS would be also specific to the platform. Maybe keepalive (and it's analogs support on other platforms) as well, but that is in part already there in Pure Maps QML platform-specific bits. Just if you wish to interact with the device suspend from Rust/C, it may require some bits there as well.

PS: @Be-ing - just subscribe to the room without browsing Matrix server

from libsignal-service-rs.

boxdot avatar boxdot commented on September 26, 2024 3

I agree.

from libsignal-service-rs.

shekohex avatar shekohex commented on September 26, 2024 2

I support this transition, for obvious reasons:

  1. the new one will be maintained and supported by the Signal team, which is nice!

  2. it's fully written in Rust, no more C and Rust glue.
    (although, our implementation on top of the C base, was already somewhat safe and easy to use, but I guess nothing better than a fully Rust codebase from the beginning)

  3. I already use some of it's parts in my application owlchat/keystore 😉

So, I hope the refactoring step will be easy and the tests pass correctly!

from libsignal-service-rs.

rubdos avatar rubdos commented on September 26, 2024 2

If we are to put real effort in presage, let's get as much as possible extracted from Whisperfish into there, modernising where necessary. Would be a bit sad to duplicate my last year's worth of work :p

from libsignal-service-rs.

gferon avatar gferon commented on September 26, 2024 2

I also agree! Great news, really!

from libsignal-service-rs.

thvdveld avatar thvdveld commented on September 26, 2024 2

I agree.

from libsignal-service-rs.

matej-g avatar matej-g commented on September 26, 2024 2

Obviously agree 😉

from libsignal-service-rs.

gamag avatar gamag commented on September 26, 2024 2

I agree too, obviously, sounds very promising!

from libsignal-service-rs.

rubdos avatar rubdos commented on September 26, 2024 2

That went a lot quicker than I had anticipated! Yay. Let's get this under AGPLv3 then, starting at #83 .

from libsignal-service-rs.

Michael-F-Bryan avatar Michael-F-Bryan commented on September 26, 2024 1

I agree with @shekohex that it doesn't make sense to use FFI to link to the C library when there is a native Rust version available. A nice consequence of switching is that it also avoids a bunch of effort keeping libsignal-protocol-rs in sync with changes in the C library.

This sounds like a no-brainer 👍

from libsignal-service-rs.

Be-ing avatar Be-ing commented on September 26, 2024 1

So, if you want to join effort, I kindly invite you to #whisperfish on Freenode or #whisperfish:rubdos.be on Matrix to have a chat. We have cookies!

I'm having trouble adding that server in Element:
image

We've been discussing in #plasmamobile:kde.org. If you're open to replacing the Jolla QML library with Kirigami, I think the KDE developers would welcome Whisperfish joining Plasma Mobile.

from libsignal-service-rs.

rubdos avatar rubdos commented on September 26, 2024 1

If we are to put real effort in presage

Extract from Whisperfish into https://github.com/gferon/presage

from libsignal-service-rs.

ntninja avatar ntninja commented on September 26, 2024 1

I see I'm on the list too. While I don't see why need my permission for enforcing additional restrictions on the existing GPLv3 code, I of course don't mind officially relicensing it either. So by all means, you have my full agreement! 🙂

from libsignal-service-rs.

rubdos avatar rubdos commented on September 26, 2024

Since this would basically archive 100% of the effort of @Michael-F-Bryan and @shekohex, tagging them here :'-)

from libsignal-service-rs.

Be-ing avatar Be-ing commented on September 26, 2024

Hi Whisperfish developers, I'm organizing an effort for a new mobile Linux Signal client using the new upstream Rust libraries. I'm planning to do as much as possible in Rust and use cxx for a thin C++ layer to connect the Rust to Qt Quick & Kirigami. I have glanced at the Whisperfish code and I don't think much of it would be useful for us because of the proprietary Jolla QML library and Sailfish OS-specific code, so I think it will be easier to start from scratch. Nevertheless, I'm trying to figure out what we can collaborate on. I am discussing this with the Axolotl developers as well.

I've discussed this a bit with the upstream Signal developers and they say the new Rust library is incomplete and the API may break at any time. I'm still unclear what the upstream libraries do and what will be necessary to implement ourselves. What exactly are the capabilities of this library? IIUC the upstream libraries only handle processing the messages and we'll have to handle the networking I/O and an encrypted database ourselves.

from libsignal-service-rs.

rubdos avatar rubdos commented on September 26, 2024

Hey @Be-ing , thanks for getting in touch! I saw the convo at Axolotl pass by a few hours ago :-)

This library is very capable. It's just been a bit unpleasant that libsignal-protocol-rs was finished a few weeks before Signal launched their signal-client replacement.

Before dismissing Whisperfish as a base for your project, please consider that we want to do the same thing. I want to absolutely work together with other people (including those from Axolotl, if we ever can share code).

In fact, there are multiple efforts (https://gitlab.com/rubdos/whisperfish/-/merge_requests/77, https://gitlab.com/rubdos/whisperfish/-/merge_requests/152, https://gitlab.com/rubdos/whisperfish/-/issues/183, and https://gitlab.com/rubdos/whisperfish/-/merge_requests/138) for refactoring the Whisperfish code into something more generic. The reason for the close coupling with SailfishOS is not because we want that. It's because it was so historically. If anything, SailfishOS support should be an automatically infered build target (worst case cargo build --feature sailfishos), such that other user interfaces can be supported.

I've had plans for a while to get async Rust decently integrated with qmetaobject-rs. Also woboq/qmetaobject-rs#102. If that's done, QML-interfacing should be as easy as putting a macro around a struct.


So, to go a bit more technical on the many existing libraries. These two are Rust libraries by Signal themselves:

  • signal-client: doesn't do what you think it does. It's not a client. It's an implementation of the ratchet and some other cryptographic primitives.
  • zkgroup is the cryptographic system that does the zero-knowledge group authentication stuff.

These are our libraries:

  • libsignal-protocol-rs: old equivalent of signal-client, equivalent of libsignal-protocol-c, also textsecure
  • libsignal-service-rs: equivalent of the old libsignal-service in Java
  • libsignal-service-actix: Actix Web-based backend for libsignal-service
  • libsignal-service-hyper: Hyper-based backend for libsignal-service

What a client still needs to implement is a GUI, local storage, and state management (database with a bit of logic when to accept a request and when not to). That's what Whisperfish does, that's also what Axolotl does. This is easily 10k lines for a modern Signal client.

So, if you want to join effort, I kindly invite you to #whisperfish on Freenode or #whisperfish:rubdos.be on Matrix to have a chat. We have cookies!

from libsignal-service-rs.

Be-ing avatar Be-ing commented on September 26, 2024

The reason for the close coupling with SailfishOS is not because we want that. It's because it was so historically. If anything, SailfishOS support should be an automatically infered build target (worst case cargo build --feature sailfishos), such that other user interfaces can be supported.

Oh, great! I didn't understand that was your intention. Have you thought about moving the Rust backend code to a separate library? We could collaborate on a set of Rust libraries implementing a common backend with different frontends. Or would you be open to replacing the Jolla QML libraries in Whisperfish with Kirigami? In that case, there wouldn't be a need for a whole new project.

I've had plans for a while to get async Rust decently integrated with qmetaobject-rs. Also woboq/qmetaobject-rs#102. If that's done, QML-interfacing should be as easy as putting a macro around a struct.

That would be cool. It also sounds like a ton of work that would be above my skill level. I'm just a beginner with Rust.

Why do you have two networking backends? Are you committed to using one or the other yet?

from libsignal-service-rs.

rubdos avatar rubdos commented on September 26, 2024

The reason for the close coupling with SailfishOS is not because we want that. It's because it was so historically. If anything, SailfishOS support should be an automatically infered build target (worst case cargo build --feature sailfishos), such that other user interfaces can be supported.

Oh, great! I didn't understand that was your intention. Have you thought about moving the Rust backend code to a separate library? We could collaborate on a set of Rust libraries implementing a common backend with different frontends. Or would you be open to replacing the Jolla QML libraries in Whisperfish with Kirigami? In that case, there wouldn't be a need for a whole new project.

Intention is a big word, but it's been in our heads for over a year. I'm not okay with dropping the proprietary QML interface, but I have absolutely no objection to remodeling whatever is needed to make KDE people happy. Splitting logic from UI is a good pattern anyway, but it'd be nice to have it still in the same repository :-)

I've had plans for a while to get async Rust decently integrated with qmetaobject-rs. Also woboq/qmetaobject-rs#102. If that's done, QML-interfacing should be as easy as putting a macro around a struct.

That would be cool. It also sounds like a ton of work that would be above my skill level. I'm just a beginner with Rust.

Why do you have two networking backends? Are you committed to using one or the other yet?

We're mainly using the Actix one. The Hyper back-end has been added recently by Gabriel, because "fun".
There's a major problem in async-Rust land: the interface to async is in std, but executors are not. Makes for a bit of a split, and that's why there's multiple back-ends.

from libsignal-service-rs.

rubdos avatar rubdos commented on September 26, 2024

(and in order to just join the room, use /join #whisperfish:rubdos.be. I'll try to get my federation fixed. Again.)

from libsignal-service-rs.

gferon avatar gferon commented on September 26, 2024

Hey @Be-ing adding more here, although it'll probably be discussed on the Matrix chat: I've started https://github.com/gferon/presage, which is a higher level library leveraging both libsignal-service and libsignal-client-rs - which was originally made to be used a test bed for new features with a CLI on Linux. I'd be glad if we could join effort and make something that's generic and can be reused everywhere!

from libsignal-service-rs.

Be-ing avatar Be-ing commented on September 26, 2024

Awesome. Yeah, the more developers involved, the better. I think we can work on a shared cross platform Rust backend with multiple frontend projects.

from libsignal-service-rs.

Be-ing avatar Be-ing commented on September 26, 2024

If we are to put real effort in presage, let's get as much as possible extracted from Whisperfish into there

Do you mean extracted from Whisperfish into this library? Or maybe into a new library which uses this?

from libsignal-service-rs.

rubdos avatar rubdos commented on September 26, 2024

As said in #83, the total of ibsignal-service-rs will be licensed as AGPLv3, because we link to libsignal-client. The simplest way to do so, is to ask permission of all people that ever contributed here to relicense their contributions under AGPLv3.

I'll make a checklist here of our nine contributors (I don't think we need include @traviscibot 😉 ):

If you are mentioned above, please reply to this pull request, saying you agree relicensing your code under AGPLv3. If you do not agree (but please do), we will have to put your part of the code under GPLv3 until it's deleted.

We believe that libsignal-client is the best way forward for the future viability of having Signal clients written in Rust. Additionally, we will soon start contributing parts of our code (@gferon and me) to libsignal-client, moving from here: https://community.signalusers.org/t/lets-join-forces-deduplicating-ios-android-node-code-into-libsignal-client/31667. If your code would be affected, we will certainly contact you before that happens, but I don't expect such a thing to happen.

from libsignal-service-rs.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.