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

Create proposal for list of officially supported platforms #488

Closed
rvagg opened this issue Sep 7, 2016 · 45 comments
Closed

Create proposal for list of officially supported platforms #488

rvagg opened this issue Sep 7, 2016 · 45 comments

Comments

@rvagg
Copy link
Member

rvagg commented Sep 7, 2016

This is an extension of nodejs/node#8265 (making a new issue because we don't seem to have a build-agenda label we're using to make agenda items outside of our repo). We're being delegated the task of coming up with a proposal for an initial supported platforms / permutations list for the CTC to accept.

Would someone like to put up a hand to start such a list? We did have one on our very first README.md iteration but it's been removed for lack of maintenance (and it was aspirational rather than reflecting anything we had).

My proposal for process is (copied from nodejs/node#8265 (comment)):

Proposal from the Build WG meeting this week goes something like this:

  • It's entirely up to the CTC to sign off on a "supported platforms" list
  • The Build WG can be used as an expert group to (a) come up with an initial proposed list and (b) occasionally advise on updates to the list or be consulted on proposed updates. If we had an active Hardware WG then they could also be in the conversation but we don't have that right now.
  • It would be good to have at least 2 tiers of hosts, perhaps even 3 (names could be improved here):
    • Officially supported: test failures on these permutations should prevent a release; master and release branches should always be green on these
    • Aspirationally supported: aiming for always-green but releases shouldn't be held up and collaborators should attempt to get to green on master and release branches but excessive yak shaving to get support should not be a holdup (e.g. getting musl features working for alpine builds?)
    • Experimental: mostly would be the Build WG playing with new platforms, no requirement for collaborators to even pay attention to these if they don't care

The trick here is the technical pieces to have different levels of support. Ideally we'd be able to prevent failures on the non-official platforms from causing a red/failed build. Perhaps we can reuse the yellow/flaky stuff somehow. The Build WG has some ideas here and some TODOs for experimentation on how to make this work. The other path is to simply deal with this complexity through the new github bot that's going to be reporting all sorts of stuff to github and may even mean collaborators don't need to even touch or look at Jenkins.

@rvagg
Copy link
Member Author

rvagg commented Sep 7, 2016

Initial list might be worth taking from libuv: libuv/libuv@be0e24c (/h1 @cjihrig).

Also note FTR that this needs to go back on ctc-agenda when we have something, the CTC is waiting on us here.

@claudiorodriguez
Copy link

Not part of the workgroup but I thought it might be useful to share that Mozilla also similarly does Tier 1-3: https://developer.mozilla.org/en-US/docs/Supported_build_configurations and has some nice explanations to go with them.

@rvagg
Copy link
Member Author

rvagg commented Sep 7, 2016

Nice, I particularly like the way they assign individuals responsible for tier-3 platforms, we can be doing that with the IBM platforms for instance and if anyone shows up super keen to maintain something obscure then we can give them a 👍 as long as their name gets to go next to it and they remain responsive enough to fix stuff.

@geek
Copy link
Member

geek commented Sep 7, 2016

@rvagg looks good.

The list should include SmartOS as an officially supported tier 1 platform with @misterdjules and myself supporting it.

@misterdjules
Copy link
Contributor

I'm not part of the working group, but I would like to add that the list of platforms supported by libuv is not necessarily a good starting point for the Node.js project with regards to the Solaris and SmartOS platforms.

The libuv project currently documents only Solaris (and not SmartOS) as a supported platform. The reason for not using the name SmartOS and for not making it a tier 1 platform, even if tests are run by the CI infrastructure on SmartOS and they all pass, might be that there's no official collaborator to the libuv project who committed to support that platform full time, even though I've been responding quickly to any issue that arose in the past.

For the Node.js project, node "sunos" binaries are actually built on SmartOS, and as a result don't run on Solaris. So they are effectively supported only on SmartOS and should really be "smartos" binaries. Finally, there are at least two official collaborators in the Node.js project who can support the SmartOS platform full-time (@geek and me).

As a result I would expect the SmartOS platform (named "SmartOS", not "SunOS", "Solaris" or with any other name) to be present in the list at tier 1 level.

@bnoordhuis
Copy link
Member

The list should include SmartOS as an officially supported tier 1 platform with @misterdjules and myself supporting it.

I think that is stretching it a bit. IBM has a magnitude more people working on node.js and I don't think we claim that AIX/zOS/PPC are tier 1.

And no offense to you personally but I don't see many code fixes or interaction on the bug tracker vis-a-vis smartos-related issues from you. To claim tier 1 status for a platform, its supporters should be both active and proactive; I think it's fair to say that neither you nor @misterdjules really fit that description.

(I'm not attacking or berating you, just stating my perceptions. If you think I'm wrong, please say so.)

@mhdawson
Copy link
Member

mhdawson commented Sep 7, 2016

Just to throw in my 2 cents in, I like the Mozilla 1-3 but I would like to see the IBM platforms getting to Tier 2 as I think we do better than Tier 3 implies. There is hardware in the CI for these platforms and pretty much all tests are running on them as well.

@misterdjules
Copy link
Contributor

The list should include SmartOS as an officially supported tier 1 platform with @misterdjules and myself supporting it.

I think that is stretching it a bit. IBM has a magnitude more people working on node.js and I don't think we claim that AIX/zOS/PPC are tier 1.

I don't think comparing the number of people employed by some of the companies that drive the development of some platforms on which node runs is a good way to approach this problem.

It seems that the reason why some of the maintainers of the AIX/zOS/PPC platforms may not be considering these platforms as part of tier 1 yet is that they've been added relatively recently to the CI platform compared to other platforms such as SmartOS, and they still have more tests failing and/or flaky than most other platforms.

In comparison, tests for the SmartOS platform have been running for years and now run with a number of flaky tests that is comparable to other platforms, thanks among other things to the great work done by @Trott, @jbergstroem, @santigimeno, the @nodejs/platform-solaris team and others.

And no offense to you personally but I don't see many code fixes or interaction on the bug tracker vis-a-vis smartos-related issues from you.

@geek joined Joyent only two weeks ago, and thus just started to have the time resources to focus on SmartOS since then, so it's not a surprise you haven't seen him active on that platform yet. But Joyent hiring him is a clear sign of its commitment to maintaining Node.js on SmartOS.

To claim tier 1 status for a platform, its supporters should be both active and proactive; I think it's fair to say that neither you nor @misterdjules really fit that description.

I've been active and proactive in supporting the SmartOS platform, in nodejs/node, libuv/libuv but also in other projects like nvm. When not directly involved in fixing issues that are specific to SmartOS, I've provided support and resources to the build team for issues related to the SmartOS platform on a regular basis. Several other collaborators that I mentioned above have done the same.

This is why the level of support for the SmartOS platform in the Node.js project matches both libuv's and Mozilla's definition of a Tier 1 platform.

If that level of support is not considered enough, then we should work together to bring it to a level that satisfies the expectations. An example of such an effort is libuv/libuv#1036, where I'm trying to improve the communication channels between the libuv collaborators team and maintainers of the SmartOS platform.

@mhdawson
Copy link
Member

mhdawson commented Sep 7, 2016

I think that only AIX has more flaky tests (which we are working on). PPC and linuxOne run consistently clean.

@jbergstroem
Copy link
Member

Here's a initial stab at a "supported platform" document: https://gist.github.com/jbergstroem/8a4a5b6a602aacc96eb8a171698c324c

@Trott
Copy link
Member

Trott commented Sep 20, 2016

  • What's the justification for SmartOS being Experimental rather than Tier 2? (I see lots of discussion about whether or not its Tier 1 above, but if it's not even Tier 2, a clear statement of the gap would be helpful. I'm not invested in SmartOS or anything, and I don't really much care where it ends up, but I am surprised to see it as Experimental given the descriptions of the different tiers in the doc. Perhaps I am misunderstanding something somewhere?)
  • Perhaps related: Does "There needs to be at least one individual..." refer to an individual in the project or an individual in the Build WG?

