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

Dropping 32-bit builds #885

Closed
gibfahn opened this issue Sep 16, 2017 · 122 comments
Closed

Dropping 32-bit builds #885

gibfahn opened this issue Sep 16, 2017 · 122 comments

Comments

@gibfahn
Copy link
Member

@gibfahn gibfahn commented Sep 16, 2017

This came out of discussion of #809 in the last WG meeting (#875, minutes at #881). Discussion paraphrased below.

Basically updating CentOS 6 to gcc 4.9.3 requires devtoolset-6, which means that we can no longer do 32-bit xLinux builds.

It's difficult to know how many people are currently using x86_64 32-bit Node. The metrics show it looking pretty stagnant, but it's difficult to know how many of the downloads are from CI.

@rvagg suggested that the best way to find out would be to drop 32-bit builds in an odd-numbered release and see how many people complain, that way we have the option of adding them back in a minor version. The question was whether 9.x is too soon to do this.

Rod also said that he thought CentOS6 and Ubuntu 14 no longer had a 32-bit version, meaning that anyone relying on a 32-bit OS had already been left behind by Node 8.x. If we could confirm that this is true for most Linux and Windows versions then that would make the decision much easier.

Todo (if we decide to drop 32-bit)

  • Update the jobs to skip 32-bit Intel for Node >8.x
  • Update the website to handle the lack of 32-bit builds
  • Update the Supported Platforms list to remove x86.
@gibfahn

This comment has been minimized.

Copy link
Member Author

@gibfahn gibfahn commented Sep 16, 2017

