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

Should we drop support for 32 bit Windows? #42543

Closed
targos opened this issue Mar 31, 2022 · 43 comments · Fixed by #53184
Closed

Should we drop support for 32 bit Windows? #42543

targos opened this issue Mar 31, 2022 · 43 comments · Fixed by #53184
Labels
build Issues and PRs related to build files or the CI. discuss Issues opened for discussions and feedbacks. windows Issues and PRs related to the Windows platform.

Comments

@targos
Copy link
Member

targos commented Mar 31, 2022

It's not really something that I want, but given the issues I'm having with #42115, I thought it was worth to bring up the idea.

There are some stats on https://store.steampowered.com/hwsurvey which show that there are actually much less Steam users (I know that's probably not representative of Node.js Windows users, feel free to share better numbers) on 32 bit Windows (0.27%) than on 64 bit Windows 7 (4.08%, and we already stopped supporting Windows 7):

image

@targos targos added windows Issues and PRs related to the Windows platform. discuss Issues opened for discussions and feedbacks. build Issues and PRs related to build files or the CI. labels Mar 31, 2022
@mscdex
Copy link
Contributor

mscdex commented Mar 31, 2022

I'm surprised that 32-bit support on Windows wasn't downgraded completely to Experimental at the same time that 32-bit on Linux was downgraded.

@Flarna
Copy link
Member

Flarna commented Mar 31, 2022

As far as I remember linux 32 bit was dropped because of toolchain issues and the initial plan was to fix it later. That never happend and it seems noone really cares.

FWIW the default on Azure WebApps/Functions is still 32 Bit windows. Don't know why and they support also 64 Bit but the default is 32 bit as far as I know. Maybe because the lower mem requirement of 32 bit windows allows significant savings for a cloud provider.

@targos
Copy link
Member Author

targos commented Apr 4, 2022

because of toolchain issues

That's also the kind of issues we have with Windows.

@targos
Copy link
Member Author

targos commented Apr 4, 2022

@nodejs/tsc @nodejs/build @nodejs/platform-windows What do you think?

@sxa
Copy link
Member

sxa commented Apr 4, 2022

My gut feel is that we'd get quite a bit more pushback for removing 32-bit windows compared to 32-bit xlinux. I know that there are still customers, at least for java, that still need the 32-bit Windows builds for whatever reason, so I suspect that would be the same for node.js as well.

Although saying that, we could perhaps do with a few more windows devs at the project to help with issues such as the one you reference ... Perhaps dropping the tier it would make us find some volunteers more easily? ;-)

@Flarna
Copy link
Member

Flarna commented Apr 4, 2022

Well, that time it was not even possible to get a compiler for the build machines to compile 32Bit code at all understanding the C++ standard require by v8. Google Chrome is available for 32Bit so in general it should work. But not sure if google uses msvc.

Anyhow, I fully understand the problem and if there are not enough people to solve them it's better to drop 32Bit only instead delaying/blocking the whole project.

@mcollina
Copy link
Member

mcollina commented Apr 4, 2022

I'm +1 from dropping support of 32 Windows in v18. If companies care about this, they should actually allocate some people to fix it. This includes Microsoft (cc @fhinkel @bnb).

@richardlau
Copy link
Member

Maybe someone could crawl through the daily download metrics in https://storage.googleapis.com/access-logs-summaries-nodejs/index.html (linked to from https://nodejs.org/metrics/) to gather some sort of evidence (either way).

@bnb
Copy link
Contributor

bnb commented Apr 4, 2022