@jbergstroem
Copy link
Member

@Trott said:
What's the justification for SmartOS being Experimental rather than Tier 2?

No one from the build group has compiled or tested Node.js on Smartos 15 and 16.

@Trott
Copy link
Member

Trott commented Sep 20, 2016

No one from the build group has compiled or tested Node.js on Smartos 15 and 16.

Ah! I see. Never mind. Makes sense to me.

@jbergstroem
Copy link
Member

The idea is to have a document on the table for next weeks (Week of September 26th) CTC meeting.

@misterdjules
Copy link
Contributor

@jbergstroem

All Tier 1 releases should be available through the nodejs.org/download page.

Does that mean that node binaries built on SmartOS 14 (or any other platform version) would not be available from nodejs.org?

@jbergstroem
Copy link
Member

@misterdjules: I'll remove that line. Was there while drafting, doesn't belong.

@bnoordhuis
Copy link
Member

Isn't "macOS >= 10.7" a little white lie? We only test 10.10, don't we?

@bnoordhuis
Copy link
Member

Also:

Node.js officially supports to be built against shared representations of what can be found in deps/ as long as the version of the shared library is at least equal or newer to the one found in deps.

Since we regularly float patches, I don't think we can really make that claim. I'd mellow it to 'best effort' status.

@jbergstroem
Copy link
Member

