@@ -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
6060There 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
7494Node.js does not support a platform version if a vendor has expired support
7595for it. In other words, Node.js does not support running on End-of-Life (EoL)
7696platforms. 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
111150Depending 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
152218The [ 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
188254may 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
194260After building, setting up [ firewall rules] ( tools/macos-firewall.sh ) can avoid
195261popups 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
463529enabled by default, with English data only.
@@ -469,19 +535,19 @@ the full `Intl` (ECMA-402) APIs. It does not need to download
469535any dependencies to function. You can add full
470536data 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
474540With the ` --download=all ` , this may download ICU if you don't have an
475541ICU in ` deps/icu ` . (The embedded ` small-icu ` included in the default
476542Node.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> .\v cbuild full-icu download-all
@@ -492,19 +558,19 @@ $ ./configure --with-intl=full-icu --download=all
492558The ` 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> .\v cbuild 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
513579If you are cross-compiling, your ` pkg-config ` must be able to supply a path
514580that works for both your host and target environments.
515581
516- #### Build with a specific ICU:
582+ #### Build with a specific ICU
517583
518584You 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