threefoldtech / planetary_network_desktop_client

Desktop client for Planetary Network for windows, Mac OSX and Linux/Ubuntu.
https://forum.threefold.io/t/how-our-planetary-network-works/1210
Apache License 2.0
0 stars 0 forks source link

Researching C++ with QT library, Rust and other solutions #1

Closed MathiasDeWeerdt closed 3 years ago

MathiasDeWeerdt commented 3 years ago

Research

Currently researching static linking and compiling on windows, macos and ubuntu.

Cross compilation

When using linux as our host OS. It would require mingw to crosscompile to windows. macOS cross-compilation, while not entirely impossible is extremely difficult according to online sources. Cross-compiling is possible for windows => linux and linux => windows, but macOS is nearly if not entirely impossible for modern versions.

Possible solutions

Compiling on each host individual and having 3 seperate build-servers. Linux and windows could be merged since cross-compilation would work on these. The main reason we would separate these is because macOS cross-compilation is a pain.

Other technologies

Rust

State of rust cross-platform desktop UI libraries. (Windows, macOS and linux)

Neither libraries support the systray functionality we would need to easily connect / disconnect from a peer in yggdrasil. This could be combined another library:

Rust is a nice language and usefull in many areas but it is simply not suitable for a cross-platform desktop application development. https://www.reddit.com/r/rust/comments/bjgfcp/what_is_rust_used_for/em8alr4?utm_source=share&utm_medium=web2x&context=3

Flutter desktop / cross-platform

The main issue with flutter is that the UI and the system tray icon are in separated libraries. And the entire environement to compile and run is extremely fragile and in early development.

Requirements to run this:

Another problem is the one that I mentioned before: The UI and the systray are 2 different libraries which are independant of eachother, closing the UI causing the entire application to close and there is no way in flutter to catch this behaviour.

Android and IOS research

Yggdrasil

Integration

Flutter could be used, but this would require us to port over the existing IOS and Android libraries to dart.