Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request] Compile for Windows 10 on ARM #3745

Closed
1 task
mrcobra92 opened this issue Nov 15, 2019 · 59 comments
Closed
1 task

[Feature Request] Compile for Windows 10 on ARM #3745

mrcobra92 opened this issue Nov 15, 2019 · 59 comments

Comments

@mrcobra92
Copy link

  • I have searched open and closed issues for duplicates

Bug Description

Signal has no 32 bit desktop app and has no support for ARM processors on Windows.

Steps to Reproduce

  1. Buy ARM Windows device
  2. Attempt to install Signal
  3. It doesn't work

Actual Result:

Program can not be installed

Expected Result:

Program can be installed

-->

Platform Info

Signal Version:

Latest build

Operating System:

Windows 10 Surface Pro X

Linked Device Version:

Link to Debug Log

@scottnonnenberg-signal
Copy link
Contributor

Can you talk about the current state of Windows on ARM a bit? How have things changed recently?

@mrcobra92
Copy link
Author

It has! Windows on ARM is actually a pretty great experience now! It is full windows 10, not windows RT. Meaning you can attempt to install and run any app you want. Most 32 bit apps work with emulation very well. Even simple gaming isn't too bad as long as the game uses direct 3d/x rather than open gl. X86 64 bit apps do not work at all. ARM 64 bit apps are really where it performs its best however. I love the battery life I am getting plus the always connected LTE that ARM brings to the table. It is only going to get better as developers recompile 64 bit apps for 64 bit ARM.

@uculc
Copy link

uculc commented Nov 16, 2019

There is an offical Windows on Arm (64 bit) Electron release, it that helps?
https://github.com/electron/electron/releases/tag/v7.0.0

@mrcobra92
Copy link
Author

IS this fir the developers? I know Signal for desktop was developed using Electron, but I don't believe I as just a user can re-compile it myself can I?

@uculc
Copy link

uculc commented Nov 17, 2019

For the developer. Because he asked for the status of Windows on ARM. Having an official Electron release which supports Windows on ARM is probably an important prerequisite to build the Signal-Desktop app.
I think Microsoft takes a huge effort to push forward Windows on ARM with the release of the Surface Pro X within the Pro series. But it all depends on the availability of software for this platform. So, Signal, please? :-)

@gber1983
Copy link

@scottnonnenberg-signal Surface Pro X is a great device running windows on ARM64, and microsoft is pushing it hard, would be great to have Signal desktop available for it.

@a-woolf
Copy link

a-woolf commented Jan 4, 2020

This has been asked (and shot down) several times, but why not just compile for x86 Windows? This would kill two birds with one stone.
See: #1636 (and others).

@mark-fastpay
Copy link

I would be happier with an x86 build option too. It's also useful for people on really old computers too.

@erg
Copy link

erg commented Jun 4, 2020

Here's vscode's arm64 issue and patch they just implemented:
microsoft/vscode#33620
https://github.com/microsoft/vscode/pull/85326/files

@peteremcc
Copy link

Just tried setting Signal up on my Surface Pro X and was very surprised to find out that there isn't an ARM64 or 32bit version available.

Please do at least one!

Microsoft is pushing ARM64 heavily on upcoming devices, so this will be a growing issue.

@travisnj
Copy link

Yes please.. I too am shocked there is no ARM support!

I am on Galaxy Book S.. Win 10 ARM is very very nice now and need Signal!

@lukasz-gatnicki
Copy link

I'm waiting for this too

@dennisameling
Copy link
Contributor

dennisameling commented Sep 13, 2020

I started working on 32-bit support, it's more work than expected 😅 some native modules will need to be compiled for 32-bit (and ideally arm64) as well as they're 64-bit only currently. I'm stuck at one native module, more details here: #4514 - would appreciate if anyone could help as I'm not familiar with Rust/GN/etc.

UPDATE September 14: think I've found the culprit for the issue mentioned above. Looks like one of ringrtc's dependencies needs an update to support x86. Details: signalapp/ringrtc#12

Hope the Signal team will accept the PRs when they're done! 🚀

@EwoutH
Copy link
Contributor

EwoutH commented Jan 22, 2021

I'm giving this a try, working on this branch, see CI runs here.

