-
Notifications
You must be signed in to change notification settings - Fork 30k
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
build: include minimal V8 headers in distribution #37570
Conversation
targos
commented
Mar 2, 2021
•
edited
Loading
edited
/cc @nodejs/embedders in case this can affect you. |
CITGM (pending): https://ci.nodejs.org/view/Node.js-citgm/job/citgm-smoker/2638/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM as semver-major, pending CITGM results.
/cc @nodejs/tsc as it is semver-major |
Edit: false alarm. The
|
CITGM on master for comparison: https://ci.nodejs.org/view/Node.js-citgm/job/citgm-smoker/2639/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should at least include v8-profiler.h as well. But more importantly: what's the reasoning behind this? I'm not comfortable with us landing such a breaking change without that being clear (and without including that reasoning in the commit message)
@mmarchini I updated the description and added |
That's a good reasoning, I'm just wondering if we're removing too many headers with this change. (I'm generally in favor of reducing the amount of V8 implementation details we expose, but I think that should be done more gradually) |
Here's what is currently exposed in Node.js 14.x:
Legend:
|
I added a legend to my previous comment, to show which headers are going to be removed compared to v14.x. |
From that list I guess the only one I'm unsure if |
Maybe @devsnek can answer that? It seems to me that the API is not stable yet. |
How should a users build an extension which uses one of the v8 headers removed here? |
I guess they would have to include their own copy of the headers they need. |
As far as I know node-gyp downloads the header distribution automatically. Therefore not so easy to inject a few more headers in this setup. I think it is possible to redirect it to use a different source for download. Maybe we should publish the full headers pack additionally to ease such setups? Clearly we can skip this for now and add it later if it turns out that people need it. |
It's what isolated-vm did since we stopped to include the inspector headers, and they use node-gyp. |
Another thing we can do instead of this PR is to clearly document somewhere which V8 headers are supported relative to ABI compatibility. I don't like that solution very much because there are many people who do not read the documentation and it would be the only way to know what you can use safely. |
I think your approach is ok. |
@MayaLekova may I ask for your advise on whether we should expose See #37570 (comment) |
As said above, this API might be useful for native addon developers in general, but we haven't stabilised it enough yet, so exposing it might induce too much maintenance work for them to be worth the performance gain. In short, it's still experimental, please don't expose it. |
Thanks! @mmarchini Are you ok with the changes now? |
Because Node.js currently distributes all V8 headers, it is not clear which ones are part of our API and ABI compatibility contract. V8 may add, remove, or change headers at any time, preventing us sometimes from updating because the change could affect addons which may depend on them. Moreover, the `cppgc` library, included in V8, is exposed even though it is still in active development and doesn't have a stable API. Node.js should choose exactly which headers are exposed and part of our native API, so that it's easier to reason about changes during V8 updates and to prevent us from automatically increasing the API surface when new headers are added by V8. Instead of specifically excluding v8-inspector, only include `v8.h`, `v8-platform.h` (used in `node.h`) and `v8-profiler.h`.
Landed in 38f3238 |
Because Node.js currently distributes all V8 headers, it is not clear which ones are part of our API and ABI compatibility contract. V8 may add, remove, or change headers at any time, preventing us sometimes from updating because the change could affect addons which may depend on them. Moreover, the `cppgc` library, included in V8, is exposed even though it is still in active development and doesn't have a stable API. Node.js should choose exactly which headers are exposed and part of our native API, so that it's easier to reason about changes during V8 updates and to prevent us from automatically increasing the API surface when new headers are added by V8. Instead of specifically excluding v8-inspector, only include `v8.h`, `v8-platform.h` (used in `node.h`) and `v8-profiler.h`. PR-URL: #37570 Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Shelley Vohr <codebytere@gmail.com> Reviewed-By: Mary Marchini <oss@mmarchini.me> Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de>
Notable Changes: Deprecations and Removals - **(SEMVER-MAJOR)** **fs**: remove permissive rmdir recursive (Antoine du Hamel) [#37216] - **(SEMVER-MAJOR)** **fs**: runtime deprecate rmdir recursive option (Antoine du Hamel) [#37302] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('http_parser') (James M Snell) [#37813] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('url') (James M Snell) [#37799] - **(SEMVER-MAJOR)** **lib**: make process.binding('util') return only type checkers (Anna Henningsen) [#37819] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('crypto') (James M Snell) [#37790] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('signal_wrap') (James M Snell) [#37800] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('v8') (James M Snell) [#37789] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('async_wrap') (James M Snell) [#37576] - **(SEMVER-MAJOR)** **module**: remove module.createRequireFromPath (Antoine du Hamel) [#37201] - **(SEMVER-MAJOR)** **module**: runtime deprecate subpath folder mappings (Antoine du Hamel) [#37215] - **(SEMVER-MAJOR)** **module**: runtime deprecate "main" index and extension lookups (Antoine du Hamel) [#37206] - **(SEMVER-MAJOR)** **module**: runtime deprecate invalid package.json main entries (Antoine du Hamel) [#37204] - **(SEMVER-MAJOR)** **process**: runtime deprecate changing process.config (James M Snell) [#36902] Stable Timers Promises API: The Timers Promises API provides an alternative set of timer functions that return Promise objects. Added in Node.js v15.0.0, in this release they graduate from experimental status to stable. Contributed by James Snell - [#38112] Toolchain and Compiler Upgrades: Node.js v16.0.0 will be the first release where we ship prebuilt binaries for Apple Silicon. While we’ll be providing separate tarballs for the Intel (`darwin-x64`) and ARM (`darwin-arm64`) architectures the macOS installer (`.pkg`) will be shipped as a ‘fat’ (multi-architecture) binary. - **(SEMVER-MAJOR)** **build**: remove support for Python 2 (Christian Clauss) [#36691] - **(SEMVER-MAJOR)** **build**: default PYTHON to python3 in Makefile (Michaël Zasso) [#37764] - **build**: update Makefile to support fat binary (Ash Cripps) [#37861] - **(SEMVER-MAJOR)** **build**: enable ASLR (PIE) on OS X (woodfairy) [#35704] - **build**: warn for gcc versions earlier than 8.3.0 (Richard Lau) [#37935] - **(SEMVER-MAJOR)** **doc**: update minimum supported Xcode to 11 (Michaël Zasso) [#37872] - **(SEMVER-MAJOR)** **doc**: update minimum supported GCC to 8.3 (Michaël Zasso) [#37871] - **(SEMVER-MAJOR)** **doc**: update AIX to GCC8 for v16.x (Ash Cripps) [#37677] - **tools**: set arch in Distribution.xml (Ash Cripps) [#38261] V8 9.0: The V8 JavaScript engine is updated to V8 9.0, including performance tweaks and improvements. This update also brings the ECMAScript RegExp Match Indices, which provide the start and end indices of the captured string. The indices array is available via the `.indices` property on match objects when the regular expression has the `/d` flag. Contributed by Michaël Zasso - [#37587] Other Notable Changes: - **(SEMVER-MINOR)** **assert**: graduate assert.match and assert.doesNotMatch (James M Snell) [#38111] - **(SEMVER-MAJOR)** **buffer**: expose btoa and atob as globals (James M Snell) [#37786] - **deps**: update llhttp to 6.0.0 (Fedor Indutny) [#38277] - **deps**: upgrade npm to 7.10.0 (Ruy Adorno) [#38254] - **(SEMVER-MAJOR)** **deps**: bump minimum ICU version to 68 (Michaël Zasso) [#37330] - **(SEMVER-MINOR)** **http**: add http.ClientRequest.getRawHeaderNames() (simov) [#37660] - **(SEMVER-MAJOR)** **lib,src**: update cluster to use Parent (Michael Dawson) [#36478] - **(SEMVER-MINOR)** **module**: add support for `node:`‑prefixed `require(…)` calls (ExE Boss) [#37246] - **(SEMVER-MINOR)** **perf_hooks**: add histogram option to timerify (James M Snell) [#37475] - **(SEMVER-MINOR)** **repl**: add auto‑completion for `node:`‑prefixed `require(…)` calls (ExE Boss) [#37246] - **(SEMVER-MINOR)** **util**: add getSystemErrorMap() impl (eladkeyshawn) [#38101] Semver-Major Commits: - **async_hooks**: add thisArg to AsyncResource.bind (James M Snell) [#36782] - **buffer**: expose btoa and atob as globals (James M Snell) [#37786] - **build**: remove support for Python 2 (Christian Clauss) [#36691] - **build**: default PYTHON to python3 in Makefile (Michaël Zasso) [#37764] - **build**: update Makefile to support fat binary (Ash Cripps) [#37861] - **build**: reset embedder string to "-node.0" (Michaël Zasso) [#37587] - **build**: include minimal V8 headers in distribution (Michaël Zasso) [#37570] - **build**: reset embedder string to "-node.0" (Michaël Zasso) [#37330] - **build**: reset embedder string to "-node.0" (Michaël Zasso) [#36139] - **build**: use C++11 ABI with libstdc++ (Anna Henningsen) [#36634] - **build**: enable ASLR (PIE) on OS X (woodfairy) [#35704] - **build**: reset embedder string to "-node.0" (Michaël Zasso) [#35700] - **deps**: V8: cherry-pick 1648e050cade (Michaël Zasso) [#37587] - **deps**: silence irrelevant V8 warnings (Michaël Zasso) [#37587] - **deps**: fix V8 build issue with inline methods (Jiawen Geng) [#35415] - **deps**: make v8.h compatible with VS2015 (Joao Reis) [#32116] - **deps**: V8: forward declaration of `Rtl\*FunctionTable` (Refael Ackermann) [#32116] - **deps**: V8: patch register-arm64.h (Refael Ackermann) [#32116] - **deps**: V8: un-cherry-pick bd019bd (Refael Ackermann) [#32116] - **deps**: update V8 to 9.0.257.11 (Michaël Zasso) [#37587] - **deps**: bump minimum ICU version to 68 (Michaël Zasso) [#37330] - **deps**: V8: cherry-pick 8957d4677aa7 (Michaël Zasso) [#37330] - **deps**: V8: backport a11395433dbd (Michaël Zasso) [#37330] - **deps**: V8: cherry-pick deb0813166f3 (Michaël Zasso) [#36139] - **deps**: V8: cherry-pick 9a6a22874c81 (Michaël Zasso) [#36139] - **deps**: silence irrelevant V8 warning (Michaël Zasso) [#37330] - **deps**: workaround stod() limitations on SmartOS (Colin Ihrig) [#37330] - **deps**: fix V8 build issue with inline methods (Jiawen Geng) [#35415] - **deps**: patch V8 to run on Xcode 8 (Mary Marchini) [#32116] - **deps**: make v8.h compatible with VS2015 (Joao Reis) [#32116] - **deps**: V8: forward declaration of `Rtl\*FunctionTable` (Refael Ackermann) [#32116] - **deps**: V8: patch register-arm64.h (Refael Ackermann) [#32116] - **deps**: patch V8 to run on older XCode versions (Ujjwal Sharma) [#32116] - **deps**: V8: un-cherry-pick bd019bd (Refael Ackermann) [#32116] - **deps**: update V8 to 8.9.255.19 (Michaël Zasso) [#37330] - **deps**: V8: cherry-pick deb0813166f3 (Michaël Zasso) [#36139] - **deps**: V8: cherry-pick 9a6a22874c81 (Michaël Zasso) [#36139] - **deps**: V8: cherry-pick 2059ee813359 (Michaël Zasso) [#36139] - **deps**: V8: cherry-pick bde7ee5473d6 (Michaël Zasso) [#36139] - **deps**: V8: cherry-pick 9a712984025e (Michaël Zasso) [#36139] - **deps**: V8: cherry-pick 0b96e5b0bfb2 (Michaël Zasso) [#36139] - **deps**: V8: cherry-pick fbb28902e049 (Michaël Zasso) [#36139] - **deps**: V8: cherry-pick 821fb3883a8e (Michaël Zasso) [#35700] - **deps**: workaround stod() limitations on SmartOS (Colin Ihrig) [#36139] - **deps**: fix V8 build issue with inline methods (Jiawen Geng) [#35415] - **deps**: patch V8 to run on Xcode 8 (Mary Marchini) [#32116] - **deps**: V8: silence irrelevant warnings (Michaël Zasso) [#32116] - **deps**: make v8.h compatible with VS2015 (Joao Reis) [#32116] - **deps**: V8: forward declaration of `Rtl\*FunctionTable` (Refael Ackermann) [#32116] - **deps**: V8: patch register-arm64.h (Refael Ackermann) [#32116] - **deps**: patch V8 to run on older XCode versions (Ujjwal Sharma) [#32116] - **deps**: V8: un-cherry-pick bd019bd (Refael Ackermann) [#32116] - **deps**: update V8 to 8.8.278.17 (Michaël Zasso) [#36139] - **deps**: V8: cherry-pick 821fb3883a8e (Michaël Zasso) [#35700] - **deps**: V8: cherry-pick 45e49775f5a3 (Michaël Zasso) [#35700] - **deps**: V8: cherry-pick 7b3a27b7ae65 (Michaël Zasso) [#35700] - **deps**: V8: cherry-pick d76abfed3512 (Michaël Zasso) [#35415] - **deps**: fix V8 build issue with inline methods (Jiawen Geng) [#35415] - **deps**: update V8 postmortem metadata script (Colin Ihrig) [#35415] - **deps**: update V8 postmortem metadata script (Colin Ihrig) [#33579] - **deps**: patch V8 to run on Xcode 8 (Mary Marchini) [#32116] - **deps**: V8: silence irrelevant warnings (Michaël Zasso) [#32116] - **deps**: make v8.h compatible with VS2015 (Joao Reis) [#32116] - **deps**: V8: forward declaration of `Rtl\*FunctionTable` (Refael Ackermann) [#32116] - **deps**: V8: patch register-arm64.h (Refael Ackermann) [#32116] - **deps**: patch V8 to run on older XCode versions (Ujjwal Sharma) [#32116] - **deps**: V8: un-cherry-pick bd019bd (Refael Ackermann) [#32116] - **deps**: update V8 to 8.7.220 (Michaël Zasso) [#35700] - **dns**: use url module instead of punycode for IDNA (Antoine du Hamel) [#35091] - **doc**: update minimum supported Xcode to 11 (Michaël Zasso) [#37872] - **doc**: update minimum supported GCC to 8.3 (Michaël Zasso) [#37871] - **doc**: update AIX to GCC8 for v16.x (Ash Cripps) [#37677] - **doc**: fixup http.IncomingMessage deprecation code (Guy Bedford) [#36917] - **doc**: add http.IncomingMessage#connection (Pranshu Srivastava) [#33768] - **events**: change EventTarget handler exception behavior (Nitzan Uziely) [#37237] - **fs**: remove permissive rmdir recursive (Antoine du Hamel) [#37216] - **fs**: add validation for fd and path (Dylan Elliott) [#35187] - **fs**: runtime deprecate rmdir recursive option (Antoine du Hamel) [#37302] - **fs**: fix flag and mode validation (James M Snell) [#37480] - **http**: use objects with null prototype in Agent (Michaël Zasso) [#36409] - **lib**: runtime deprecate access to process.binding('http_parser') (James M Snell) [#37813] - **lib**: runtime deprecate access to process.binding('url') (James M Snell) [#37799] - **lib**: make process.binding('util') return only type checkers (Anna Henningsen) [#37819] - **lib**: runtime deprecate access to process.binding('crypto') (James M Snell) [#37790] - **lib**: runtime deprecate access to process.binding('signal_wrap') (James M Snell) [#37800] - **lib**: runtime deprecate access to process.binding('v8') (James M Snell) [#37789] - **lib**: aggregate errors to avoid error swallowing (Antoine du Hamel) [#37460] - **lib**: load v8_prof_processor dependencies as ESM (Michaël Zasso) [#37587] - **lib**: runtime deprecate access to process.binding('async_wrap') (James M Snell) [#37576] - **lib**: remove usage of url.parse (raisinten) [#36853] - **lib**: add error handling for input stream (rexagod) [#31603] - **lib,src**: update cluster to use Parent (Michael Dawson) [#36478] - **module**: runtime deprecate subpath folder mappings (Antoine du Hamel) [#37215] - **module**: runtime deprecate "main" index and extension lookups (Antoine du Hamel) [#37206] - **module**: runtime deprecate invalid package.json main entries (Antoine du Hamel) [#37204] - **module**: remove module.createRequireFromPath (Antoine du Hamel) [#37201] - **module**: only set cache when finding module succeeds (Yongsheng Zhang) [#36642] - **perf_hooks**: make performance a global (James M Snell) [#37970] - **perf_hooks**: complete overhaul of the implementation (James M Snell) [#37136] - **process**: disallow adding options to process.allowedNodeEnvironmentFlags (Antoine du Hamel) [#36660] - **process**: runtime deprecate changing process.config (James M Snell) [#36902] - **readline**: cursorTo throw error on NaN (Zijian Liu) [#36379] - **src**: use non-deprecated GetCreationContext from V8 (Michaël Zasso) [#37587] - **src**: remove V8_FT_ADAPTOR for V8 update (Colin Ihrig) [#37587] - **src**: use non-deprecated V8 module APIs (Michaël Zasso) [#37587] - **src**: update NODE_MODULE_VERSION to 93 (Michaël Zasso) [#37587] - **src**: use non-deprecated V8 module and script APIs (Michaël Zasso) [#37330] - **src**: update NODE_MODULE_VERSION to 92 (Michaël Zasso) [#37330] - **src**: update NODE_MODULE_VERSION to 91 (Michaël Zasso) [#36139] - **src**: mark internally exported functions as explicitly internal (Tyler Ang-Wanek) [#37000] - **src**: inline AsyncCleanupHookHandle in headers (Tyler Ang-Wanek) [#37000] - **src**: fix v8 api deprecation (Jiawen Geng) [#35700] - **src**: update NODE_MODULE_VERSION to 90 (Michaël Zasso) [#35700] - **src**: clean up embedder API (Anna Henningsen) [#35897] - **test**: mark test-return-on-exit as flaky (Michaël Zasso) [#36139] - **test**: mark WASI's test-return-on-exit as flaky (Colin Ihrig) [#36139] - **tools**: update V8 gypfiles for 9.0 (Michaël Zasso) [#37587] - **tools**: update V8 gypfiles for 8.9 (Michaël Zasso) [#37330] - **tools**: update V8 gypfiles for 8.8 (Michaël Zasso) [#36139] - **tools**: update V8 gypfiles for 8.7 (Michaël Zasso) [#35700] - **worker**: send correct error status for worker init (Yash Ladha) [#36242] PR-URL: #37678
Notable changes: Deprecations and Removals: - **(SEMVER-MAJOR)** **fs**: remove permissive rmdir recursive (Antoine du Hamel) [#37216] - **(SEMVER-MAJOR)** **fs**: runtime deprecate rmdir recursive option (Antoine du Hamel) [#37302] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('http_parser') (James M Snell) [#37813] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('url') (James M Snell) [#37799] - **(SEMVER-MAJOR)** **lib**: make process.binding('util') return only type checkers (Anna Henningsen) [#37819] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('crypto') (James M Snell) [#37790] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('signal_wrap') (James M Snell) [#37800] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('v8') (James M Snell) [#37789] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('async_wrap') (James M Snell) [#37576] - **(SEMVER-MAJOR)** **module**: remove module.createRequireFromPath (Antoine du Hamel) [#37201] - **(SEMVER-MAJOR)** **module**: runtime deprecate subpath folder mappings (Antoine du Hamel) [#37215] - **(SEMVER-MAJOR)** **module**: runtime deprecate "main" index and extension lookups (Antoine du Hamel) [#37206] - **(SEMVER-MAJOR)** **module**: runtime deprecate invalid package.json main entries (Antoine du Hamel) [#37204] - **(SEMVER-MAJOR)** **process**: runtime deprecate changing process.config (James M Snell) [#36902] Stable Timers Promises API: The Timers Promises API provides an alternative set of timer functions that return Promise objects. Added in Node.js v15.0.0, in this release they graduate from experimental status to stable. Contributed by James Snell - [#38112] Toolchain and Compiler Upgrades: Node.js v16.0.0 will be the first release where we ship prebuilt binaries for Apple Silicon. While we’ll be providing separate tarballs for the Intel (`darwin-x64`) and ARM (`darwin-arm64`) architectures the macOS installer (`.pkg`) will be shipped as a ‘fat’ (multi-architecture) binary. - **(SEMVER-MAJOR)** **build**: remove support for Python 2 (Christian Clauss) [#36691] - **(SEMVER-MAJOR)** **build**: default PYTHON to python3 in Makefile (Michaël Zasso) [#37764] - **build**: update Makefile to support fat binary (Ash Cripps) [#37861] - **(SEMVER-MAJOR)** **build**: enable ASLR (PIE) on OS X (woodfairy) [#35704] - **build**: warn for gcc versions earlier than 8.3.0 (Richard Lau) [#37935] - **(SEMVER-MAJOR)** **doc**: update minimum supported Xcode to 11 (Michaël Zasso) [#37872] - **(SEMVER-MAJOR)** **doc**: update minimum supported GCC to 8.3 (Michaël Zasso) [#37871] - **(SEMVER-MAJOR)** **doc**: update AIX to GCC8 for v16.x (Ash Cripps) [#37677] - **tools**: set arch in Distribution.xml (Ash Cripps) [#38261] V8 9.0: The V8 JavaScript engine is updated to V8 9.0, including performance tweaks and improvements. This update also brings the ECMAScript RegExp Match Indices, which provide the start and end indices of the captured string. The indices array is available via the `.indices` property on match objects when the regular expression has the `/d` flag. Contributed by Michaël Zasso - [#37587] Other Notable Changes: - **(SEMVER-MINOR)** **assert**: graduate assert.match and assert.doesNotMatch (James M Snell) [#38111] - **(SEMVER-MAJOR)** **buffer**: expose btoa and atob as globals (James M Snell) [#37786] - **(SEMVER-MAJOR)** **deps**: bump minimum ICU version to 68 (Michaël Zasso) [#37330] - **deps**: update ICU to 69.1 (Michaël Zasso) [#38178] - **deps**: update llhttp to 6.0.0 (Fedor Indutny) [#38277] - **deps**: upgrade npm to 7.10.0 (Ruy Adorno) [#38254] - **(SEMVER-MINOR)** **http**: add http.ClientRequest.getRawHeaderNames() (simov) [#37660] - **(SEMVER-MAJOR)** **lib,src**: update cluster to use Parent (Michael Dawson) [#36478] - **(SEMVER-MINOR)** **module**: add support for `node:`‑prefixed `require(…)` calls (ExE Boss) [#37246] - **(SEMVER-MINOR)** **perf_hooks**: add histogram option to timerify (James M Snell) [#37475] - **(SEMVER-MINOR)** **repl**: add auto‑completion for `node:`‑prefixed `require(…)` calls (ExE Boss) [#37246] - **(SEMVER-MINOR)** **util**: add getSystemErrorMap() impl (eladkeyshawn) [#38101] Semver-Major Commits: - **(SEMVER-MAJOR)** **async_hooks**: add thisArg to AsyncResource.bind (James M Snell) [#36782] - **(SEMVER-MAJOR)** **buffer**: expose btoa and atob as globals (James M Snell) [#37786] - **(SEMVER-MAJOR)** **build**: remove support for Python 2 (Christian Clauss) [#36691] - **(SEMVER-MAJOR)** **build**: default PYTHON to python3 in Makefile (Michaël Zasso) [#37764] - **(SEMVER-MAJOR)** **build**: update Makefile to support fat binary (Ash Cripps) [#37861] - **(SEMVER-MAJOR)** **build**: include minimal V8 headers in distribution (Michaël Zasso) [#37570] - **(SEMVER-MAJOR)** **build**: use C++11 ABI with libstdc++ (Anna Henningsen) [#36634] - **(SEMVER-MAJOR)** **build**: enable ASLR (PIE) on OS X (woodfairy) [#35704] - **(SEMVER-MAJOR)** **deps**: update V8 to 9.0.257.11 (Michaël Zasso) [#37587] - **(SEMVER-MAJOR)** **deps**: bump minimum ICU version to 68 (Michaël Zasso) [#37330] - **(SEMVER-MAJOR)** **deps**: update V8 to 8.9.255.19 (Michaël Zasso) [#37330] - **(SEMVER-MAJOR)** **deps**: update V8 to 8.8.278.17 (Michaël Zasso) [#36139] - **(SEMVER-MAJOR)** **deps**: update V8 to 8.7.220 (Michaël Zasso) [#35700] - **(SEMVER-MAJOR)** **dns**: use url module instead of punycode for IDNA (Antoine du Hamel) [#35091] - **(SEMVER-MAJOR)** **doc**: update minimum supported Xcode to 11 (Michaël Zasso) [#37872] - **(SEMVER-MAJOR)** **doc**: update minimum supported GCC to 8.3 (Michaël Zasso) [#37871] - **(SEMVER-MAJOR)** **doc**: update AIX to GCC8 for v16.x (Ash Cripps) [#37677] - **(SEMVER-MAJOR)** **doc**: add http.IncomingMessage#connection (Pranshu Srivastava) [#33768] - **(SEMVER-MAJOR)** **events**: change EventTarget handler exception behavior (Nitzan Uziely) [#37237] - **(SEMVER-MAJOR)** **fs**: remove permissive rmdir recursive (Antoine du Hamel) [#37216] - **(SEMVER-MAJOR)** **fs**: add validation for fd and path (Dylan Elliott) [#35187] - **(SEMVER-MAJOR)** **fs**: runtime deprecate rmdir recursive option (Antoine du Hamel) [#37302] - **(SEMVER-MAJOR)** **fs**: fix flag and mode validation (James M Snell) [#37480] - **(SEMVER-MAJOR)** **http**: use objects with null prototype in Agent (Michaël Zasso) [#36409] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('http_parser') (James M Snell) [#37813] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('url') (James M Snell) [#37799] - **(SEMVER-MAJOR)** **lib**: make process.binding('util') return only type checkers (Anna Henningsen) [#37819] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('crypto') (James M Snell) [#37790] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('signal_wrap') (James M Snell) [#37800] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('v8') (James M Snell) [#37789] - **(SEMVER-MAJOR)** **lib**: aggregate errors to avoid error swallowing (Antoine du Hamel) [#37460] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('async_wrap') (James M Snell) [#37576] - **(SEMVER-MAJOR)** **lib**: remove usage of url.parse (raisinten) [#36853] - **(SEMVER-MAJOR)** **lib**: add error handling for input stream (rexagod) [#31603] - **(SEMVER-MAJOR)** **lib,src**: update cluster to use Parent (Michael Dawson) [#36478] - **(SEMVER-MAJOR)** **module**: runtime deprecate subpath folder mappings (Antoine du Hamel) [#37215] - **(SEMVER-MAJOR)** **module**: runtime deprecate "main" index and extension lookups (Antoine du Hamel) [#37206] - **(SEMVER-MAJOR)** **module**: runtime deprecate invalid package.json main entries (Antoine du Hamel) [#37204] - **(SEMVER-MAJOR)** **module**: remove module.createRequireFromPath (Antoine du Hamel) [#37201] - **(SEMVER-MAJOR)** **module**: only set cache when finding module succeeds (Yongsheng Zhang) [#36642] - **(SEMVER-MAJOR)** **perf_hooks**: make performance a global (James M Snell) [#37970] - **(SEMVER-MAJOR)** **perf_hooks**: complete overhaul of the implementation (James M Snell) [#37136] - **(SEMVER-MAJOR)** **process**: disallow adding options to process.allowedNodeEnvironmentFlags (Antoine du Hamel) [#36660] - **(SEMVER-MAJOR)** **process**: runtime deprecate changing process.config (James M Snell) [#36902] - **(SEMVER-MAJOR)** **readline**: cursorTo throw error on NaN (Zijian Liu) [#36379] - **(SEMVER-MAJOR)** **src**: mark internally exported functions as explicitly internal (Tyler Ang-Wanek) [#37000] - **(SEMVER-MAJOR)** **src**: inline AsyncCleanupHookHandle in headers (Tyler Ang-Wanek) [#37000] - **(SEMVER-MAJOR)** **src**: clean up embedder API (Anna Henningsen) [#35897] - **(SEMVER-MAJOR)** **worker**: send correct error status for worker init (Yash Ladha) [#36242] PR-URL: #37678
Notable changes: Deprecations and Removals: - **(SEMVER-MAJOR)** **fs**: remove permissive rmdir recursive (Antoine du Hamel) [#37216] - **(SEMVER-MAJOR)** **fs**: runtime deprecate rmdir recursive option (Antoine du Hamel) [#37302] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('http_parser') (James M Snell) [#37813] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('url') (James M Snell) [#37799] - **(SEMVER-MAJOR)** **lib**: make process.binding('util') return only type checkers (Anna Henningsen) [#37819] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('crypto') (James M Snell) [#37790] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('signal_wrap') (James M Snell) [#37800] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('v8') (James M Snell) [#37789] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('async_wrap') (James M Snell) [#37576] - **(SEMVER-MAJOR)** **module**: remove module.createRequireFromPath (Antoine du Hamel) [#37201] - **(SEMVER-MAJOR)** **module**: runtime deprecate subpath folder mappings (Antoine du Hamel) [#37215] - **(SEMVER-MAJOR)** **module**: runtime deprecate "main" index and extension lookups (Antoine du Hamel) [#37206] - **(SEMVER-MAJOR)** **module**: runtime deprecate invalid package.json main entries (Antoine du Hamel) [#37204] - **(SEMVER-MAJOR)** **process**: runtime deprecate changing process.config (James M Snell) [#36902] Stable Timers Promises API: The Timers Promises API provides an alternative set of timer functions that return Promise objects. Added in Node.js v15.0.0, in this release they graduate from experimental status to stable. Contributed by James Snell - [#38112] Toolchain and Compiler Upgrades: Node.js v16.0.0 will be the first release where we ship prebuilt binaries for Apple Silicon. While we’ll be providing separate tarballs for the Intel (`darwin-x64`) and ARM (`darwin-arm64`) architectures the macOS installer (`.pkg`) will be shipped as a ‘fat’ (multi-architecture) binary. - **(SEMVER-MAJOR)** **build**: remove support for Python 2 (Christian Clauss) [#36691] - **(SEMVER-MAJOR)** **build**: default PYTHON to python3 in Makefile (Michaël Zasso) [#37764] - **build**: update Makefile to support fat binary (Ash Cripps) [#37861] - **(SEMVER-MAJOR)** **build**: enable ASLR (PIE) on OS X (woodfairy) [#35704] - **build**: warn for gcc versions earlier than 8.3.0 (Richard Lau) [#37935] - **(SEMVER-MAJOR)** **doc**: update minimum supported Xcode to 11 (Michaël Zasso) [#37872] - **(SEMVER-MAJOR)** **doc**: update minimum supported GCC to 8.3 (Michaël Zasso) [#37871] - **(SEMVER-MAJOR)** **doc**: update AIX to GCC8 for v16.x (Ash Cripps) [#37677] - **tools**: set arch in Distribution.xml (Ash Cripps) [#38261] V8 9.0: The V8 JavaScript engine is updated to V8 9.0, including performance tweaks and improvements. This update also brings the ECMAScript RegExp Match Indices, which provide the start and end indices of the captured string. The indices array is available via the `.indices` property on match objects when the regular expression has the `/d` flag. Contributed by Michaël Zasso - [#37587] Other Notable Changes: - **(SEMVER-MINOR)** **assert**: graduate assert.match and assert.doesNotMatch (James M Snell) [#38111] - **(SEMVER-MAJOR)** **buffer**: expose btoa and atob as globals (James M Snell) [#37786] - **(SEMVER-MAJOR)** **deps**: bump minimum ICU version to 68 (Michaël Zasso) [#37330] - **deps**: update ICU to 69.1 (Michaël Zasso) [#38178] - **deps**: update llhttp to 6.0.0 (Fedor Indutny) [#38277] - **deps**: upgrade npm to 7.10.0 (Ruy Adorno) [#38254] - **(SEMVER-MINOR)** **http**: add http.ClientRequest.getRawHeaderNames() (simov) [#37660] - **(SEMVER-MAJOR)** **lib,src**: update cluster to use Parent (Michael Dawson) [#36478] - **(SEMVER-MINOR)** **module**: add support for `node:`‑prefixed `require(…)` calls (ExE Boss) [#37246] - **(SEMVER-MINOR)** **perf_hooks**: add histogram option to timerify (James M Snell) [#37475] - **(SEMVER-MINOR)** **repl**: add auto‑completion for `node:`‑prefixed `require(…)` calls (ExE Boss) [#37246] - **(SEMVER-MINOR)** **util**: add getSystemErrorMap() impl (eladkeyshawn) [#38101] Semver-Major Commits: - **(SEMVER-MAJOR)** **async_hooks**: add thisArg to AsyncResource.bind (James M Snell) [#36782] - **(SEMVER-MAJOR)** **buffer**: expose btoa and atob as globals (James M Snell) [#37786] - **(SEMVER-MAJOR)** **build**: remove support for Python 2 (Christian Clauss) [#36691] - **(SEMVER-MAJOR)** **build**: default PYTHON to python3 in Makefile (Michaël Zasso) [#37764] - **(SEMVER-MAJOR)** **build**: update Makefile to support fat binary (Ash Cripps) [#37861] - **(SEMVER-MAJOR)** **build**: include minimal V8 headers in distribution (Michaël Zasso) [#37570] - **(SEMVER-MAJOR)** **build**: use C++11 ABI with libstdc++ (Anna Henningsen) [#36634] - **(SEMVER-MAJOR)** **build**: enable ASLR (PIE) on OS X (woodfairy) [#35704] - **(SEMVER-MAJOR)** **deps**: update V8 to 9.0.257.11 (Michaël Zasso) [#37587] - **(SEMVER-MAJOR)** **deps**: bump minimum ICU version to 68 (Michaël Zasso) [#37330] - **(SEMVER-MAJOR)** **deps**: update V8 to 8.9.255.19 (Michaël Zasso) [#37330] - **(SEMVER-MAJOR)** **deps**: update V8 to 8.8.278.17 (Michaël Zasso) [#36139] - **(SEMVER-MAJOR)** **deps**: update V8 to 8.7.220 (Michaël Zasso) [#35700] - **(SEMVER-MAJOR)** **dns**: use url module instead of punycode for IDNA (Antoine du Hamel) [#35091] - **(SEMVER-MAJOR)** **doc**: update minimum supported Xcode to 11 (Michaël Zasso) [#37872] - **(SEMVER-MAJOR)** **doc**: update minimum supported GCC to 8.3 (Michaël Zasso) [#37871] - **(SEMVER-MAJOR)** **doc**: update AIX to GCC8 for v16.x (Ash Cripps) [#37677] - **(SEMVER-MAJOR)** **doc**: add http.IncomingMessage#connection (Pranshu Srivastava) [#33768] - **(SEMVER-MAJOR)** **events**: change EventTarget handler exception behavior (Nitzan Uziely) [#37237] - **(SEMVER-MAJOR)** **fs**: remove permissive rmdir recursive (Antoine du Hamel) [#37216] - **(SEMVER-MAJOR)** **fs**: add validation for fd and path (Dylan Elliott) [#35187] - **(SEMVER-MAJOR)** **fs**: runtime deprecate rmdir recursive option (Antoine du Hamel) [#37302] - **(SEMVER-MAJOR)** **fs**: fix flag and mode validation (James M Snell) [#37480] - **(SEMVER-MAJOR)** **http**: use objects with null prototype in Agent (Michaël Zasso) [#36409] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('http_parser') (James M Snell) [#37813] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('url') (James M Snell) [#37799] - **(SEMVER-MAJOR)** **lib**: make process.binding('util') return only type checkers (Anna Henningsen) [#37819] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('crypto') (James M Snell) [#37790] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('signal_wrap') (James M Snell) [#37800] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('v8') (James M Snell) [#37789] - **(SEMVER-MAJOR)** **lib**: aggregate errors to avoid error swallowing (Antoine du Hamel) [#37460] - **(SEMVER-MAJOR)** **lib**: runtime deprecate access to process.binding('async_wrap') (James M Snell) [#37576] - **(SEMVER-MAJOR)** **lib**: remove usage of url.parse (raisinten) [#36853] - **(SEMVER-MAJOR)** **lib**: add error handling for input stream (rexagod) [#31603] - **(SEMVER-MAJOR)** **lib,src**: update cluster to use Parent (Michael Dawson) [#36478] - **(SEMVER-MAJOR)** **module**: runtime deprecate subpath folder mappings (Antoine du Hamel) [#37215] - **(SEMVER-MAJOR)** **module**: runtime deprecate "main" index and extension lookups (Antoine du Hamel) [#37206] - **(SEMVER-MAJOR)** **module**: runtime deprecate invalid package.json main entries (Antoine du Hamel) [#37204] - **(SEMVER-MAJOR)** **module**: remove module.createRequireFromPath (Antoine du Hamel) [#37201] - **(SEMVER-MAJOR)** **module**: only set cache when finding module succeeds (Yongsheng Zhang) [#36642] - **(SEMVER-MAJOR)** **perf_hooks**: make performance a global (James M Snell) [#37970] - **(SEMVER-MAJOR)** **perf_hooks**: complete overhaul of the implementation (James M Snell) [#37136] - **(SEMVER-MAJOR)** **process**: disallow adding options to process.allowedNodeEnvironmentFlags (Antoine du Hamel) [#36660] - **(SEMVER-MAJOR)** **process**: runtime deprecate changing process.config (James M Snell) [#36902] - **(SEMVER-MAJOR)** **readline**: cursorTo throw error on NaN (Zijian Liu) [#36379] - **(SEMVER-MAJOR)** **src**: mark internally exported functions as explicitly internal (Tyler Ang-Wanek) [#37000] - **(SEMVER-MAJOR)** **src**: inline AsyncCleanupHookHandle in headers (Tyler Ang-Wanek) [#37000] - **(SEMVER-MAJOR)** **src**: clean up embedder API (Anna Henningsen) [#35897] - **(SEMVER-MAJOR)** **worker**: send correct error status for worker init (Yash Ladha) [#36242] PR-URL: #37678
Headers considered non-essential were removed in #37570, however the libplatform API is actualy needed (and used) by external software initiaing the v8 engine, see for example: https://chromium.googlesource.com/v8/v8/+/refs/heads/main/samples/hello-world.cc PR-URL: #39288 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Michael Dawson <midawson@redhat.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Headers considered non-essential were removed in #37570, however the libplatform API is actualy needed (and used) by external software initiaing the v8 engine, see for example: https://chromium.googlesource.com/v8/v8/+/refs/heads/main/samples/hello-world.cc PR-URL: #39288 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Michael Dawson <midawson@redhat.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>