More info on the state of play at the OS level would definitely be useful (i.e. when/if major distros stopped supporting 32-bit OSs, i.e. who we'd be breaking).

  • Linux: maybe @rvagg or @chrislea would know off the top of their heads
  • Windows: @joaocgreis and @refack
  • SmartOS: @nodejs/platform-smartos would be good to know your thoughts, I assume we don't have to drop 32-bit on SmartOS, but if we're doing it elsewhere it might be a good time to do it here too.
@refack

This comment has been minimized.

Copy link
Member

@refack refack commented Sep 16, 2017

Windows 10 still supports 32bit and "cross compiling" from a 64bit host to a 32bit target is also fully supported.
Windows Server 2008R2 was not released as 32bit host, but Windows has side-by-side technology (WoW64) that allows 32bit applications to run natively on 64bit hosts, so there should not be an external limitation for building, testing and running node32 for the foreseeable future.

BTW: AWS/Azure/GCP doesn't rent 32bit VMs of our lowest supported Windows (Server 2008R2).

@chrislea

This comment has been minimized.

Copy link

@chrislea chrislea commented Sep 17, 2017

There is absolutely still support for 32bit CentOS 6 / RHEL 6 Linux out there. Also, all Debian and Ubuntu releases still have 32bit versions, and Fedora still makes 32bit releases as well.

Red Hat dropped 32bit support with RHEL 7.

I don't have much of a sense of how many people are using 32bit builds in production. If I had to guess (emphasis mine there), I doubt many people are running 32bit Node builds on production servers, and I suspect the biggest impact might be not so much on production servers, but instead on appliances. For example, here's output from a Synology NAS that I have at home:

chl@DSPlay01:~$ uname -a
Linux DSPlay01 3.2.40 #15152 SMP PREEMPT Fri Sep 1 11:13:20 CST 2017 i686 GNU/Linux synology_evansport_214play

And yes, Node is an installable package should I choose to put it on this device. A lot of these appliance gizmos use 32bit chips because they don't have much memory and want to keep costs low, so older 32bit Atom or Celeron processors make sense.

Now, having said all that, if we assume I'm right, then I don't think we need to be too concerned about anything other than making sure that Node will in fact build on a 32bit system with a modern enough compiler, because from what I can tell almost all of these appliances have their own packaging formats and tend to build the things they need for those packages themselves.

@seishun

This comment has been minimized.

Copy link
Member

@seishun seishun commented Sep 17, 2017

@gibfahn I don't see any reason to drop 32-bit builds on Windows.

@chrislea

then I don't think we need to be too concerned about anything other than making sure that Node will in fact build on a 32bit system with a modern enough compiler

That shouldn't be a problem. We could just continue running CI jobs on 32-bit platforms where it's easy enough to install a supported compiler, e.g. Ubuntu 14.04.

@joaocgreis

This comment has been minimized.

Copy link
Member

@joaocgreis joaocgreis commented Sep 17, 2017

We shouldn't drop Windows 32-bit support. While our deps have support for it, it'll be easy for us to maintain. Windows and Visual Studio have full support for 32-bit.

@bnoordhuis

This comment has been minimized.

Copy link
Member

@bnoordhuis bnoordhuis commented Sep 19, 2017

Apropos Fedora, i686 is in a state of disrepair and has been for years: https://lwn.net/Articles/728207/

There is a Special Interest Group since a few months that fixed some things but I think it's safe to say no one runs Fedora i686 in production and it's not worth spending time on.

@chrislea

This comment has been minimized.

Copy link

@chrislea chrislea commented Sep 19, 2017

Unfortunately I have seen people running 32bit Fedora out there in the wild (same for CentOS 6 and occasionally an older Debian / Ubuntu release). But generally I feel like all the major distros want to drop it and are sort of looking at each other waiting to see who does it first. I know Arch Linux (not one of the major ones, but important among the more hacker / bleeding edge types) is dropping it officially in November of this year.

So I still feel pretty comfortable with what I said above, which is that I think we'd be okay if we continue to "support" it in the sense that we make sure it will in fact build on a 32bit x86 machine, but we stop making official release tarballs for it.

@gibfahn

This comment has been minimized.

Copy link
Member Author

@gibfahn gibfahn commented Sep 19, 2017

So maybe the answer is to drop it to Tier 2 or Experimental rather than dropping completely.

@jasnell

This comment has been minimized.

Copy link
Member

@jasnell jasnell commented Sep 19, 2017

Some informal research shows that there are still a fair number of users using 32-bit builds on smaller IoT devices. I doubt this is a large group, but it's still worth bearing in mind.

I'm going to tag this with a tsc-review label.

@chrislea

This comment has been minimized.

Copy link

@chrislea chrislea commented Sep 19, 2017

Yes @jasnell if you'd like my $0.02 on the "devices" thing (I'm sure you're just dying to hear) it's here.

@gibfahn

This comment has been minimized.

Copy link
Member Author

@gibfahn gibfahn commented Sep 19, 2017

@chrislea wrong link? That seems to point to my comment above.

@chrislea

This comment has been minimized.

Copy link

@chrislea chrislea commented Sep 19, 2017

My bad, try this.

@seishun

This comment has been minimized.

Copy link
Member

@seishun seishun commented Sep 23, 2017

It's been a week and I see no objections to dropping public 32-bit Linux builds. Perhaps we can proceed with that for now and leave the discussion about dropping 32-bit support (or downgrading it to Experimental) for later?

@refack

This comment has been minimized.

Copy link
Member

@refack refack commented Sep 23, 2017

@nodejs/release did discuss this at the last meeting. @gibfahn what was the decision (I remember something about IoT, and maybe stop releasing, but keep testing..)?

@gibfahn

This comment has been minimized.

Copy link
Member Author

@gibfahn gibfahn commented Sep 24, 2017

@nodejs/release did discuss this at the last meeting.

Discussed here, there wasn't a decision, but @jasnell mentioned that he believed he knew of some embedded devices that were Intel 32-bit Linux, and that he'd had requests from people for us to not drop 32-bit builds. So more info on that would be good. James did say that he thought continuing to test but not doing releases sounded reasonable.

It's been a week and I see no objections to dropping public 32-bit Linux builds.

This was raised for tsc-review, but it looks like it got missed at the last meeting, nodejs/TSC#359 (or at least it's not in the minutes).

@gibfahn

This comment has been minimized.

Copy link
Member Author

@gibfahn gibfahn commented Sep 24, 2017

Perhaps we can proceed with that for now and leave the discussion about dropping 32-bit support (or downgrading it to Experimental) for later?

That seems like a good idea.

So, does anyone have an objection to us ceasing to do 32-bit xLinux releases from Node 9.x onwards? We will continue to run CI. cc/ @nodejs/build @nodejs/lts @nodejs/tsc

@mscdex

This comment has been minimized.

Copy link

@mscdex mscdex commented Sep 24, 2017

Might want to update the original post if this is about Intel 32-bit only and not other platforms (e.g. ARM).

@gibfahn

This comment has been minimized.

Copy link
Member Author

@gibfahn gibfahn commented Sep 24, 2017

Might want to update the original post if this is about Intel 32-bit only and not other platforms (e.g. ARM).

It was originally supposed to be a more general discussion (including ARM). The xLinux discussion is just the most pressing matter.

@mscdex

This comment has been minimized.

Copy link

@mscdex mscdex commented Sep 24, 2017

What is "xLinux?" Is it an IBM thing?

@gibfahn

This comment has been minimized.

Copy link
Member Author

@gibfahn gibfahn commented Sep 24, 2017

What is "xLinux?" Is it an IBM thing?

x86_64 Linux, as opposed to aLinux (ARM Linux), pLinux (Power Linux), and zLinux (z Linux).

Probably used more often in IBM, as we deal with more architectures than most, but I don't think it's exclusive.

@chrislea

This comment has been minimized.

Copy link

@chrislea chrislea commented Sep 28, 2017

Ubuntu is going to stop making 32bit desktop ISOs with their next release, just FYI.

@rvagg

This comment has been minimized.

Copy link
Member

@rvagg rvagg commented Sep 29, 2017

That full context on the Ubuntu decision is actually pretty informative about their perspective on the future of i386

@rvagg

This comment has been minimized.

@seishun

This comment has been minimized.

Copy link
Member

@seishun seishun commented Sep 30, 2017

Still no objections. What next?

@gibfahn

This comment has been minimized.

Copy link
Member Author

@gibfahn gibfahn commented Sep 30, 2017

No objections raised by anyone in Build or TSC AFAICT, so I think this is agreed unless someone wants to put it on tsc-agenda and discuss there. @jasnell is that something you want to do?

Otherwise this is done, it's just a question of someone adding the correct if statements to the release build job.

@rvagg @joaocgreis you've done this more than most I think, if I come up with a diff can you review?

@seishun

This comment has been minimized.

Copy link
Member

@seishun seishun commented Sep 30, 2017

Do #797 and #809 need to wait until the release build job change is implemented?

fhemberger added a commit to nodejs/nodejs.org that referenced this issue Oct 31, 2018
32bit support has been dropped in 10.x
Ref: nodejs/build#885
@traumschule

This comment has been minimized.

Copy link

@traumschule traumschule commented Oct 31, 2018

+1 for keeping 32bit
https://lwn.net/Articles/769732/

@fredericgermain

This comment has been minimized.

Copy link

@fredericgermain fredericgermain commented Nov 1, 2018

I would need the x86 build on my Qnap, which has a Intel N270 CPU (but ok, it's old...)

@refack

This comment has been minimized.

Copy link
Member

@refack refack commented Nov 1, 2018

@traumschule and @fredericgermain hello,

As mentioned before the decision to downgrade 32bit linux support was made because we are volunteers, and we have limited virtual-ware support that is donated by our sponsors. Allocating and deploying 32bit linux build toolchains is getting harder, and we decided to recommend downgrading the support level now, so that it will be a semver-major change, and not at some arbitrary point in the future when we would be forced to stop providing the tools to properly support it, out of necessity.

There are subtle two points you could consider:

  1. Node.js core has only downgraded the support level of 32bit linux to "Experimental", which means there should not be any intentional code changes that break it, but just that there will not be continuous testing on 32bit linux to validate it has not broken. Node.js will most probably accept PRs that fix it, in case it breaks.
  2. The build WG is willing to assist a community effort to provide CI and distribution of 32bit linux node binaries, if anyone is willing to volunteer the effort.
@mitra42

This comment has been minimized.

Copy link

@mitra42 mitra42 commented Feb 4, 2019

Are there any workarounds for this, we've been trying to put some node based systems onto some combined wifi/storage/battery boxes for running in remote areas, and these are still 32 bit. We wouldn't mind running Node 9.x but the problem is that more and more of our dependencies are requiring node 10.x so its not the functionality in node 9.x thats the problem its the package dependence of other packages on the 10.x version.

@refack

This comment has been minimized.

Copy link
Member

@refack refack commented Feb 4, 2019

Hello @mitra42,
Support for Linux/x32 was downgraded to Experimental which means we are just not do CI testing, or releasing an official binary.
You should still be able to compile the binary on your own.

P.S. We are willing to help community driven efforts to publish independent x32 builds.

@mitra42

This comment has been minimized.

Copy link

@mitra42 mitra42 commented Feb 4, 2019

Thats unfortunate, since I don't have (or know anyone who does) have the expertise to do a build/cross-compile to a 32 bit binary, which pretty much rules out node as the platform on these small linux based boxes :-(

By the way ... the project is to put a stripped down version of the Internet Archive on these small boxes, for use in remote education settings with minimal internet access. That's a huge project, so trying to add to that building the underlying tools (specifically node) isn't really possible. If there's anyone around who knows how to build a 32 bit binary from the node repo I'd love to hear from them.

@chrislea

This comment has been minimized.

Copy link

@chrislea chrislea commented Feb 4, 2019

@mitra42 I wrote a blog post about how to cross-compile Node for arm architectures on an amd64 box which you may find helpful.

I suspect building a 32bit Intel binary on a 64bit Intel machine should be considerably easier than what I outlined there, however. Most of what's needed in that article is there because when you compile Node, it builds some binary tools that are needed by the build process itself along the way, which complicates things going across architectures from Intel to Arm. That shouldn't be an issue in the situation you're describing though, the 32bit Intel binaries that will get built should work fine on a 64bit Intel machine as long as you have the correct 32bit support libraries installed.

Hope this helps.

@refack

This comment has been minimized.

Copy link
Member

@refack refack commented Feb 4, 2019

@mitra42 feel free to contact me directly (my email address is in the nodejs/node README).

@Daniel15

This comment has been minimized.

Copy link

@Daniel15 Daniel15 commented Mar 13, 2019

32-bit is still very useful for low-RAM systems... For example, there's very cheap VPSes with 128 MB or 256 MB RAM available. Node would run fine on these, but they're usually running 32-bit OSes, as there's no advantage of 64-bit in cases where such little RAM is available.

benjamn added a commit to meteor/meteor that referenced this issue Apr 12, 2019
Node 10 dropped support for 32-bit Linux:
nodejs/build#885
@RoestVrijStaal

This comment has been minimized.

Copy link

@RoestVrijStaal RoestVrijStaal commented Apr 14, 2019

I wonder why this ticket is still open, because you don't provide any builds for 32-bit Linux anymore.

If there is a way to upload my self compiled binaries, I'd gladly do so.

@rvagg

This comment has been minimized.

Copy link
Member

@rvagg rvagg commented Apr 15, 2019

well, we might be seeing 32-bit builds back in an "unofficial" capacity soon, so we'll keep this issue open until there's something to talk about on that front

@rvagg

This comment has been minimized.

Copy link
Member

@rvagg rvagg commented Apr 24, 2019

I'm going to repeat some of what I've just put in #1677 regarding ARMv6 binaries that just got dropped from Node 12 because it also relates to Linux x86 users:

I'm attempting to start an "unofficial-builds" project. It's producing Linux x86 binaries automatically following every release. They follow the new libc and compiler minimums in BUILDING.md and are built pretty much the same way as Linux x64 are, so they're not going to work with very old distros (but in theory it should be compatible with CentOS 7+, that's Ubuntu 14.04+, Debian 8+). The catch is that it's automatic, so may break and may be delayed. The intention is also not for the Build Working Group to be the owner of it, it shouldn't stretch Build resources at all because they're already stretched.

The project is housed at https://github.com/nodejs/unofficial-builds and it's looking for contributors and people to help maintain it. It has a single server that's (so far) pumping out 3 types of binaries that folks have been asking for but the core project (via Build) hasn't been able to accomodate: linux-x86, linux-x64-musl and linux-armv6. Those binaries are published to https://unofficial-builds.nodejs.org/ where you'll find a /download/ directory that's very similar to nodejs.org/download, complete with index.tab and index.json (perhaps someone could talk Jordan to hooking nvm up to it one day).

So this issue is considered closed as far as Build is concerned but I'd encourage you to consider whether there are ways you might be able to contribute to making unofficial-builds sustainable, even if that's just clicking 'Watch' and helping dealing with easy issues as they come in. With no Linux x86 testing of new commits since Node 10, the users of these binaries are going to have to be the test platform and will have to help report and fix problems.

@rvagg rvagg closed this Apr 24, 2019
action items automation moved this from In Progress to done Apr 24, 2019
@prahladyeri

This comment has been minimized.

Copy link

@prahladyeri prahladyeri commented Jul 16, 2019

Hoping that i386 support will be revived for Node.js soon for the 10 and 12 LTS branches 😄

@mitra42

This comment has been minimized.

Copy link

@mitra42 mitra42 commented Jul 16, 2019

This is a great project - and as one of the platforms we'd like to support dweb-mirror is the 32-bit Rachel box, its timely.

BUT ... needs some docs, similarity to nodejs.org/download doesn't help those of us used to getting our node installations with apt-get, I couldn't figure out how to install these binaries.

Note that I'm not a node developer, but happy to incorporate it into our install, and report issues we find to the project's github. (I'll post this request for docs there as well)

@rvagg

This comment has been minimized.

Copy link
Member

@rvagg rvagg commented Jul 17, 2019

@prahladyeri i386 is not coming back to nodejs.org, it'll be unofficial if anything. https://unofficial-builds.nodejs.org/ is where you can get them from for now.

@mitra42 docs can be contributed at https://github.com/nodejs/unofficial-builds, there's a 'www' directory that has the index.html that's shown at https://unofficial-builds.nodejs.org/

@mitra42

This comment has been minimized.

Copy link

@mitra42 mitra42 commented Jul 17, 2019

@rvagg I hope someone can contribute the docs, I'm probably not the only one who can't figure out how to install binaries (rather than apt get) and so can't actually use these unofficial builds

@sr229 sr229 mentioned this issue Sep 12, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
You can’t perform that action at this time.