(I know that's probably not representative of Node.js Windows users, feel free to share better numbers)

I actually think this is a good metric to track, specifically because a lot of the apps that "gamers" use end up bundling Node.js somehow (Electron or QT + Node.js).

I'm +1 from dropping support of 32 Windows in v18. If companies care about this, they should actually allocate some people to fix it.

I agree.

@benjamingr
Copy link
Member

What if Node.js adds a warning to Windows 32bit builds and we see if people notice/care?

I agree with Matteo and Tierney that if companies care about this they should allocate some people to fix it.

@richardlau
Copy link
Member

What if Node.js adds a warning to Windows 32bit builds and we see if people notice/care?

Based on the pushback we got around dropping Windows 7 I'm not that keen to go down this route. I'm open to downgrading 32-bit Windows from tier 1 if it's becoming impossible to keep working.

@targos
Copy link
Member Author

targos commented Apr 4, 2022

What if Node.js adds a warning to Windows 32bit builds and we see if people notice/care?

The problem now is that we are not able to build it at all (with V8 10.1).

@richardlau
Copy link
Member

richardlau commented Apr 4, 2022

With regards to when we dropped support for 32-bit Linux we also put in place the unofficial builds project https://unofficial-builds.nodejs.org/ where you could go (and can still go) to get x86 Linux binaries. We don't have anything in place to do anything similar for 32-bit Windows and from the sounds of it if the current problem(s) isn't solved we wouldn't have a binary at all (official or unofficial).

@mhdawson
Copy link
Member

mhdawson commented Apr 4, 2022

Some numbers from the last quarter in terms of downloads. These are from
summaries that we generate to look at internally so don't have exactly what's
needed in this case but are what I can provide with low effort. Thes are the numbers
from Jan 1 through March 31 generated from the metrics @richardlau mentioned earlier
(https://storage.googleapis.com/access-logs-summaries-nodejs/index.html )

=> Operating System:
linux was downloaded: 78991840
win was downloaded: 22736332

=> Architecture:
x64 was downloaded: 104434118
x86 was downloaded: 1285150

The x86 number I believe is across all architectures but I think windows may be the only one that we still
have official downloads. At 1.2M out of 22.7M for windows it would be about 5%
the 32 bit windows downloads.

@targos
Copy link
Member Author

targos commented Apr 5, 2022

What if Node.js adds a warning to Windows 32bit builds and we see if people notice/care?

The problem now is that we are not able to build it at all (with V8 10.1).

Build seems fixed in V8 10.2.

@hello-smile6
Copy link

noone really cares

I care. I now can't run NodeBB on my 32-bit virtual machine. Or, for that matter, Electron on v86.

@hello-smile6
Copy link

With regards to when we dropped support for 32-bit Linux we also put in place the unofficial builds project https://unofficial-builds.nodejs.org/ where you could go (and can still go) to get x86 Linux binaries. We don't have anything in place to do anything similar for 32-bit Windows and from the sounds of it if the current problem(s) isn't solved we wouldn't have a binary at all (official or unofficial).

Those releases don't have npm.

@bnb
Copy link
Contributor

bnb commented Apr 5, 2022

I care. I now can't run NodeBB on my 32-bit virtual machine. Or, for that matter, Electron on v86.

@hello-smile6 Electron builds Node.js differently than the Node.js builds we're talking about here. While I'm not sure if they'll follow suit, this theoretically doesn't impact Electron since they don't use our builds.

@richardlau
Copy link
Member

With regards to when we dropped support for 32-bit Linux we also put in place the unofficial builds project https://unofficial-builds.nodejs.org/ where you could go (and can still go) to get x86 Linux binaries. We don't have anything in place to do anything similar for 32-bit Windows and from the sounds of it if the current problem(s) isn't solved we wouldn't have a binary at all (official or unofficial).

Those releases don't have npm.

😕 They should do.

@hello-smile6
Copy link

With regards to when we dropped support for 32-bit Linux we also put in place the unofficial builds project https://unofficial-builds.nodejs.org/ where you could go (and can still go) to get x86 Linux binaries. We don't have anything in place to do anything similar for 32-bit Windows and from the sounds of it if the current problem(s) isn't solved we wouldn't have a binary at all (official or unofficial).

Those releases don't have npm.

😕 They should do.

They don't. Also, Node.js is no longer in the Debian software repositories. Why were old versions removed?

@bnb
Copy link
Contributor

bnb commented Apr 5, 2022

They don't. Also, Node.js is no longer in the Debian software repositories. Why were old versions removed?

Those were never maintained by the Node.js project. Ask Debian software repository maintainers.

@hello-smile6
Copy link

They don't. Also, Node.js is no longer in the Debian software repositories. Why were old versions removed?

Those were never maintained by the Node.js project. Ask Debian software repository maintainers.

Strangely, the latest release seems to have npm. It wasn't available the last time I checked.

@hello-smile6
Copy link

Actually, npm isn't available.

@hello-smile6
Copy link

There are binaries for npm, but they're in node_modules.

@bnb
Copy link
Contributor

bnb commented Apr 5, 2022

If you'd like to create a separate issue for that, please do. Let's try to keep this issue on the subject of dropping 32 bit binaries.

@hello-smile6
Copy link

If you'd like to create a separate issue for that, please do. Let's try to keep this issue on the subject of dropping 32 bit binaries.

What will happen for people who use wine for some reason with nodejs?

@mscdex
Copy link
Contributor

mscdex commented Apr 5, 2022

What will happen for people who use wine for some reason with nodejs?

Use a 64-bit wine prefix?

@gengjiawen
Copy link
Member

Another issue #46445 (comment)

I propose we drop 32-bit win support on Node.js 20. otherwise it will be a heavy maintaining burden for us.

@sxa
Copy link
Member

sxa commented Feb 2, 2023

I think that's probably the right decision now. We should also consider that Windows 11 and Server versions from 2012 onwards (2008 is out of support now, Win10 still supports it and is supported til Oct.2025 and is available via https://www.microsoft.com/en-gb/software-download/windows10ISO) did not have 32-bit versions, so the only use cases people would have to continue to be using it should be:

  • Win32 native modules that can't be rebuilt
  • Non-64-bit capable hardware

So I support dropping it in 20 - it will, if nothing else, let is gauge the reaction from the user base.

@bnb
Copy link
Contributor

bnb commented Feb 2, 2023

+1 to dropping 32-bit Windows in v20+.

Re-sharing the numbers from the OP one year later, usage of both Windows 7 32-bit (-0.08) and Windows 10 32-bit (-0.03) have dropped even further which suggests a trend of Windows users updating off of the versions of Windows that currently support 32-bit. Further, according to @sxa, there's no Windows Server version that supports 32-bit, so there's not uncertainty there anymore.

image

@anfibiacreativa
Copy link
Contributor

We are currently gathering and analyzing usage data and telemetry from different sources, to better understand the need for support for this version at a more global level, and share those results with the core team. Hopefully we have more insights next week.

@targos
Copy link
Member Author

targos commented Mar 13, 2023

@anfibiacreativa Do you have any results to share?

@alexsch01
Copy link
Contributor

image

I think it's a good time to drop 32 bit Windows

@anfibiacreativa
Copy link
Contributor

A while ago a colleague in the Windows experience team reached out about this issue. Please let me bring this issue back to their attention.

@bnb
Copy link
Contributor

bnb commented Apr 15, 2024

IMO if there's not a compelling reason soon, we should drop it in the next SemVer major.

@mhdawson
Copy link
Member

@anfibiacreativa thanks for following up.

@AdamBraden
Copy link

As noted above Win10 and thus 32bit is supported by Microsoft until October 2025.

It seems reasonable to have the build of NodeJS that will be in LTS at that point in time to be the last version with 32bit support. My understanding of this page, https://nodejs.org/en/about/previous-releases, indicates v22 would be best aligned, though a strong argument could be made that v20 would suffice given the general low usage of 32bit node.

@colin969
Copy link

I develop software that has a decent userbase on weaker machines in poorer countries, and even they've seen 32 bit usage plummet to around 0.4% of users, with Windows 7 usage still at around 2%.

I'm already having to use out of date build tools in our CI for both Rust and Go to get everything working for these users, whether Node drops it or not developers are going to be forced into it because of lowest common denominator sometimes.

@avivkeller
Copy link
Member

avivkeller commented May 26, 2024

What would this mean for the win32 references throughout the code, such as path.win32., would they stay the same, or be renamed to path.windows, etc?

Also, PassMark also has numbers on this: https://www.pcbenchmarks.net/os-marketshare.html.
According to it, 0.2% of users are running 32 bit windows, but I don't know how reliable that really is

@tniessen
Copy link
Member

I don't think there's much point in deviating from the existing win32 naming convention. (Its purpose was to distinguish from the old 16-bit Windows API, but the 64-bit API and the 32-bit API are largely compatible thanks to x64 CPUs supporting both transparently.)

targos added a commit to targos/node that referenced this issue May 28, 2024
sophoniie pushed a commit to sophoniie/node that referenced this issue Jun 20, 2024
Closes: nodejs#42543
PR-URL: nodejs#53184
Fixes: nodejs#42543
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Michael Dawson <midawson@redhat.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz.nizipli@sentry.io>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
Reviewed-By: Richard Lau <rlau@redhat.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Stefan Stojanovic <stefan.stojanovic@janeasystems.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
bmeck pushed a commit to bmeck/node that referenced this issue Jun 22, 2024
Closes: nodejs#42543
PR-URL: nodejs#53184
Fixes: nodejs#42543
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Michael Dawson <midawson@redhat.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz.nizipli@sentry.io>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
Reviewed-By: Richard Lau <rlau@redhat.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Stefan Stojanovic <stefan.stojanovic@janeasystems.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
build Issues and PRs related to build files or the CI. discuss Issues opened for discussions and feedbacks. windows Issues and PRs related to the Windows platform.
Projects
None yet
Development

Successfully merging a pull request may close this issue.