Skip to content

Commit b581d59

Browse files
committed
doc: update supported platforms for Node.js 12
PR-URL: #26714 Reviewed-By: João Reis <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: Richard Lau <[email protected]> Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: Joyee Cheung <[email protected]>
1 parent d4dae5e commit b581d59

File tree

1 file changed

+130
-64
lines changed

1 file changed

+130
-64
lines changed

BUILDING.md

+130-64
Original file line numberDiff line numberDiff line change
@@ -13,38 +13,38 @@ file a new issue.
1313
* [Supported platforms](#supported-platforms)
1414
* [Input](#input)
1515
* [Strategy](#strategy)
16-
* [Supported platforms](#supported-platforms-1)
16+
* [Platform list](#platform-list)
1717
* [Supported toolchains](#supported-toolchains)
18-
* [Unix](#unix)
19-
* [AIX](#aix)
20-
* [Windows](#windows)
18+
* [Official binary platforms and toolchains](#official-binary-platforms-and-toolchains)
2119
* [OpenSSL asm support](#openssl-asm-support)
20+
* [Previous versions of this document](#previous-versions-of-this-document)
2221
* [Building Node.js on supported platforms](#building-nodejs-on-supported-platforms)
2322
* [Unix/macOS](#unixmacos)
2423
* [Prerequisites](#prerequisites)
25-
* [Building Node.js](#building-nodejs-1)
24+
* [Building Node.js](#building-nodejs)
2625
* [Running Tests](#running-tests)
2726
* [Running Coverage](#running-coverage)
2827
* [Building the documentation](#building-the-documentation)
2928
* [Building a debug build](#building-a-debug-build)
30-
* [Windows](#windows-1)
29+
* [Windows](#windows)
3130
* [Android/Android-based devices (e.g. Firefox OS)](#androidandroid-based-devices-eg-firefox-os)
3231
* [`Intl` (ECMA-402) support](#intl-ecma-402-support)
3332
* [Default: `small-icu` (English only) support](#default-small-icu-english-only-support)
3433
* [Build with full ICU support (all locales supported by ICU)](#build-with-full-icu-support-all-locales-supported-by-icu)
3534
* [Unix/macOS](#unixmacos-1)
36-
* [Windows](#windows-2)
35+
* [Windows](#windows-1)
3736
* [Building without Intl support](#building-without-intl-support)
3837
* [Unix/macOS](#unixmacos-2)
39-
* [Windows](#windows-3)
38+
* [Windows](#windows-2)
4039
* [Use existing installed ICU (Unix/macOS only)](#use-existing-installed-icu-unixmacos-only)
4140
* [Build with a specific ICU](#build-with-a-specific-icu)
4241
* [Unix/macOS](#unixmacos-3)
43-
* [Windows](#windows-4)
42+
* [Windows](#windows-3)
4443
* [Building Node.js with FIPS-compliant OpenSSL](#building-nodejs-with-fips-compliant-openssl)
4544
* [Building Node.js with external core modules](#building-nodejs-with-external-core-modules)
4645
* [Unix/macOS](#unixmacos-4)
47-
* [Windows](#windows-5)
46+
* [Windows](#windows-4)
47+
* [Note for downstream distributors of Node.js](#note-for-downstream-distributors-of-nodejs)
4848

4949
## Supported platforms
5050

@@ -59,68 +59,124 @@ Node.js relies on V8 and libuv. We adopt a subset of their supported platforms.
5959

6060
There are three support tiers:
6161

62-
* **Tier 1**: Full test coverage and maintenance by the Node.js core team and
63-
the broader community.
64-
* **Tier 2**: Full test coverage. Limited maintenance, often provided by the
65-
vendor of the platform.
66-
* **Experimental**: May not compile or test suite may not pass.
67-
These are often approaching Tier 2 support but are not quite ready.
68-
There is at least one individual providing maintenance.
69-
70-
### Supported platforms
71-
72-
For production applications, run Node.js on supported platforms only.
62+
* **Tier 1**: These platforms represent the majority of Node.js users. The
63+
Node.js Build Working Group maintains infrastructure for full test coverage.
64+
Maintenance is supported by the Node.js core team. All commits to the
65+
Node.js repository are tested on multiple variants of these platforms. Test
66+
failures on tier 1 platforms will block releases.
67+
* **Tier 2**: These platforms represent smaller segments of the Node.js user
68+
base. The Node.js Build Working Group maintains infrastructure for full test
69+
coverage. Maintenance is supported by smaller groups or individuals within
70+
the Node.js core team, or the vendor of the platform itself. All commits to
71+
the Node.js repository are tested on multiple variants of these platforms
72+
where practical. Test failures on tier 2 platforms will block releases.
73+
Delays in release of binaries for these platforms are acceptable
74+
where necessary due to infrastructure concerns.
75+
* **Experimental**: May not compile or test suite may not pass. The core team
76+
does not create releases for these platforms. Test failures on experimental
77+
platforms do not block releases. Contributions to improve support for these
78+
platforms are welcome.
79+
80+
Platforms may move between tiers between major release lines. The table below
81+
will be updated to reflect those changes.
82+
83+
### Platform list
84+
85+
Compiling and running Node.js is supported for a limited set of operating
86+
systems, architectures and libc versions. The table below lists the
87+
combinations that the core team has committed to supporting and the nature of
88+
that support as per the support tiers above. A list of
89+
[supported compile toolchains](#supported-toolchains) is also supplied for
90+
tier 1 platforms.
91+
92+
**For production applications, run Node.js on supported platforms only.**
7393

7494
Node.js does not support a platform version if a vendor has expired support
7595
for it. In other words, Node.js does not support running on End-of-Life (EoL)
7696
platforms. This is true regardless of entries in the table below.
7797

78-
| System | Support type | Version | Architectures | Notes |
79-
| ------------ | ------------ | ------------------------------- | ---------------- | ----------------------------- |
80-
| GNU/Linux | Tier 1 | kernel >= 2.6.32, glibc >= 2.12 | x64, arm | |
81-
| GNU/Linux | Tier 1 | kernel >= 3.10, glibc >= 2.17 | arm64 | |
82-
| macOS/OS X | Tier 1 | >= 10.11 | x64 | |
83-
| Windows | Tier 1 | >= Windows 7/2008 R2/2012 R2 | x86, x64 | [1](#fn1),[2](#fn2),[3](#fn3) |
84-
| SmartOS | Tier 2 | >= 16 | x64 | |
85-
| FreeBSD | Tier 2 | >= 11 | x64 | |
86-
| GNU/Linux | Tier 2 | kernel >= 3.13.0, glibc >= 2.19 | ppc64le >=power8 | |
87-
| AIX | Tier 2 | >= 7.1 TL04 | ppc64be >=power7 | |
88-
| GNU/Linux | Tier 2 | kernel >= 3.10, glibc >= 2.17 | s390x | |
89-
| GNU/Linux | Experimental | kernel >= 2.6.32, glibc >= 2.12 | x86 | limited CI |
90-
| Linux (musl) | Experimental | musl >= 1.0 | x64 | |
91-
92-
<em id="fn1">1</em>: Tier 1 support for building on Windows is only on 64-bit
93-
hosts. Support is experimental for 32-bit hosts.
94-
95-
<em id="fn2">2</em>: On Windows, running Node.js in Windows terminal emulators
98+
| Operating System | Architectures | Versions | Support Type | Notes |
99+
| ---------------- | ---------------- | ------------------------------- | ------------ | --------------------------------- |
100+
| GNU/Linux | x64 | kernel >= 3.10, glibc >= 2.17 | Tier 1 | e.g. Ubuntu 16.04 <sup>[1](#fn1)</sup>, Debian 9, EL 7 <sup>[2](#fn2)</sup> |
101+
| GNU/Linux | x64 | kernel >= 3.10, musl >= 1.1.19 | Experimental | e.g. Alpine 3.8 |
102+
| GNU/Linux | x86 | kernel >= 3.10, glibc >= 2.17 | Experimental | Downgraded as of Node.js 10 |
103+
| GNU/Linux | arm64 | kernel >= 4.5, glibc >= 2.17 | Tier 1 | e.g. Ubuntu 16.04, Debian 9, EL 7 <sup>[3](#fn3)</sup> |
104+
| GNU/Linux | armv7 | kernel >= 4.14, glibc >= 2.24 | Tier 1 | e.g. Ubuntu 18.04, Debian 9 |
105+
| GNU/Linux | armv6 | kernel >= 4.14, glibc >= 2.24 | Experimental | Downgraded as of Node.js 12 |
106+
| GNU/Linux | ppc64le >=power8 | kernel >= 3.13.0, glibc >= 2.19 | Tier 2 | e.g. Ubuntu 16.04, EL 7 |
107+
| GNU/Linux | s390x | kernel >= 3.10.0, glibc >= 2.17 | Tier 2 | e.g. EL 7 |
108+
| Windows | x64, x86 (WoW64) | >= Windows 7/2008 R2/2012 R2 | Tier 1 | <sup>[4](#fn4),[5](#fn5)</sup> |
109+
| Windows | x86 (native) | >= Windows 7/2008 R2/2012 R2 | Tier 1 (running) / Experimental (compiling) <sup>[6](#fn6)</sup> | |
110+
| Windows | arm64 | >= Windows 10 | Experimental | |
111+
| macOS | x64 | >= 10.11 | Tier 1 | |
112+
| SmartOS | x64 | >= 18 | Tier 2 | |
113+
| AIX | ppc64be >=power7 | >= 7.1 TL05 | Tier 2 | |
114+
| FreeBSD | x64 | >= 11 | Experimental | Downgraded as of Node.js 12 |
115+
116+
<em id="fn1">1</em>: GCC 6 is not provided on the base platform, users will
117+
need the
118+
[Toolchain test builds PPA](https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test?field.series_filter=xenial)
119+
or similar to source a newer compiler.
120+
121+
<em id="fn2">2</em>: GCC 6 is not provided on the base platform, users will
122+
need the
123+
[devtoolset-6](https://www.softwarecollections.org/en/scls/rhscl/devtoolset-6/)
124+
or later to source a newer compiler.
125+
126+
<em id="fn3">3</em>: Older kernel versions may work for ARM64, however the
127+
Node.js test infrastructure only tests >= 4.5.
128+
129+
<em id="fn4">4</em>: On Windows, running Node.js in Windows terminal emulators
96130
like `mintty` requires the usage of [winpty](https://github.com/rprichard/winpty)
97131
for the tty channels to work correctly (e.g. `winpty node.exe script.js`).
98132
In "Git bash" if you call the node shell alias (`node` without the `.exe`
99133
extension), `winpty` is used automatically.
100134

101-
<em id="fn3">3</em>: The Windows Subsystem for Linux (WSL) is not directly
135+
<em id="fn5">5</em>: The Windows Subsystem for Linux (WSL) is not directly
102136
supported, but the GNU/Linux build process and binaries should work. The
103137
community will only address issues that reproduce on native GNU/Linux
104138
systems. Issues that only reproduce on WSL should be reported in the
105139
[WSL issue tracker](https://github.com/Microsoft/WSL/issues). Running the
106140
Windows binary (`node.exe`) in WSL is not recommended. It will not work
107141
without workarounds such as stdio redirection.
108142

143+
<em id="fn6">6</em>: Running Node.js on x86 Windows should work and binaries
144+
are provided. However, tests in our infrastructure only run on WoW64.
145+
Furthermore, compiling on x86 Windows is currently considered Experimental and
146+
may not be possible.
147+
109148
### Supported toolchains
110149

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

113-
#### Unix
114-
115-
* GCC 4.9.4 or newer
116-
* Clang 3.4.2 or newer
117-
118-
#### AIX
119-
* GCC 6.3 or newer
120-
121-
#### Windows
122-
123-
* Visual Studio 2017 with the Windows 10 SDK on a 64-bit host.
152+
| Operating System | Compiler Versions |
153+
| ---------------- | -------------------------------------------------------------- |
154+
| Linux | GCC >= 6.3 |
155+
| Windows | Visual Studio >= 2017 with the Windows 10 SDK on a 64-bit host |
156+
| macOS | Xcode >= 8 (Apple LLVM >= 8) |
157+
158+
### Official binary platforms and toolchains
159+
160+
Binaries at <https://nodejs.org/download/release/> are produced on:
161+
162+
| Binary package | Platform and Toolchain |
163+
| --------------------- | ------------------------------------------------------------------------ |
164+
| aix-ppc64 | AIX 7.1 TL05 on PPC64BE with GCC 6 |
165+
| darwin-x64 (and .pkg) | macOS 10.11, Xcode Command Line Tools 8 with -mmacosx-version-min=10.10 |
166+
| linux-arm64 | CentOS 7 with devtoolset-6 / GCC 6 |
167+
| linux-armv7l | Cross-compiled on Ubuntu 16.04 x64 with [custom GCC toolchain](https://github.com/rvagg/rpi-newer-crosstools) |
168+
| linux-ppc64le | Ubuntu 14.04 with GCC 6 |
169+
| linux-s390x | RHEL 7 with devtoolset-6 / GCC 6 <sup>[7](#fn7)</sup> |
170+
| linux-x64 | CentOS 7 with devtoolset-6 / GCC 6 <sup>[7](#fn7)</sup> |
171+
| sunos-x64 | SmartOS 18 with GCC 7 |
172+
| win-x64 and win-x86 | Windows 2012 R2 (x64) with Visual Studio 2017 |
173+
174+
<em id="fn7">7</em>: The Enterprise Linux devtoolset-6 allows us to compile
175+
binaries with GCC 6 but linked to the glibc and libstdc++ versions of the host
176+
platforms (CentOS 7 / RHEL 7). Therefore, binaries produced on these systems
177+
are compatible with glibc >= 2.17 and libstdc++ >= 6.0.20 (`GLIBCXX_3.4.20`).
178+
These are available on distributions natively supporting GCC 4.9, such as
179+
Ubuntu 14.04 and Debian 8.
124180

125181
#### OpenSSL asm support
126182

@@ -147,6 +203,16 @@ Please refer to
147203
If compiling without one of the above, use `configure` with the
148204
`--openssl-no-asm` flag. Otherwise, `configure` will fail.
149205

206+
### Previous versions of this document
207+
208+
Supported platforms and toolchains change with each major version of Node.js.
209+
This document is only valid for the current major version of Node.js.
210+
Consult previous versions of this document for older versions of Node.js:
211+
212+
* [Node.js 10](https://github.com/nodejs/node/blob/v10.x/BUILDING.md)
213+
* [Node.js 8](https://github.com/nodejs/node/blob/v8.x/BUILDING.md)
214+
* [Node.js 6](https://github.com/nodejs/node/blob/v6.x/BUILDING.md)
215+
150216
## Building Node.js on supported platforms
151217

152218
The [bootstrapping guide](https://github.com/nodejs/node/blob/master/tools/bootstrap/README.md)
@@ -156,8 +222,8 @@ explains how to install all prerequisites.
156222

157223
#### Prerequisites
158224

159-
* `gcc` and `g++` 4.9.4 or newer, or
160-
* `clang` and `clang++` 3.4.2 or newer (macOS: latest Xcode Command Line Tools)
225+
* `gcc` and `g++` >= 6.3 or newer, or
226+
* macOS: Xcode Command Line Tools >= 8
161227
* Python 2.7
162228
* Python 2.7 end of life is in 2019 so a transition to Python 3 is underway.
163229
* Python 3.5, 3.6, and 3.7 are experimental.
@@ -188,8 +254,8 @@ The `-j4` option will cause `make` to run 4 simultaneous compilation jobs which
188254
may reduce build time. For more information, see the
189255
[GNU Make Documentation](https://www.gnu.org/software/make/manual/html_node/Parallel.html).
190256

191-
Note that the above requires that `python` resolve to Python 2.7 and not a newer
192-
version. See [Prerequisites](#prerequisites).
257+
Note that the above requires that `python` resolves to a supported version of
258+
Python. See [Prerequisites](#prerequisites).
193259

194260
After building, setting up [firewall rules](tools/macos-firewall.sh) can avoid
195261
popups asking to accept incoming network connections when running tests.
@@ -457,7 +523,7 @@ $ make
457523
```
458524

459525

460-
### `Intl` (ECMA-402) support:
526+
### `Intl` (ECMA-402) support
461527

462528
[Intl](https://github.com/nodejs/node/blob/master/doc/api/intl.md) support is
463529
enabled by default, with English data only.
@@ -469,19 +535,19 @@ the full `Intl` (ECMA-402) APIs. It does not need to download
469535
any dependencies to function. You can add full
470536
data at runtime.
471537

472-
#### Build with full ICU support (all locales supported by ICU):
538+
#### Build with full ICU support (all locales supported by ICU)
473539

474540
With the `--download=all`, this may download ICU if you don't have an
475541
ICU in `deps/icu`. (The embedded `small-icu` included in the default
476542
Node.js source does not include all locales.)
477543

478-
##### Unix/macOS:
544+
##### Unix/macOS
479545

480546
```console
481547
$ ./configure --with-intl=full-icu --download=all
482548
```
483549

484-
##### Windows:
550+
##### Windows
485551

486552
```console
487553
> .\vcbuild full-icu download-all
@@ -492,19 +558,19 @@ $ ./configure --with-intl=full-icu --download=all
492558
The `Intl` object will not be available, nor some other APIs such as
493559
`String.normalize`.
494560

495-
##### Unix/macOS:
561+
##### Unix/macOS
496562

497563
```console
498564
$ ./configure --without-intl
499565
```
500566

501-
##### Windows:
567+
##### Windows
502568

503569
```console
504570
> .\vcbuild without-intl
505571
```
506572

507-
#### Use existing installed ICU (Unix/macOS only):
573+
#### Use existing installed ICU (Unix/macOS only)
508574

509575
```console
510576
$ pkg-config --modversion icu-i18n && ./configure --with-intl=system-icu
@@ -513,7 +579,7 @@ $ pkg-config --modversion icu-i18n && ./configure --with-intl=system-icu
513579
If you are cross-compiling, your `pkg-config` must be able to supply a path
514580
that works for both your host and target environments.
515581

516-
#### Build with a specific ICU:
582+
#### Build with a specific ICU
517583

518584
You can find other ICU releases at
519585
[the ICU homepage](http://icu-project.org/download).
@@ -553,7 +619,7 @@ as `deps/icu` (You'll have: `deps/icu/source/...`)
553619

554620
## Building Node.js with FIPS-compliant OpenSSL
555621

556-
This version of Node.js does not support FIPS.
622+
The current version of Node.js does not support FIPS.
557623

558624
## Building Node.js with external core modules
559625

0 commit comments

Comments
 (0)