@bnoordhuis said:
Isn't "macOS >= 10.7" a little white lie? We only test 10.10, don't we?

Yes, you're right. We're hopefully closing in on having this environment up and running -- I guess that won't make it in a week though. It would indeed be a shame to enforce 10.10 seeing how 10.7 is lowest req for v8 5.2 (right? -- recall chatting about that a few months back) and 10.8 for v8 5.4.

Would that imply that we just drop support for <10.10 or add >10.7 < 10.10 as a lower Tier?

@bnoordhuis said:
Since we regularly float patches, I don't think we can really make that claim. I'd mellow it to 'best effort' status.

The last times we've floated (sans v8) - for instance http_parser - could have been avoided. I think we should be more careful with floating. You're correct in this not being the place for that discussion though. C-ares is a bit unfortunate too, but I've successfully linked and tested against the upstream version, windows being the exception.

Unless other people chip in I'll update the wording before we put it in front of CTC.

@bnoordhuis
Copy link
Member

Would that imply that we just drop support for <10.10 or add >10.7 < 10.10 as a lower Tier?

If we can add 10.8 and 10.9 to the CI, I'd be okay with promoting it to tier 1. I think IBM internally tests from 10.8 and up but I don't know the details. No opinion on 10.7.

If that's not an option, we could demote <10.10 to experimental / best effort status.

@rvagg
Copy link
Member Author

rvagg commented Sep 21, 2016

This is what https://www.netmarketshare.com/ reckon the breakdown is for last month:

screenshot 2016-09-21 21 45 44

Nobody deploys server code to OSX, I suspect that the primary way that OSX is a distribution target for us is now via Electron, although I'm not sure how to factor that in to our deliberations here!

The dropoff below 10.10 is pretty sharp, below 10.9 it becomes even more decisive. At 10.9 we're at nearly 1/2 of what Windows Vista still holds and 10.8 is a 5th of Vista.

Given those numbers I think I'd be comfortable relegating <10.10 to a lower category and when we get our new OSX testing infra we can make a call on how far below 10.10 we go but it's hard to see the point in even going to 10.9 with those numbers.

The only strong opinion I hold here, however, is that I don't really want us to spread ourselves too thin, which argues for keeping things as tight as we can justify without pushing too many potential consumers to the margins.

@richardlau
Copy link
Member

I think IBM internally tests from 10.8 and up but I don't know the details.

Correct. Minimum supported operating systems for IBM built binaries for v6 can be found on the table at the bottom of https://developer.ibm.com/node/sdk/#v6

@sam-github
Copy link
Contributor

@richardlau does that mean IBM only supports OS X 10.8? I don't see a "or later" footnote.

@sam-github
Copy link
Contributor

@jbergstroem what are the X and Y in the GNU/Linux Tier 2/3 colums? WIP?

@richardlau
Copy link
Member

@sam-github It means that's the version of OS X in our internal CI that ran tests on the binary.

@jbergstroem
Copy link
Member

jbergstroem commented Sep 21, 2016

@sam-github: the X/Y will be filled in by @mhdawson shortly.

@mhdawson
Copy link
Member

Yes as @jbergstroem says I was just not sure what the X and Y were off hand. I just need to pull then from what ubuntu and RHEL 7.2 use.

@jbergstroem
Copy link
Member

I've updated the proposal to reflect the changes in macOS support as well as taking a step back from shared builds.

@bnoordhuis
Copy link
Member

Linked gist LGTM.

@mhdawson
Copy link
Member

We may need to break out the PPC/BE ones a bit as this is the info for the machines/OS levels we currently build/test on for s390 and PPC.