@dennisameling
Copy link
Contributor

dennisameling commented Jan 22, 2021

@EwoutH you very likely won't be able to get this to work until the native modules that Signal Desktop uses support arm64 somehow, like ringrtc as I mentioned above. I'm very eagerly waiting for https://github.com/neon-bindings/neon to finish their N-API migration guide - that can be the starting point to get things moving here 😊 They just finished their work for N-API so that's great news for sure!

Will update signalapp/ringrtc#12 as soon as there's news in that area 😊 if you find any other native modules that need updates, please go ahead and try to add support for arm64 to those 🚀

@dennisameling
Copy link
Contributor

dennisameling commented Feb 11, 2021

Making great progress working on a native ARM64 build of Signal Desktop for Windows. Some native dependencies need to be updated. Here's the PRs tracking that work:

I hope to be able to get some first test build some time next week, assuming that I won't be blocked on other dependencies. To be continued 🚀

For cross-reference: issue for Windows 32-bit support: #1636

@dennisameling
Copy link
Contributor

dennisameling commented Feb 20, 2021

Update: node-ffi-napi/node-ffi-napi#131 (comment) was merged yesterday, so I spent some hours today to continue working on Signal Desktop on Windows arm64. It mostly came down to updating some dependencies (see development...dennisameling:windows-multi-arch-support for the diff). Those dependencies have dependencies, and they have dependencies, etc. - oh well 😅 🤯

The good news is that I'm able to install/build all dependencies now on Windows arm64 ✔️, and even yarn build:dev works ✔️, but it crashes on start with error 3228369023:

PS C:\repos\Signal-Desktop> yarn start
yarn run v1.22.10
$ electron .

Set Windows Application User Model ID (AUMID) { appUserModelId: 'org.whispersystems.signal-desktop' }
NODE_ENV development
NODE_CONFIG_DIR C:\repos\Signal-Desktop\config
NODE_CONFIG {}
ALLOW_CONFIG_MUTATIONS undefined
HOSTNAME undefined
NODE_APP_INSTANCE undefined
SUPPRESS_NO_CONFIG_WARNING undefined
SIGNAL_ENABLE_HTTP undefined
userData: C:\Users\denni\AppData\Roaming\Signal-development
config/get: Successfully read user config file
x-attr dependency did not load successfully
config/get: Did not find ephemeral config file, cache is now empty object
error Command failed with exit code 3228369023.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Visual Studio debugging leads me to node_sqlite3.node as the crashing module. More details in journeyapps/node-sqlcipher#73, will report back here when I have more info :)

@dennisameling
Copy link
Contributor

I have to give up for now at the crashing node_sqlite3.node module. Debugging that goes beyond my knowledge and available time at the moment. I've provided details, including the .dmp file and related files for debugging in Visual Studio, at journeyapps/node-sqlcipher#73 (comment). If anyone has experience with that, I'd be super grateful if you could have a look! Happy to provide more details/files if needed.

@dennisameling
Copy link
Contributor

dennisameling commented Feb 22, 2021

Got it to work!!! 🚀

Will need to follow up in journeyapps/node-sqlcipher#73 (comment) to add statically linked OpenSSL binaries for Windows ARM64 which I just generated, but this is super exciting news! 🎉

image

UPDATE: created a PR for node-sqlcipher: EvanHahn-Signal/node-sqlcipher#1

@dennisameling
Copy link
Contributor

5.5.0 now live: https://github.com/dennisameling/Signal-Desktop/releases/tag/v5.5.0-multi-arch

@pep4n
Copy link

pep4n commented Jun 16, 2021

5.5.0 now live: https://github.com/dennisameling/Signal-Desktop/releases/tag/v5.5.0-multi-arch

fyi: just got the OTA notification. updated, restarted. works just fine!
thanks again!

@c-a-m-a-c
Copy link

5.5.0 now live: https://github.com/dennisameling/Signal-Desktop/releases/tag/v5.5.0-multi-arch

I just learned that the v5.5.0 downloads are blocked by Microsoft Defender Smartscreen, again (should have tested that right away, sorry). They are signed with the same certificate as v5.4.0 but it seems it has not yet earned its reputation. Submissions to Microsoft Security Intelligence are done, waiting for feedback/clearance.

