Closed ghost closed 2 years ago
To be honest, it's not very high on our list. We have more people asking for support for different distributions of Linux. Our research indicates that the vast majority of Windows users are on 64bit installs at this point.
Maybe you could tell me more about your situation? Find others in your situation?
Backblaze claims only 4.3% of their Windows users run 32-bit versions of their software. Assuming it's the same for Signal, it doesn't seem worth bothering with it. As Scott said, I would prefer if they found a way of keeping their Flatpak up to date so that people won't be running ancient versions in a few months.
I'm using 32bit Windows and wonder if it is really so much more work supporting 32bit Windows than some Linux distribution that has much less users. 4.3% of Windows users might still be more than most Linux distributions, regarding that OSX is coming second after Windows...
You are absolutely right that there are fewer Linux users than 32-bit Windows users. However, I'd say there are more Signal Linux users than Signal 32-bit users since Linux users are usually more tech sawy and Signal has always been a nerd program. As Scott said, they are getting more requests for a Flatpak than they are for a 32-bit Windows version. Maybe they will consider making one for 32-bit users if the interest is high when the Flatpak is out, so who knows?
My last post here, don't want to spam Scott with emails. Feel free making a thread on the forum: https://whispersystems.discoursehosting.net/
I think you will lose less time developing a web-based solution like Whatsapp did, than developing 10 different OS versions. I also run WIN 7 32 bits and I am annoyed. Don't lose current Whatsapp/Facebook bad reputation benefits! It's time to...
Backblaze claims only 4.3% of their Windows users run 32-bit versions of their software. Assuming it's the same for Signal, it doesn't seem worth bothering with it.
Firefox's hardware report (source) says that 18% of FireFox users are still on 32-bit operating systems.
There's a small decline in number of 32-bit users each quarter, but 18% is still a sizeable portion of computer users.
I tried to install Signal in ReactOS. It didn't worked. Because ReactOS doesn't have 64-bit support.
A 32-bit client would be 100% compatible with 64-bit Windows, and would be universal. On a tiny app like this are there even any benefits to being 64-bit only? Microsoft highly recommends using 32-bit Office (on 64-bit machines), unless spreadsheets are so large they run into memory constraints. Only then is 64-bit advised.
I use 32-bit clients whenever possible (VMs, etc) for speed and reduced memory footprint, and was utterly surprised when I found that Signal was 64-bit only.
As of May 2018, Firefox shows 30%+ of users are running 32-bit Firefox , and 18%+ of users are on a 32-bit OS. (Both metrics exclude XP/Vista.) This is a sizable chunk to write off completely.
@a-woolf In general, you should avoid 32bit builds because 64bit has a plentitude of benefits, not limited to:
A more complete list is at wikipedia.
Signal-Desktop uses electron and thus is almost a full browser, not a small app. 32bit binaries would neither be faster (because they would use less registers and not cause significantly more cache misses), nor would the memory footprint increase by a noteworthy amount, since only pointers grow to the double of their size.
But do we have any disadvantage? The 32bit client would run on any windows. AFAIK Riot also uses electron and runs on 32bit Windows.
I think you will lose less time developing a web-based solution like Whatsapp did, than developing 10 different OS versions. I also run WIN 7 32 bits and I am annoyed. Don't lose current Whatsapp/Facebook bad reputation benefits! It's time to...
I fully agree... kill a dozen birds with one stone. Go web-based as opposed to native apps. While most of my gear is x64, I do have a tiny Win10 32-bit tablet/hybrid I use for travel that I can no longer use Signal on. Major bummer. Web-based is definitely the way to go. I understand that there are security concerns with that... aka using a compromised or outdated browser... but that is the same for native apps... if the device is compromised or outdated, it poses increased risk. If you can't do web-based for some reason, at least do x86 for your main platform as mentioned above... then it will work on both x86 and x64 architectures.
I fully agree... kill a dozen birds with one stone. Go web-based as opposed to native apps.
Nah... Web based things are slow and lack offline possibilities (in case you need to read something while disconnected). Telegram also has a native 32bit Windows app. Can't be too difficult if you can cross-compile the soure.
I'd like to mention a case where it's become impossible to run Signal on new(ish) hardware. Some laptops and tablets, even though the hardware is 64bit capable, have shipped with 32bit Windows 10 due to limited eMMC capacity of 32GB and perhaps other reasons. So it has become impossible to run Signal on these types of devices (prob. what also Soldier4Life above has experienced).
I fully agree... kill a dozen birds with one stone. Go web-based as opposed to native apps.
Nah... Web based things are slow and lack offline possibilities (in case you need to read something while disconnected). Telegram also has a native 32bit Windows app. Can't be too difficult if you can cross-compile the soure.
I hear you... it is definitely a trade-off between broad spectrum compatibility and features/performance. It seems like the simple solution would be to just use x86 based architecture for all of Windows Desktop... then it can run on both. Unless there is a specific reason not to do so, that I might be missing.
I doubt I will be installing new copies of an operating system just to run an program that has been working for many years. At least let us use the old app and we can bear any security issues.
I am incline to agree with MagentoUno, as long as the security issues are restricted merely to the 32bit machine, and not compromising the entire signal accounts on the contact list.
I'm currently running Windows 7 32-bit and it's the only desktop PC I have. I use Signal on my phone because it has all the features I require.
I am sure I am not alone in the idea that most users do not care about the architecture of the software, but whether or not they can use it on all of their devices to stay connected.
If I had the skills, I would build a 32-bit release myself, but I do not.
It would be a lot to a lot of people to be able to have this option.
I just wanted to install Signal on my thin laptop, too - tiny ssd, <4gb ram so it's running Win32 OS. Alas, no can do. Bye bye Signal, back to good ol' workin' Telegram. Meh.
Listen, I am a nerd too. I own a Google Pixel 3a and will only buy phones whose bootloaders may be unlocked. My home computer runs Linux Mint.
However, I am at the mercy of my employer during weekdays. I have for years used Google Hangouts to message my wife because I can do so using the computer without having to alternate between my phone and my computer. As many of you know, Google Hangouts/Google Chat is a completely unsecured messaging system and the messages are infinitely stored on Google's servers for you to see. I would like to use Signal on my work Windows desktop computer, but it's running 32-bit Windows. This may not change for a few years when they replace the computer.
So I may be a nerd and have updated phones and a computer. But my workplace is another story. Please make it a priority to have a 32-bit Windows version. If there is already a 64-bit Windows version, is it much more work to port it to a 32-bit Windows version? Is this really an uncommon request?
If there is no 32-bit Windows version, I might want to switch to Whatsapp instead. Whatsapp is now owned by Facebook. I have never trusted Facebook and have not had a Facebook account for years.
@midtempo you'd better switch to Riot.im if you want to stay with open source, this even has a federated server structure. Only downside is that you have to verify every device if you want to have encryption.
But back to Signal: Does a 32 bit version need a lot of rework, or does it just need someone who is able to compile a 32bit version without having to change a lot? In that case it would be great to have the possibility for donating for certain features.
I've switched to Wire by now, it's evolving to a very mature oss client (https://github.com/wireapp/wire) and of course has a 32bit version (https://wire.com/en/download) ... I'd still like to use Signal for my legacy contacts, but as supporting a broad userbase isn't Signal's priority, supporting Signal isn't mine either.
A 32-bit client would be 100% compatible with 64-bit Windows, and would be universal.
ARM64 Windows 10 can run Win32 (x86) apps, but cannot run Win64 (x86-64) apps without recompiling. This reinforces the need for a Win32 build - universal compatibility, as requested here over 2 years ago.
See: https://github.com/signalapp/Signal-Desktop/issues/3156 and https://github.com/signalapp/Signal-Desktop/issues/3745
To add yet another use case, there's also a number of Intel Atom tablets out there (the 32-bit UEFI only ones, ie Clover Trail) which can only run 32-bit Windows 10. Some of us don't have the budget to replace these.
And the above line of "Signal has always been a nerd program" is the wrong approach, and a little bit self-defeating - if you want to get things like Signal into the hands of more people and not just journalists and nerds, you need to make it more widely compatible.
Tech nerd here using a Microsoft Surface Pro X with an arm64 cpu that can run x86 apps but not x64. Both arm64 or x86 builds would work for me, but neither are supported.
VSCode just released arm64 support, here's their github issue: https://github.com/microsoft/vscode/issues/33620
Just build the dang 32 bit version already. People have been asking for it for years now. More use cases keep coming up, as non-x86 systems can now run x86 code (but not x86-64 code).
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.
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.
I'm in the exact same boat. I would love to use signal as my sole messaging service, being able to have signal double as my SMS app on my phone is great, but lacking desktop support is frustrating.
Same problem here. Surface Pro X, want to use signal and can't.
I'm coaching several people working with small Atom notebooks. I would like to urge them do kick Whatsapp off their phones and switch to signal, but without a 32 bit desktop version... no chance.
Just tried building Signal Desktop both for arm64 and 32-bit Windows. arm64 will be a bit more difficult due to some native dependencies that need updates (got errors while running set npm_config_arch=arm64
and yarn install
), so I think we'll have better chances to build for 32-bit for now.
32-bit builds successfully and boots on my Surface Pro X (arm64), but then it just keeps loading at the splash screen:
... at least it's a start π
In package.json
, under build
> win
, replace
"target": [
"nsis"
]
with
"target": [
{
"target": "nsis",
"arch": [
"ia32",
"x64"
]
}
]
you will then get a release\win-ia32-unpacked
folder which contains a 32-bit build. I'll try to work a bit more on this when I have some more time, probably in a few weeks from now.
Might get a bit closer by running set npm_config_arch=ia32
, then yarn install
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: https://github.com/signalapp/Signal-Desktop/pull/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: https://github.com/signalapp/ringrtc/pull/12
Hope the Signal team will accept the PRs when they're done! π
Hi Dennis, glad to hear that you have taken up the fight. Not having the know-how to help you out, all I can do is to wish you good success, without too much hassle.
Hello Dennis, I'm new to Github. Thanks for looking into a 32 bit version. I can't help with the any software support. However I can make a financial donation to the project. I can't see a "sponsor" on your profile ?
@MagentaUno thanks! I appreciate the offer, but before accepting any donations I need to be 100% sure that the Signal team is willing to look into/approve my PRs related to 32-bit support (I'm not part of the Signal team). I'm currently waiting for one more dependency to be updated, then I'll have a better idea of how much work is left for 32-bit support.
Quite optimistic that I'm pretty close to that already. Hope to have more news within a few weeks (or whenever said dependency will be updated), will keep you posted here.
would be nice to have a 32-Bit version, thanks
I run Windows on a T60p which can't run anything but 32-bit architecture.
@dennisameling Just checking to see if you've been able to make any progress. I'll keep checking back, but I guess I'll need to use Telegram.
To earlier comments in the thread, some of us are "nerds" enough that we're trying to bring our Boomer parents into the 20th century. I doubt mine are running anything above Windows XP right now, but I really want to be able to use a secure video client with them when we talk. They don't even understand what 32bit or 64bit IS and we're 3000 miles apart, doing tech support over chat - Signal of all things. And they can't figure out why it won't install.
So thank you to Dennis for at least making the attempt!
@skerichards Thanks for checking in. I'm very keen on getting the ball rolling here, but I'm stuck at https://github.com/signalapp/ringrtc/pull/12 where I'm waiting for a dependency (https://github.com/neon-bindings/neon) to update to Node's N-API. Once that's done, it should become a lot easier to get 32-bit/arm64 builds for ringrtc
and then Signal Desktop itself.
I have all notifications turned on for the neon
repo so that I know once they have a migration doc in place. You can subscribe to https://github.com/neon-bindings/neon/issues/596 to follow the progress there. Gotta say the Neon team has been doing an awesome job working towards N-API go-live - just look at the frequency at which they're releasing new versions: https://github.com/neon-bindings/neon/releases
When the migration doc is in place, I will be able to support the ringrtc
maintainers migrate to the Neon N-API backend and (hopefully) get cross-compilation to 32-bit/arm64 working. It's just a matter of time, fingers crossed π€πΌ
I have been using WhatsApp as an alternative because it can be run on my 32-bit Windows work computer, and it works pretty much the same way as Signal. This is because WhatsApp uses Signal as the central component. Starting this February though, Facebook is changing the terms of use of WhatsApp to share more data and analytics with Facebook. This has now made this project more important.
Dennis, your work in this regard is really appreciated to those following this thread.
WhatsApp uses Signal as the central component
Yes, we heard that they use the "same protocol". Did they proof that? It's all about the correct implementation. "And now we use 4096 bit xyz encryption which Tesla uses somewhere in their car, so your chat is secure. Fully E2EE*. Trust us."
This has now made this project more important.
You are absolutely right. One more reason. But in general it would be good to support as much as possible different versions of the yet good platform set. To give everyone (even kids) the chance to use well secured communication tools even on older hardware (at least my kids won't have the newest hardware until they buy them by themselves π). So thanks for working on that long lasting topic π.
*) for user satisfaction we backup the keys to help you restoring your device at anytime...
Btw, Pidgin has a plugin for Signal: https://pidgin.im/plugins/?publisher=all&query=&type= Maybe this helps getting Signal to work on 32bit machines.
Btw, Pidgin has a plugin for Signal: https://pidgin.im/plugins/?publisher=all&query=&type=
If I get it right, the author of this plugin is not too optimistic:
"The new and annoying dependency of zkgroups.dll for the V2 groups is a sign they will eventually move away from the current implementation completely. It looks like with my plug-ins (signal and signald), I am basically riding dying horses. I am considering to throw things. It was fun while it lasted, though." [https://github.com/hoehermann/purple-signal/issues/1]
Hi there. Thanks for mentioning purple-signal. I am the author of purple-signal. I want to access signal without a resource-hogging browser solution. Long-term goal is a fully-fledged signal integration in Pidgin (with Pidgin 3 β if it ever gets released β probably supporting audio and video conferencing, too) and chatty. However, with libsignal-service-java being moved and hidden within the Signal-Android sources, libsignal-protocol-c looking abandoned and libsignal-client not deemed ready for production, I am trying to hit an elusive target which turns out to be moving rather swiftly. I will not supply users with the native binaries libsignal-service-java is depending on, especially if the number of dependencies increases. Right now with dennisameling, we are in luck, but that may change any time.
32 bit version when :(
Great news! I was able to get Signal to boot on Windows 10 32-bit (in a VM):
β οΈ This really only is a proof-of-concept for now!
We at least need the following PRs to be merged before the Signal team could even consider 32-bit builds:
For cross-reference: issue for Windows ARM64 support: https://github.com/signalapp/Signal-Desktop/issues/3745
I'm working from this branch: https://github.com/dennisameling/Signal-Desktop/tree/windows-multi-arch-support
β All automated tests are passing after applying the PRs above:
PS C:\Users\Admin\repos\signal-desktop> yarn test yarn run v1.22.10 $ yarn test-node && yarn test-electron $ electron-mocha --file test/setup-test-node.js --recursive test/app test/modules ts/test-node ts/test-both x-attr dependency did not load successfully Attachments createWriterForNew β should write file to disk and return path createWriterForExisting β should write file to disk on given path and return path β throws if relative path goes higher than root createReader β should read file from disk β throws if relative path goes higher than root copyIntoAttachmentsDirectory β throws if passed a non-string β returns a function that rejects if the source path is not a string β returns a function that rejects if the source path is not in the user config directory β returns a function that copies the source path into the attachments directory createDeleter β should delete file from disk β throws if relative path goes higher than root createName β should return random file name with correct length getRelativePath β should return correct path createAbsolutePathGetter β combines root and relative path β throws if relative path goes higher than root SignalMenu createTemplate macOS without setup options β should return correct template with setup options β should return correct template Windows without setup options β should return correct template with setup options β should return correct template Linux without setup options β should return correct template with setup options β should return correct template Protocol Filter _urlToPath β returns proper file path for unix style file URI with hash β returns proper file path for unix style file URI with querystring β returns proper file path for unix style file URI with hash and querystring β returns proper file path for file URI on windows β translates from URL format to filesystem format β translates from URL format to filesystem format β handles SMB share path β handles SMB share path on windows β hands back a path with .. in it SpellCheck getLanguages β works with locale and base available β works with neither locale nor base available β works with only base locale available β works with only full locale available β works with base provided and base available β works with base provided and base not available Link previews #isLinkSafeToPreview β returns false for invalid URLs β returns false for non-HTTPS URLs β returns false if the link is "sneaky" β returns true for "safe" urls #findLinks β returns all links if no caretLocation is provided β includes all links if cursor is not in a link β excludes a link not at the end if the caret is inside of it β excludes a link not at the end if the caret is at its end β excludes a link at the end of the caret is inside of it β includes link at the end if cursor is at its end #isLinkSneaky β returns true for = β returns true for $ β returns true for + β returns true for ^ β returns true for URLs with a length of 4097 or higher auth β returns true for hrefs with auth (or pretend auth) domain β returns false for all-latin domain β returns false for IPv4 addresses β returns true for IPv6 addresses β returns true for Latin + Cyrillic domain β returns true for Latin + Greek domain β returns true for ASCII and non-ASCII mix β returns true for Latin + High Greek domain β returns true if the domain doesn't contain a . β returns true if the domain has any empty labels β returns true if the domain is longer than 2048 UTF-16 code points pathname β returns false for no pathname β returns false if the pathname contains valid characters β returns true if the pathname contains invalid characters query string β returns false for no query β returns false if the query string contains valid characters β returns true if the query string contains invalid characters hash β returns false for no hash β returns false if the hash contains valid characters β returns true if the hash contains invalid characters Privacy redactPhoneNumbers β should redact all phone numbers redactUuids β should redact all uuids redactGroupIds β should redact all group IDs β should remove newlines from redacted group IDs β should remove newlines from redacted group V2 IDs redactAll β should redact all sensitive information _redactPath β should redact file paths β should redact URL-encoded paths β should redact stack traces with both forward and backslashes β should redact stack traces with escaped backslashes Attachment replaceUnicodeOrderOverrides β should sanitize left-to-right order override character β should sanitize right-to-left order override character β should sanitize multiple override characters β should ignore non-order-override characters (112ms) replaceUnicodeV2 β should remove all bad characters β should should leave normal filename alone β should handle missing fileName removeSchemaVersion β should remove existing schema version migrateDataToFileSystem β should write data to disk and store relative path to it β should skip over (invalid) attachments without data β should throw error if data is not valid Contact parseAndWriteAvatar β handles message with no avatar in contact β turns phone numbers to e164 format β removes contact avatar if it has no sub-avatar β writes avatar to disk β removes number element if it ends up with no value β drops address if it has no real values β removes invalid elements if no values remain in contact β handles a contact with just organization _validate β returns error if contact has no name.displayName or organization β logs if no values remain in contact Errors toLogFormat β should return error stack trace if present β should return error string representation if stack is missing β should return `0` argument β should return `false` argument β should return `null` argument β should return `undefined` argument Message createAttachmentDataWriter β should ignore messages that didnβt go through attachment migration β should ignore messages without attachments β should write attachments to file system on original path β should process quote attachment thumbnails β should process contact avatars initializeSchemaVersion β should ignore messages with previously inherited schema for message without attachments β should initialize schema version to zero for message with attachments β should inherit existing attachment schema version upgradeSchema β should upgrade an unversioned message to the latest version with multiple upgrade steps β should return last valid message when any upgrade step fails β should skip out-of-order upgrade steps _withSchemaVersion β should require a version number β should require an upgrade function β should skip upgrading if message has already been upgraded β should return original message if upgrade function throws β should return original message if upgrade function returns null _mapQuotedAttachments β handles message with no quote β handles quote with no attachments β handles zero attachments β handles attachments with no thumbnail β does not eliminate thumbnails with missing data field β calls provided async function for each quoted attachment _mapContact β handles message with no contact field β handles one contact MIME isJPEG β should return true for `image/jpeg` β should return false for `jpg` β should return false for `jpeg` β should return false for `image/jpg` β should return false for `image/gif` β should return false for `image/tiff` β should return false for `application/json` β should return false for `0` β should return false for `false` β should return false for `null` β should return false for `undefined` SchemaVersion isValid β should return true for positive integers β should return false for any other value (40ms) LeftPane getRowFromIndex given only pinned chats β returns pinned chats, not headers given only non-pinned chats β returns conversations, not headers given only pinned and non-pinned chats β returns headers and conversations given not showing archive with archived conversation β returns an archive button last given showing archive and archive chats β returns archived conversations groupMediaItemsByDate β should group mediaItems license comments β includes a license comment at the top of every relevant file (214ms) isLinkPreviewDateValid β returns false for non-numbers β returns false for zero β returns false for NaN β returns false for any infinite value β returns false for timestamps more than a day from now β returns true for timestamps before tomorrow uploadDebugLogs β makes a request to get the S3 bucket, then uploads it there β rejects if we can't get a token β rejects with an invalid token body β rejects if the upload doesn't return a 204 logging #isLineAfterDate β returns false if falsy β returns false if invalid JSON β returns false if date is invalid β returns false if log time is invalid β returns false if date before provided date β returns true if date is after provided date #eliminateOutOfDateFiles β deletes an empty file β deletes a file with invalid JSON lines β deletes a file with all dates before provided date β keeps a file with first line date before provided date β keeps a file with last line date before provided date #eliminateOldEntries β eliminates all non-parsing entries β preserves all lines if before target date #fetchLog β returns error if file does not exist β returns empty array if file has no valid JSON lines β returns just three fields in each returned line #fetch β returns single entry if no files β returns sorted entries from all files MemberRepository #updateMembers β updates with given members #getMemberById β returns undefined when there is no search id β returns a matched member β returns undefined when it does not have the member #getMemberByUuid β returns undefined when there is no search uuid β returns a matched member β returns undefined when it does not have the member #search given a prefix-matching string on last name β returns the match given a prefix-matching string on first name β returns the match given a prefix-matching string on profile name β returns the match given a prefix-matching string on title β returns the match given a match in the middle of a name β returns zero matches matchMention β handles an AtMentionify from clipboard β handles an MentionBlot from clipboard β converts a missing AtMentionify to string β converts a missing MentionBlot to string β passes other clipboard elements through getDeltaToRemoveStaleMentions given text β retains the text given stale and valid mentions β retains the valid and replaces the stale given emoji embeds β retains the embeds given other ops β passes them through getTextAndMentionsFromOps given only text β returns only text trimmed β returns trimmed of trailing newlines given text, emoji, and mentions β returns the trimmed text with placeholders and mentions given only mentions β returns the trimmed text with placeholders and mentions β does not trim newlines padding mentions getDeltaToRestartMention given text and emoji β returns the correct retains, a delete, and an @ Attachment getUploadSizeLimitKb β returns 6000 kilobytes for supported non-GIF images β returns 25000 kilobytes for GIFs β returns 100000 for other file types getFileExtension β should return file extension from content type β should return file extension for QuickTime videos getSuggestedFilename for attachment with filename β should return existing filename if present for attachment without filename β should generate a filename based on timestamp for attachment with index β should generate a filename based on timestamp isVisualMedia β should return true for images β should return true for videos β should return false for voice message attachment β should return false for other attachments isFile β should return true for JSON β should return false for images β should return false for videos β should return false for voice message attachment isVoiceMessage β should return true for voice message attachment β should return true for legacy Android voice message attachment β should return false for other attachments Contact getName β returns displayName if provided β returns organization if no displayName β returns givenName + familyName if no displayName or organization β returns just givenName β returns just familyName contactSelector β eliminates avatar if it has had an attachment download error β does not calculate absolute path if avatar is pending β calculates absolute path Message initializeAttachmentMetadata β should classify visual media attachments β should classify file attachments β should classify voice message attachments β does not include long message attachments β handles not attachments MIME isGif β returns true for GIFs β returns false for non-GIFs Settings getAudioNotificationSupport β returns native support on macOS β returns no support on Windows 7 β returns native support on Windows 8 β returns custom support on Linux isAudioNotificationSupported β returns true on macOS β returns false on Windows 7 β returns true on Windows 8 β returns true on Linux isNotificationGroupingSupported β returns true on macOS β returns true on Windows 7 β returns true on Windows 8 β returns true on Linux isHideMenuBarSupported β returns false on macOS β returns true on Windows 7 β returns true on Windows 8 β returns true on Linux isDrawAttentionSupported β returns false on macOS β returns true on Windows 7 β returns true on Windows 8 β returns true on Linux updater/signatures #getVersion β successfully gets version #getUpdateFileName β successfully gets version #isUpdateFileNameValid β returns true for normal filenames β returns false for problematic names #validatePath β succeeds for simple children β returns false for problematic names updater/curve β roundtrips β verifies with our own key updater/signatures β _getFileHash returns correct hash (54ms) β roundtrips binary file writes β roundtrips signature (90ms) β fails signature verification if version changes (90ms) β fails signature verification if signature tampered with (107ms) β fails signature verification if binary file tampered with (102ms) β fails signature verification if signed by different key (89ms) combineNames β returns undefined if no names provided β returns first name only if family name not provided β returns returns combined names β returns given name first if names in Chinese β returns given name first if names in Japanese β returns given name first if names in Korean getAnimatedPngDataIfExists β returns null for empty buffers β returns null for non-PNG files β returns null for non-animated PNG files β returns data for animated PNG files getOwn β returns undefined when asking for a non-existent property β returns undefined when asking for a non-own property β returns own properties β works even if `hasOwnProperty` has been overridden for the object getTextWithMentions given mention replacements β replaces them β sorts them to go from back to front getUserAgent β returns the right User-Agent on Windows β returns the right User-Agent on macOS β returns the right User-Agent on Linux β omits the platform on unsupported platforms isFileDangerous β returns false for images β returns false for documents β returns true for executable files β returns true for Microsoft settings files β returns false for non-dangerous files that end in ".", which can happen on Windows β returns true for dangerous files that end in ".", which can happen on Windows β returns false for empty filename β returns false for exe at various parts of filename β returns true for upper-case EXE isMuted β returns false if passed undefined β returns false if passed a date in the past β returns false if passed a date in the future isPathInside β returns false if the child path is not inside the parent path β returns true if the child path is inside the parent path LatestQueue β if the queue is empty, new tasks are started immediately β only enqueues the latest operation nonRenderedRemoteParticipant β returns a video request object a width and height of 0 normalizeGroupCallTimestamp β returns undefined if passed NaN β returns undefined if passed 0 β returns undefined if passed a negative number β returns undefined if passed a string that cannot be parsed as a number β returns undefined if passed a BigInt of 0 β returns undefined if passed a negative BigInt β returns undefined if passed a non-parseable type β returns positive numbers passed in β parses strings as numbers β only parses the first 15 characters of a string β converts positive BigInts to numbers sgnlHref isSgnlHref β returns false for non-strings β returns false for invalid URLs β returns false if the protocol is not "sgnl:" β returns true if the protocol is "sgnl:" β accepts URL objects isSignalHttpsLink β returns false for non-strings β returns false for invalid URLs β returns false if the protocol is not "https:" β returns true if the protocol is "https:" β returns false if username or password are set β returns false if port is set β accepts URL objects parseSgnlHref β returns a null command for invalid URLs β parses the command for URLs with no arguments β parses a command's arguments β treats the port as part of the command β ignores duplicate query parameters β includes hash β ignores other parts of the URL β doesn't do anything fancy with arrays or objects in the query string parseSignalHttpsLink β returns a null command for invalid URLs β handles signal.art links β handles signal.group links sleep β returns a promise that resolves after the specified number of milliseconds sniffImageMimeType β returns undefined for empty buffers β returns undefined for non-image files β sniffs ICO files β sniffs BMP files β sniffs GIF files β sniffs WEBP files β sniffs PNG files β sniffs JPEG files β handles ArrayBuffers sortByTitle β does nothing to arrays that don't need to be sorted β sorts the array by title β doesn't mutate its argument toggleMaximizedBrowserWindow β maximizes an unmaximized window β unmaximizes a maximized window writeWindowsZoneIdentifier β writes zone transfer ID 3 (internet) to the Zone.Identifier file β fails if there is an existing Zone.Identifier file β fails if the original file does not exist β fails if not on Windows environment utilities parseEnvironment β returns Environment.Production for non-strings β returns Environment.Production for invalid strings β parses "development" as Environment.Development β parses "production" as Environment.Production β parses "staging" as Environment.Staging β parses "test" as Environment.Test β parses "test-lib" as Environment.TestLib shouldUseFullSizeLinkPreviewImage β returns false if there is no image β returns false is the preview is a sticker pack β returns false if either of the image's dimensions are missing β returns false if either of the image's dimensions are <200px β returns false if the image is square β returns false if the image is roughly square β returns false for large attachments that aren't images β returns true for larger images cleanDataForIpc β does nothing to JSON primitives β does nothing to undefined β converts BigInts to strings β converts functions to `undefined` but does not mark them as cleaned, for backwards compatibility β converts symbols to `undefined` β converts ArrayBuffers to `undefined` β converts valid dates to ISO strings β converts invalid dates to `undefined` β converts other iterables to arrays β deeply cleans arrays, removing `undefined` and `null`s β deeply cleans sets and converts them to arrays β deeply cleans maps and converts them to objects β calls `toNumber` when available β deeply cleans objects with a `null` prototype β deeply cleans objects with a prototype of `Object.prototype` β deeply cleans class instances both/state/selectors/conversations #getConversationSelector β returns empty placeholder if falsey id provided β returns empty placeholder if no match β returns conversation by e164 first β returns conversation by uuid β returns conversation by groupId β returns conversation by conversationId β does proper caching of result #getLeftPaneList β sorts conversations based on timestamp then by intl-friendly title given pinned conversations β sorts pinned conversations based on order in storage both/state/selectors/items #getPinnedConversationIds β returns pinnedConversationIds key from items β returns empty array if no saved data both/state/selectors/search #getMessageSearchResultSelector β returns undefined if message not found in lookup β returns undefined if type is unexpected β returns incoming message β returns outgoing message and caches appropriately assert β does nothing if the assertion passes β throws because we're in a test environment assignWithNoUnnecessaryAllocation β returns the same object if there are no modifications β returns a new object if there are modifications β only performs a shallow comparison β doesn't modify the original object when there are no modifications β doesn't modify the original object when there are modifications calling notification helpers getCallingNotificationText β says that the call has ended β includes the creator's first name when describing a call β if the creator doesn't have a first name, falls back to their title β has a special message if you were the one to start the call β handles an unknown creator isIterable β returns false for non-iterables β returns true for iterables makeLookup β returns an empty object if passed an empty array β returns an object that lets you look up objects by string key β if there are duplicates, the last one wins β ignores undefined properties β allows key of 0 β converts the lookup to a string β looks up own and inherited properties reallyJsonStringify β returns the same thing as JSON.stringify when JSON.stringify returns a string β returns a string when JSON.stringify returns undefined β returns a string when JSON.stringify would error themeClassName β returns "light-theme" when passed a light theme β returns "dark-theme" when passed a dark theme version utilities isBeta β returns false for non-beta version strings β returns true for beta version strings both/util/webSafeBase64 β roundtrips with all elements #toWebSafeBase64 β replaces + β replaces / β removes = #fromWebSafeBase64 β replaces - β replaces _ β adds === β adds == β adds = 449 passing (2s) $ yarn grunt test $ grunt test Running "unit-tests" task Starting path C:\Users\Admin\repos\signal-desktop\node_modules\.bin\electron.cmd with args [ 'C:\\Users\\Admin\\repos\\signal-desktop\\main.js' ] App started. Now waiting for test results... >> 459 tests passed. Running "lib-unit-tests" task Starting path C:\Users\Admin\repos\signal-desktop\node_modules\.bin\electron.cmd with args [ 'C:\\Users\\Admin\\repos\\signal-desktop\\main.js' ] App started. Now waiting for test results... >> 123 tests passed. Done. Done in 23.69s.
I welcome dennisameling's win32 builds of zkgroup.dll
very much. The node binary seems to be okay for node usage, but does anyone know any sources for a win32 build of signal_jni.dll
for native use? My users request it, but I do not really want to build it myself.
@scottnonnenberg-signal looks like some volunteers are making progress on building signal 32 bit for windows and judging by the number of comments and participants this is not really an insignificant number of 32 bit users.
is there any plan to change this in your priority list and start working with @dennisameling to bring this into official release? there are lots of older hardware in the less developed areas that runs 32bit windows because there is no justification for a more resource hungry 64bit build on the same hardware.
a 2010 HP desktop that originally was shipped with windows xp, now runs windows 10 LTSC 32bit (receives security updates until 2029!!!) very well, but cannot use 64bit apps. except for exposing hypervisor features into a kvm guest and passing through a pci domain into a kvm guest, I've never needed 64bits on a desktop machine. all 32bit variants of the browsers run faster than their 64bit parts without missing any web features.
I understand you devs look forward into the future and the future is 64bit, but ask yourself, is this actually worth it? is it worth to leave the less developed areas/contries into the dark just because they can't afford hardware to run 64bit at decent speed?
To earlier comments in the thread, some of us are "nerds" enough that we're trying to bring our Boomer parents into the 20th century. I doubt mine are running anything above Windows XP right now, but I really want to be able to use a secure video client with them when we talk. They don't even understand what 32bit or 64bit IS and we're 3000 miles apart, doing tech support over chat - Signal of all things. And they can't figure out why it won't install.
please, get rid of that xp. it was the absolute best windows microsoft ever made but now it is a big risk of getting ransomware. if your cpu platform is Wolfdale or newer, windows 10 ltsc 32bit runs fine and you get security updates until 2029. it can do video calling and social media without problems. it's quite a pain to upgrade (xp -> vista -> 7 -> 7 enterprise -> 10 ltsb 2015 -> 10 ltsc 2019) so consider a fresh install instead on next visit.
move the OS to a SSD, add some ram if you have free dimm sockets, setup automatic updates, install an antivirus and you get a fast and automatic secure solution for your folks that doesn't need intensive maintenance until 2029!
Here's a production build of Signal Desktop 5.2.0 arm64+ia32 (32-bit): https://github.com/dennisameling/Signal-Desktop/releases/tag/v5.2.0
I plan to update the production builds regularly until the Signal team does, but it also means that auto-updating is disabled for now. You can either subscribe to this issue or my fork to be notified when a new version becomes available π
[signalapp/Signal-Desktop] [Feature Request] Support 32-bit Windows (#1636)
Hello Dennis
Thank you for the 32bit signal. I have missed signal on my PC for years now.
dennisameling on Monday, May 24, 2021, 6:31:41 AM, you wrote: +++++ [snip] +++++ Here's a production build of Signal Desktop 5.2.0 arm64+ia32 (32-bit):Β https://github.com/dennisameling/Signal-Desktop/releases/tag/v5.2.0 I plan to update the production builds regularly until the Signal team does, but it also means that auto-updating is disabled for now. You can either subscribe to this issue or my fork to be notified when a new version becomes available Γ°ΕΈΛΕ β You are receiving this because you were mentioned. Reply to this email directly,Β view it on GitHub, orΒ unsubscribe.
+++++ [end snip] +++++
RegardsΒ BobΒ Korbel Adelaide, Australia
The desktop version for Windows only supports 64-bit Windows. Do you develop a version for 32-bit Windows in future?