s390: kernel>=3.10, glibc 2.17
PPC LE: kernel>=3.13.0, glibc 2.19
PPC BE: kernel>=4.2.0, glibc 2.19

@jbergstroem
Copy link
Member

@mhdawson: updated.

@jbergstroem
Copy link
Member

Posting it here in its current form:

Supported platforms

A list of platforms supported by Node.js. This list needs to be kept up to date and released with each version of Node.js. The current version (below) is based on node 6.x but it should suggestively be backported to 4.x as well.

Input

We rely on a few dependencies that ‘makes us who we are’ -- most importantly v8 and libuv. We therefore need to adopt their supported platforms and potentially add to their lists based on test and/or release coverage.

Strategy

Support will be divided into three Tiers:

  • Tier 1: Full test coverage and maintenace by the broader community.
  • Tier 2: Full test coverage but more limited maintenance, often provided by the vendor of the platform.
  • Experimental: Compiles in community ci but not necessarily full test coverage. These are often working to be promoted to Tier 2 but are not quite ready. There needs to be at least one individual providing maintenace and should strive to broaden CI test coverage.

Supported platforms

System Support type Version Architectures Notes
GNU/Linux Tier 1 kernel >= 2.6.18, glibc >= 2.5 x86, x64, arm, arm64
macOS Tier 1 >= 10.10 x64
Windows Tier 1 >= Windows 7 or >= Windows2008R2 x86, x64
SmartOS Tier 2 = 14 x86, x64
FreeBSD Tier 2 >= 10 x64
GNU/Linux Tier 2 kernel >= 4.2.0, glibc >= 2.19 ppc64be
GNU/Linux Tier 2 kernel >= 3.13.0, glibc >= 2.19 ppc64le
AIX Tier 2 >= 6.1 ppc64be
GNU/Linux Tier 2 kernel >= 3.10, glibc >= 2.17 s390x
macOS Experimental >= 10.8 < 10.10 x64 no test coverage
SmartOS Experimental >= 15 x86, x64
Linux (musl) Experimental musl >= 1.0 x64

Supported toolchains

Depending on your host platform, the selection of toolchains may vary.

Unix

  • GCC 4.8 or newer
  • Clang 3.4.1 or newer

Windows

  • Building Node: Visual Studio 2015¹ or Visual C++ Build Tools 2015 or newer
  • Building native modules: Visual Studio 2013 or Visual C++ Build Tools 2015 or newer

1: For backporting to Node v4.x: Visual Studio 2013

Shared libraries/dependencies

Node.js intends to support building against shared representations of
what can be found in deps/ as long as the version of the shared
library is at least equal or newer to the one found in deps. Seeing
how we've floated patches in the past, we're yet to officially support it.

@Fishrock123
Copy link
Contributor

Is Linux (musl) Alpine Linux?

@jbergstroem
Copy link
Member

@Fishrock123 not necessarily but Alpine definitely the more important distribution representing musl.

@Fishrock123
Copy link
Contributor

I will note that we may want to have "experimental" support for the mips architecture, issues pop up here and there and we usually try to fix them for it. I understand getting testing hardware could be difficult though. I was hoping we'd be able to solve that via Tessel 2... :/

@jbergstroem
Copy link
Member

@saghul: have you had a chance to test libuv on mips?

@bnoordhuis
Copy link
Member

Another option is cross-compiling and running in qemu-user-static or qemu proper. It has support for quite a few flavors and models: mips, mipsel, mips64el, mipsn32, mipsn32el, mips32r5, etc.

A chroot or vm image will be necessary for things like the procfs to work.

@jbergstroem I test libuv on mips very infrequently. The LKGR is at least over a year old. :-)

@saghul
Copy link
Member

saghul commented Sep 29, 2016

@jbergstroem Not personally, but we've fixed a bug or 2 on MIPS because Debian builds libuv packages and runs the test suite. I did setup a qemu instance at some point to fix a bug, but it was painfully slow.

@saghul
Copy link
Member

saghul commented Sep 29, 2016

= Windows 7 or >= Windows2008R2

Not that I have a horse in this race, but shouldn't that be >= Vista? AFAIK there is nothing (in libuv at least) which is improved by dumping Vista. FWIW for v2 we so far dumped XP / 2k3, so Vista will still be supported (for now).

@saghul
Copy link
Member

saghul commented Sep 29, 2016

Maybe a note about other platforms not in the list woud be nice? OpenBSD comes to mind, for example. Something along the lines of "the fact that a platform is not in this list does not necessarily mean it doesn't work, merely that's not officially supported in any capacity, ...."

@jbergstroem
Copy link
Member

@saghul re OpenBSD/others: I'm open to that. Also, if others are reading this I'd love to add OpenBSD to our experimental tier if we could get access to vm's running it (anyone at Vultr reading this? :)

@rvagg
Copy link
Member Author

rvagg commented Oct 4, 2016

Moving to nodejs/node#8922

I'm -1 on putting MIPS on it at this stage simply because even as Experimental it needs to be "There needs to be at least one individual providing maintenace and should strive to broaden CI test coverage." and we don't have that, there's nobody in core afaik that does this. It'd be nice to work towards that and putting qemu host in CI somewhere but until that happens let's leave this off eh?

@jbergstroem
Copy link
Member

Seeing how we've passed this back to the node org I'll close this. If we get more feedback/questions I guess we can facilitate the same issue.

@isodnc
Copy link

isodnc commented Sep 2, 2021

Mevcut haliyle burada yayınlamak:

Desteklenen platformlar

Node.js tarafından desteklenen platformların listesi. Bu listenin güncel tutulması ve Node.js'nin her sürümüyle birlikte yayınlanması gerekir. Mevcut sürüm (aşağıda) 6.x düğümüne dayanmaktadır, ancak muhtemelen 4.x'e de geri aktarılmalıdır.

Giriş

'Bizi biz yapan' birkaç bağımlılığa güveniyoruz - en önemlisi v8 ve libuv. Bu nedenle, desteklenen platformlarını benimsememiz ve test ve/veya yayın kapsamına dayalı olarak potansiyel olarak listelerine eklememiz gerekiyor.

strateji

Destek üç Katmana bölünecektir:

  • Aşama 1: Daha geniş topluluk tarafından tam test kapsamı ve bakımı.
  • Katman 2: Tam test kapsamı ancak daha sınırlı bakım, genellikle platformun satıcısı tarafından sağlanır.
  • Deneysel: Topluluk ci'de derlenir, ancak tam test kapsamı olması gerekmez. Bunlar genellikle Seviye 2'ye terfi etmek için çalışıyor ancak tam olarak hazır değiller. Bakım sağlayan en az bir kişi olmalı ve CI testi kapsamını genişletmeye çalışmalıdır.

Desteklenen platformlar

sistem Destek türü Sürüm Mimariler Notlar
GNU/Linux 1. kat çekirdek >= 2.6.18, glibc >= 2.5 x86, x64, kol, kol64
Mac os işletim sistemi 1. kat >= 10.10 x64
pencereler 1. kat >= Windows 7 or >= Windows2008R2 x86, x64
SmartOS Tier 2 = 14 x86, x64
FreeBSD Tier 2 >= 10 x64
GNU/Linux Tier 2 kernel >= 4.2.0, glibc >= 2.19 ppc64be
GNU/Linux Tier 2 kernel >= 3.13.0, glibc >= 2.19 ppc64le
AIX Tier 2 >= 6.1 ppc64be
GNU/Linux Tier 2 kernel >= 3.10, glibc >= 2.17 s390x
macOS Experimental >= 10.8 < 10.10 x64 no test coverage
SmartOS Experimental >= 15 x86, x64
Linux (musl) Experimental musl >= 1.0 x64

Supported toolchains

Depending on your host platform, the selection of toolchains may vary.

Unix

  • GCC 4.8 or newer
  • Clang 3.4.1 or newer

Windows

  • Building Node: Visual Studio 2015¹ or Visual C++ Build Tools 2015 or newer
  • Building native modules: Visual Studio 2013 or Visual C++ Build Tools 2015 or newer

1: For backporting to Node v4.x: Visual Studio 2013

Shared libraries/dependencies

Node.js intends to support building against shared representations of
what can be found in deps/ as long as the version of the shared
library is at least equal or newer to the one found in deps. Seeing
how we've floated patches in the past, we're yet to officially support it.

@isodnc
Copy link

isodnc commented Sep 2, 2021

İsodnc/deps/#488

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

No branches or pull requests