@c-a-m-a-c
Copy link

The v5.5.0 files have established reputation with Microsoft Defender SmartScreen services in the meantime. But the "signing certificate (thumbprint ACC6AAB42506DFBC0550415EF3C1216E625F9085) is still in the process of establishing reputation". Not sure if and how this could be improved, let's see if I can find some more information on this.

@c-a-m-a-c
Copy link

@dennisameling, since you are the developer of this software, according to this blog post by Microsoft Security it might help if you'd submit files on your own before publishing. I understand this (and of course following best practices in general 😎) could help you and your code signing certificates to establish reputation with the service faster. (And by the way: I wouldn't follow the EV certificate path either, fully understand. At the same time it's a good thing we learned that this might actually help in case of some emergency publishing needs.)
I'm happy to further assist with file submissions - but I'm just some consumer of the service, I assume such contributions have less weight than the developer's.

@c-a-m-a-c
Copy link

(v.5.6.0 files are submitted to Microsoft Security Intelligence for analysis/clearance by Microsoft Defender SmartScreen servcies)

@dennisameling
Copy link
Contributor

dennisameling commented Jun 22, 2021

Microsoft's submission process is incredibly confusing. So far I've identified three places where files/URLs can be submitted:

  1. https://www.microsoft.com/en-us/wdsi/filesubmission (only for reporting if your software is incorrectly detected as malware, which is not the case here, it's just Microsoft SmartScreen showing the warning)
  2. https://www.microsoft.com/en-us/wdsi/AppRepSubmission - after submitting a URL, it shows this warning banner:

image

  1. Through the Edge Download manager --> report as safe (https://feedback.smartscreen.microsoft.com/feedback.aspx).

I tried all three of them. The first one seems most promising, as it's the only one that actually sends me a confirmation email and allows me to follow the status of the file submissions. Let's just hope I won't have to do this every time since it's rather time consuming 😅 For macOS we simply can do yarn notarize which submits it to Apple for validation.

Looking good so far:

image

image

@c-a-m-a-c
Copy link

Not sure what impact Edge Download Manager actually has. I was referring to (and personally use) https://www.microsoft.com/en-us/wdsi/filesubmission. In my case as a "Home Customer". In your case you'd choose "Software Developer" which hopefully would have a more relevant impact on both the individual files but also your Code Signing Certificate (this one needs to gain a good reputation).

@dennisameling
Copy link
Contributor

Yeah I chose "Software Developer". Though I gotta say that the form is rather confusing as it talks about "malware/malicious" files, but when I scan it with Defender all is good. It's really about Smartscreen only, and though there's an option for that in the form, the rest of the form is a bit confusing IMO.

image

@c-a-m-a-c
Copy link

Correct. Current signatures of Microsoft Defender never detected any threats in your files. SmartScreen however "blocks" downloads as long these files have not established reputation with the service. Users can remove the block and choose to keep the files, but they need to click through a couple of warnings - which actually makes sense but a standard end user might get confused. After keeping the file SmartScreen will strike again when the user tries to install the software.

Parameters I provide when submitting files are:

  1. Select the Microsoft security product used to scan the file: "Microsoft Defender Smartscreen"
  2. Company Name: ""
  3. Do you have a Microsoft support case number? "No"
  4. What do you believe this file is? "Incorrectly detected as malware/malicious"
  5. Detection name: ""was blocked because it could harm your device""
  6. Definition version (look up current definition version of Microsoft Defender under Settings -> Windows Update -> View update history -> Definition updates)
  7. Additional information: "Downloaded from: (enter URL, e.g. "https://signal.dennisameling.com/dl/signal-desktop-unofficial-win-5.6.0-ia32.exe") Windows Defender scan did not report any threats."

Usually within a few hours analysis is done with the known analyst comments. After this, users are not warned anymore when downloading and/or installing.

@c-a-m-a-c
Copy link

Let's just hope I won't have to do this every time since it's rather time consuming 😅

Don't get me wrong, I'm happy to and I will continue doing this...

(only the last 30 days are kept in history)

I just doubt this to be a sustainable solution. Let's hope your cert will make it to the club, soon. 😎

@c-a-m-a-c
Copy link

(v.5.6.0 files have established reputation with Microsoft Defender SmartScreen services)

@c-a-m-a-c
Copy link

(v.5.6.1 files are submitted to Microsoft Security Intelligence for analysis/clearance by Microsoft Defender SmartScreen servcies)

@c-a-m-a-c
Copy link

(v.5.6.1 files have established reputation with Microsoft Defender SmartScreen services)

@c-a-m-a-c
Copy link

(v.5.6.2 files are submitted to Microsoft Security Intelligence for analysis/clearance by Microsoft Defender SmartScreen services)

@c-a-m-a-c
Copy link

(v.5.6.2 files have established reputation with Microsoft Defender SmartScreen services)

@dennisameling
Copy link
Contributor

This is an automated message that version 5.7.1 is now live. Please note that it might take 1-2 hours for the binaries to be uploaded to the server.

Release URL: https://github.com/dennisameling/Signal-Desktop/releases/tag/v5.7.1-multi-arch

@c-a-m-a-c
Copy link

(v.5.7.1 files are submitted to Microsoft Security Intelligence for analysis/clearance by Microsoft Defender SmartScreen services)

@c-a-m-a-c
Copy link

(v.5.7.1 files have established reputation with Microsoft Defender SmartScreen services)

@dennisameling
Copy link
Contributor

This is an automated message that version 5.8.0 is now live. Please note that it might take 1-2 hours for the binaries to be uploaded to the server.

Release URL: https://github.com/dennisameling/Signal-Desktop/releases/tag/v5.8.0-multi-arch

@c-a-m-a-c
Copy link

(v.5.8.0 files are submitted to Microsoft Security Intelligence for analysis/clearance by Microsoft Defender SmartScreen services)

@adamparish
Copy link

Will this download be available on signal.org? I'm a bit hesitant to start the download from a non Signal source, but I really want to use the Signal app on the Surface Pro X. Thanks.

@dennisameling
Copy link
Contributor

@adamparish That's up to the Signal team to decide on. They'll need arm64 hardware in their CI pipeline to run automated tests on (same story for Apple Silicon which is also not supported yet). I've outlined the work for the Signal team in an earlier comment, so it's up to them now to decide if and when they want to move forward with this.

Just FYI, the source code of my fork is available at https://github.com/dennisameling/Signal-Desktop/tree/multi-arch-support, so you could even build it yourself locally if you like. Let me know if you want more details about that 👍🏼

@ndrosson
Copy link

ndrosson commented Aug 12, 2021

Hi, is it possible to get an exe of your development? The version above (see post of marcocastagna on the 22 jun) is not compatible anymore with the one I'm using on my phone (version 5.19.4). Then it told me, there is a new version and installing the new version breaks it. Thx

I got it: just changed the link to: https://signal.dennisameling.com/dl/signal-desktop-unofficial-win-5.13.0-ia32.exe and it works now

@adamparish
Copy link

@adamparish That's up to the Signal team to decide on. They'll need arm64 hardware in their CI pipeline to run automated tests on (same story for Apple Silicon which is also not supported yet). I've outlined the work for the Signal team in an earlier comment, so it's up to them now to decide if and when they want to move forward with this.

Just FYI, the source code of my fork is available at https://github.com/dennisameling/Signal-Desktop/tree/multi-arch-support, so you could even build it yourself locally if you like. Let me know if you want more details about that 👍🏼

Thank you @dennisameling

@scottnonnenberg-signal ⤴️ can you give Dennis' work an official seal of approval and merge his work into a setup download file hosted by the Signal Foundation. The Microsoft ARM community needs this.

@darkdragon-001
Copy link

Wow. Awesome work shut down by the signal bot 😢 Where can we follow progress? What can we do to help this getting merged?
Maybe you should submit an official merge request?

@EwoutH
Copy link
Contributor

EwoutH commented May 23, 2024

With the huge push of Microsoft and Qualcomm towards Windows Arm PCs I think we need to reconsider reopening this issue - and maybe even prioritizing it.

June 18th the first new Snapdragon X PCs launch. It would be awesome if there was a native Signal app out then, and probably good PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests