Commit 5c58f7e5 authored by Jérémy Lal's avatar Jérémy Lal

New upstream version 8.9.4~dfsg

parent 1691cf96
This diff is collapsed.
......@@ -65,6 +65,14 @@ note1 - The gcc4.8-libs package needs to be installed, because node
In "Git bash" if you call the node shell alias (`node` without the `.exe`
extension), `winpty` is used automatically.
The Windows Subsystem for Linux (WSL) is not directly supported, but the
GNU/Linux build process and binaries should work. The community will only
address issues that reproduce on native GNU/Linux systems. Issues that only
reproduce on WSL should be reported in the
[WSL issue tracker](https://github.com/Microsoft/WSL/issues). Running the
Windows binary (`node.exe`) in WSL is not recommended, and will not work
without adjustment (such as stdio redirection).
### Supported toolchains
Depending on host platform, the selection of toolchains may vary.
......@@ -82,6 +90,9 @@ Depending on host platform, the selection of toolchains may vary.
## Building Node.js on supported platforms
*Note:* All prerequisites can be easily installed by following
[this bootstrapping guide](https://github.com/nodejs/node/blob/master/tools/bootstrap/README.md).
### Unix / macOS
Prerequisites:
......@@ -340,17 +351,13 @@ as `deps/icu` (You'll have: `deps/icu/source/...`)
## Building Node.js with FIPS-compliant OpenSSL
NOTE: Windows is not yet supported
It is possible to build Node.js with
[OpenSSL FIPS module](https://www.openssl.org/docs/fipsnotes.html).
It is possible to build Node.js with the
[OpenSSL FIPS module](https://www.openssl.org/docs/fipsnotes.html) on POSIX
systems. Windows is not supported.
**Note**: building in this way does **not** allow you to claim that the
runtime is FIPS 140-2 validated. Instead you can indicate that the runtime
uses a validated module. See the
[security policy](http://csrc.nist.gov/groups/STM/cmvp/documents/140-1/140sp/140sp1747.pdf)
page 60 for more details. In addition, the validation for the underlying module
is only valid if it is deployed in accordance with its
Building in this way does not mean the runtime is FIPS 140-2 validated, but
rather that the runtime uses a validated module. In addition, the validation for
the underlying module is only valid if it is deployed in accordance with its
[security policy](http://csrc.nist.gov/groups/STM/cmvp/documents/140-1/140sp/140sp1747.pdf).
If you need FIPS validated cryptography it is recommended that you read both
the [security policy](http://csrc.nist.gov/groups/STM/cmvp/documents/140-1/140sp/140sp1747.pdf)
......
......@@ -27,7 +27,8 @@ release.
</tr>
<tr>
<td valign="top">
<b><a href="doc/changelogs/CHANGELOG_V8.md#8.9.3">8.9.3</a></b><br/>
<b><a href="doc/changelogs/CHANGELOG_V8.md#8.9.4">8.9.4</a></b><br/>
<a href="doc/changelogs/CHANGELOG_V8.md#8.9.3">8.9.3</a><br/>
<a href="doc/changelogs/CHANGELOG_V8.md#8.9.2">8.9.2</a><br/>
<a href="doc/changelogs/CHANGELOG_V8.md#8.9.1">8.9.1</a><br/>
<a href="doc/changelogs/CHANGELOG_V8.md#8.9.0">8.9.0</a><br/>
......
# Code of Conduct
The Node.js Code of Conduct document has moved to
https://github.com/nodejs/TSC/blob/master/CODE_OF_CONDUCT.md. Please update
https://github.com/nodejs/admin/blob/master/CODE_OF_CONDUCT.md. Please update
links to this document accordingly.
The Node.js Moderation policy can be found at
https://github.com/nodejs/admin/blob/master/Moderation-Policy.md
This diff is collapsed.
......@@ -74,7 +74,7 @@ for any individual to *act* in such a manner that is not in violation of the
strict letter of the Code of Conduct guidelines while still going completely
against the spirit of what that Code is intended to accomplish.
Open, diverse and inclusive communities live and die on the basis of trust.
Open, diverse, and inclusive communities live and die on the basis of trust.
Contributors can disagree with one another so long as they trust that those
disagreements are in good faith and everyone is working towards a common goal.
......@@ -177,7 +177,7 @@ Node.js changed that broke the module.
Once an issue has been opened, it is not uncommon for there to be discussion
around it. Some contributors may have differing opinions about the issue,
including whether the behavior being seen is a bug or a feature. This discussion
is part of the process and should be kept focused, helpful and professional.
is part of the process and should be kept focused, helpful, and professional.
Short, clipped responses—that provide neither additional context nor supporting
detail—are not helpful or professional. To many, such responses are simply
......@@ -221,9 +221,9 @@ In case of doubt, open an issue in the
[issue tracker](https://github.com/nodejs/node/issues/) or contact one of the
[project Collaborators](https://github.com/nodejs/node/#current-project-team-members).
Node.js has two IRC channels:
[#Node.js](http://webchat.freenode.net/?channels=node.js) for general help and
[#Node.js](https://webchat.freenode.net/?channels=node.js) for general help and
questions, and
[#Node-dev](http://webchat.freenode.net/?channels=node-dev) for development of
[#Node-dev](https://webchat.freenode.net/?channels=node-dev) for development of
Node.js core specifically.
### Setting up your local environment
......@@ -862,7 +862,7 @@ By making a contribution to this project, I certify that:
[benchmark results]: ./doc/guides/writing-and-running-benchmarks.md
[Building guide]: ./BUILDING.md
[CI (Continuous Integration) test run]: #ci-testing
[Code of Conduct]: https://github.com/nodejs/TSC/blob/master/CODE_OF_CONDUCT.md
[Code of Conduct]: https://github.com/nodejs/admin/blob/master/CODE_OF_CONDUCT.md
[https://ci.nodejs.org/]: https://ci.nodejs.org/
[IRC in the #node-dev channel]: https://webchat.freenode.net?channels=node-dev&uio=d4
[Node.js help repository]: https://github.com/nodejs/help/issues
......
# C++ Style Guide
## Table of Contents
* [Formatting](#formatting)
* [Left-leaning (C++ style) asterisks for pointer declarations](#left-leaning-c-style-asterisks-for-pointer-declarations)
* [2 spaces of indentation for blocks or bodies of conditionals](#2-spaces-of-indentation-for-blocks-or-bodies-of-conditionals)
* [4 spaces of indentation for statement continuations](#4-spaces-of-indentation-for-statement-continuations)
* [Align function arguments vertically](#align-function-arguments-vertically)
* [Initialization lists](#initialization-lists)
* [CamelCase for methods, functions, and classes](#camelcase-for-methods-functions-and-classes)
* [snake\_case for local variables and parameters](#snake_case-for-local-variables-and-parameters)
* [snake\_case\_ for private class fields](#snake_case_-for-private-class-fields)
* [Space after `template`](#space-after-template)
* [Memory Management](#memory-management)
* [Memory allocation](#memory-allocation)
* [Use `nullptr` instead of `NULL` or `0`](#use-nullptr-instead-of-null-or-0)
* [Ownership and Smart Pointers](#ownership-and-smart-pointers)
* [Others](#others)
* [Type casting](#type-casting)
* [Do not include `*.h` if `*-inl.h` has already been included](#do-not-include-h-if--inlh-has-already-been-included)
* [Avoid throwing JavaScript errors in nested C++ methods](#avoid-throwing-javascript-errors-in-nested-c-methods)
Unfortunately, the C++ linter (based on
[Google’s `cpplint`](https://github.com/google/styleguide)), which can be run
explicitly via `make lint-cpp`, does not currently catch a lot of rules that are
specific to the Node.js C++ code base. This document explains the most common of
these rules:
## Formatting
## Left-leaning (C++ style) asterisks for pointer declarations
`char* buffer;` instead of `char *buffer;`
......@@ -69,7 +92,7 @@ HandleWrap::HandleWrap(Environment* env,
handle_(handle) {
```
## CamelCase for methods, functions and classes
## CamelCase for methods, functions, and classes
Exceptions are simple getters/setters, which are named `property_name()` and
`set_property_name()`, respectively.
......@@ -110,23 +133,50 @@ class FancyContainer {
...
}
```
## Type casting
- Always avoid C-style casts (`(type)value`)
- `dynamic_cast` does not work because RTTI is not enabled
- Use `static_cast` for casting whenever it works
- `reinterpret_cast` is okay if `static_cast` is not appropriate
## Memory Management
## Memory allocation
- `Malloc()`, `Calloc()`, etc. from `util.h` abort in Out-of-Memory situations
- `UncheckedMalloc()`, etc. return `nullptr` in OOM situations
## `nullptr` instead of `NULL` or `0`
## Use `nullptr` instead of `NULL` or `0`
What it says in the title.
## Ownership and Smart Pointers
"Smart" pointers are classes that act like pointers, e.g.
by overloading the `*` and `->` operators. Some smart pointer types can be
used to automate ownership bookkeeping, to ensure these responsibilities are
met. `std::unique_ptr` is a smart pointer type introduced in C++11, which
expresses exclusive ownership of a dynamically allocated object; the object
is deleted when the `std::unique_ptr` goes out of scope. It cannot be
copied, but can be moved to represent ownership transfer.
`std::shared_ptr` is a smart pointer type that expresses shared ownership of a
dynamically allocated object. `std::shared_ptr`s can be copied; ownership
of the object is shared among all copies, and the object
is deleted when the last `std::shared_ptr` is destroyed.
Prefer to use `std::unique_ptr` to make ownership
transfer explicit. For example:
```cpp
std::unique_ptr<Foo> FooFactory();
void FooConsumer(std::unique_ptr<Foo> ptr);
```
Never use `std::auto_ptr`. Instead, use `std::unique_ptr`.
## Others
## Type casting
- Always avoid C-style casts (`(type)value`)
- `dynamic_cast` does not work because RTTI is not enabled
- Use `static_cast` for casting whenever it works
- `reinterpret_cast` is okay if `static_cast` is not appropriate
## Do not include `*.h` if `*-inl.h` has already been included
Do
......
......@@ -134,4 +134,4 @@ The TSC follows a [Consensus Seeking][] decision making model as described by
the [TSC Charter][].
[TSC Charter]: https://github.com/nodejs/TSC/blob/master/TSC-Charter.md
[Consensus Seeking]: http://en.wikipedia.org/wiki/Consensus-seeking_decision-making
[Consensus Seeking]: https://en.wikipedia.org/wiki/Consensus-seeking_decision-making
......@@ -63,11 +63,17 @@ V ?= 1
# BUILDTYPE=Debug builds both release and debug builds. If you want to compile
# just the debug build, run `make -C out BUILDTYPE=Debug` instead.
ifeq ($(BUILDTYPE),Release)
all: out/Makefile $(NODE_EXE)
all: out/Makefile $(NODE_EXE) ## Default target, builds node in out/Release/node.
else
all: out/Makefile $(NODE_EXE) $(NODE_G_EXE)
endif
# To add a target to the help, add a double comment (##) on the target line.
help: ## Print help for targets with comments.
@printf "For more targets and info see the comments in the Makefile.\n\n"
@grep -E '^[a-zA-Z0-9._-]+:.*?## .*$$' Makefile | sort | \
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
# The .PHONY is needed to ensure that we recursively use the out/Makefile
# to check for changes.
.PHONY: $(NODE_EXE) $(NODE_G_EXE)
......@@ -94,13 +100,13 @@ out/Makefile: common.gypi deps/uv/uv.gyp deps/http_parser/http_parser.gyp \
config.gypi: configure
$(error Missing or stale $@, please run ./$<)
install: all
install: all ## Installs node into $PREFIX (default=/usr/local).
$(PYTHON) tools/install.py $@ '$(DESTDIR)' '$(PREFIX)'
uninstall:
uninstall: ## Uninstalls node from $PREFIX (default=/usr/local).
$(PYTHON) tools/install.py $@ '$(DESTDIR)' '$(PREFIX)'
clean:
clean: ## Remove build artifacts.
$(RM) -r out/Makefile $(NODE_EXE) $(NODE_G_EXE) out/$(BUILDTYPE)/$(NODE_EXE) \
out/$(BUILDTYPE)/node.exp
@if [ -d out ]; then find out/ -name '*.o' -o -name '*.a' -o -name '*.d' | xargs $(RM) -r; fi
......@@ -132,7 +138,7 @@ coverage-clean:
$(RM) -r node_modules
$(RM) -r gcovr testing
$(RM) -r out/$(BUILDTYPE)/.coverage
$(RM) -r .cov_tmp coverage
$(RM) -r .cov_tmp
$(RM) out/$(BUILDTYPE)/obj.target/node/{src,gen}/*.gcda
$(RM) out/$(BUILDTYPE)/obj.target/node/src/tracing/*.gcda
$(RM) out/$(BUILDTYPE)/obj.target/node/{src,gen}/*.gcno
......@@ -145,7 +151,7 @@ coverage-clean:
# For C++ coverage reporting, this needs to be run in conjunction with configure
# --coverage. html coverage reports will be created under coverage/
coverage: coverage-test
coverage: coverage-test ## Run the tests and generate a coverage report.
coverage-build: all
mkdir -p node_modules
......@@ -206,15 +212,15 @@ v8:
$(MAKE) -C deps/v8 $(V8_ARCH).$(BUILDTYPE_LOWER) $(V8_BUILD_OPTIONS)
ifeq ($(NODE_TARGET_TYPE),static_library)
test: all
test: all ## Default test target. Runs default tests, linters, and builds docs.
$(MAKE) cctest
else
test: all
$(MAKE) build-addons
$(MAKE) build-addons-napi
$(MAKE) doc-only
$(MAKE) lint
$(MAKE) cctest
$(MAKE) -s build-addons
$(MAKE) -s build-addons-napi
$(MAKE) -s doc-only
$(MAKE) -s lint
$(MAKE) -s cctest
$(PYTHON) tools/test.py --mode=release -J \
$(CI_ASYNC_HOOKS) \
$(CI_JS_SUITES) \
......@@ -319,7 +325,7 @@ test/addons/.buildstamp: config.gypi \
# .buildstamp is out of date and need a rebuild.
# Just goes to show that recursive make really is harmful...
# TODO(bnoordhuis) Force rebuild after gyp update.
build-addons: $(NODE_EXE) test/addons/.buildstamp
build-addons: | $(NODE_EXE) test/addons/.buildstamp
ADDONS_NAPI_BINDING_GYPS := \
$(filter-out test/addons-napi/??_*/binding.gyp, \
......@@ -358,7 +364,7 @@ test/addons-napi/.buildstamp: config.gypi \
# .buildstamp is out of date and need a rebuild.
# Just goes to show that recursive make really is harmful...
# TODO(bnoordhuis) Force rebuild after gyp or node-gyp update.
build-addons-napi: $(NODE_EXE) test/addons-napi/.buildstamp
build-addons-napi: | $(NODE_EXE) test/addons-napi/.buildstamp
clear-stalled:
# Clean up any leftover processes but don't error if found.
......@@ -378,7 +384,7 @@ test-build: | all build-addons build-addons-napi
test-build-addons-napi: all build-addons-napi
test-all: test-build test/gc/build/Release/binding.node
test-all: test-build test/gc/build/Release/binding.node ## Run everything in test/.
$(PYTHON) tools/test.py --mode=debug,release
test-all-valgrind: test-build
......@@ -457,7 +463,7 @@ test-doc: doc-only
test-known-issues: all
$(PYTHON) tools/test.py known_issues
test-npm: $(NODE_EXE)
test-npm: $(NODE_EXE) ## Run the npm test suite on deps/npm.
$(NODE) tools/test-npm-package --install --logfile=test-npm.tap deps/npm test-node
test-npm-publish: $(NODE_EXE)
......@@ -499,13 +505,14 @@ test-with-async-hooks:
ifneq ("","$(wildcard deps/v8/tools/run-tests.py)")
test-v8: v8
test-v8: v8 ## Runs the V8 test suite on deps/v8.
# note: performs full test unless QUICKCHECK is specified
deps/v8/tools/run-tests.py --arch=$(V8_ARCH) \
--mode=$(BUILDTYPE_LOWER) $(V8_TEST_OPTIONS) $(QUICKCHECK_ARG) \
--no-presubmit \
--shell-dir=$(PWD)/deps/v8/out/$(V8_ARCH).$(BUILDTYPE_LOWER) \
$(TAP_V8)
git clean -fdxq -- deps/v8
@echo Testing hash seed
$(MAKE) test-hash-seed
......@@ -536,47 +543,68 @@ endif
# generated .html files
DOCS_ANALYTICS ?=
apidoc_dirs = out/doc out/doc/api out/doc/api/assets
apidoc_sources = $(wildcard doc/api/*.md)
apidocs_html = $(apidoc_dirs) $(apiassets) $(addprefix out/,$(apidoc_sources:.md=.html))
apidocs_json = $(apidoc_dirs) $(apiassets) $(addprefix out/,$(apidoc_sources:.md=.json))
apidoc_dirs = out/doc out/doc/api/ out/doc/api/assets
apidocs_html = $(addprefix out/,$(apidoc_sources:.md=.html))
apidocs_json = $(addprefix out/,$(apidoc_sources:.md=.json))
apiassets = $(subst api_assets,api/assets,$(addprefix out/,$(wildcard doc/api_assets/*)))
doc-only: $(apidocs_html) $(apidocs_json)
# This uses the locally built node if available, otherwise uses the global node
doc-only: $(apidoc_dirs) $(apiassets)
# If it's a source tarball, assets are already in doc/api/assets,
# no need to install anything, we have already copied the docs over
if [ ! -d doc/api/assets ]; then \
$(MAKE) tools/doc/node_modules/js-yaml/package.json; \
fi;
@$(MAKE) -s $(apidocs_html) $(apidocs_json)
doc: $(NODE_EXE) doc-only
$(apidoc_dirs):
@mkdir -p $@
out/doc:
mkdir -p $@
# If it's a source tarball, doc/api already contains the generated docs.
# Just copy everything under doc/api over.
out/doc/api: doc/api
mkdir -p $@
cp -r doc/api out/doc
# If it's a source tarball, assets are already in doc/api/assets
out/doc/api/assets:
mkdir -p $@
if [ -d doc/api/assets ]; then cp -r doc/api/assets out/doc/api; fi;
# If it's not a source tarball, we need to copy assets from doc/api_assets
out/doc/api/assets/%: doc/api_assets/% out/doc/api/assets
@cp $< $@
out/doc/%: doc/%
@cp -r $< $@
# Use -e to double check in case it's a broken link
# Use $(PWD) so we can cd to anywhere before calling this
available-node = \
if [ -x $(PWD)/$(NODE) ] && [ -e $(PWD)/$(NODE) ]; then \
$(PWD)/$(NODE) $(1); \
elif [ -x `which node` ] && [ -e `which node` ]; then \
`which node` $(1); \
else \
echo "No available node, cannot run \"node $(1)\""; \
exit 1; \
fi;
run-npm-install = $(PWD)/$(NPM) install --production
tools/doc/node_modules/js-yaml/package.json:
cd tools/doc && $(call available-node,$(run-npm-install))
# check if ./node is actually set, else use user pre-installed binary
gen-json = tools/doc/generate.js --format=json $< > $@
gen-html = tools/doc/generate.js --node-version=$(FULLVERSION) --format=html \
--template=doc/template.html --analytics=$(DOCS_ANALYTICS) $< > $@
gen-doc = \
[ -e tools/doc/node_modules/js-yaml/package.json ] || \
[ -e tools/eslint/node_modules/js-yaml/package.json ] || \
if [ -x $(NODE) ]; then \
cd tools/doc && ../../$(NODE) ../../$(NPM) install; \
else \
cd tools/doc && node ../../$(NPM) install; \
fi;\
[ -x $(NODE) ] && $(NODE) $(1) || node $(1)
out/doc/api/%.json: doc/api/%.md
@$(call gen-doc, $(gen-json))
$(call available-node, $(gen-json))
# check if ./node is actually set, else use user pre-installed binary
out/doc/api/%.html: doc/api/%.md
@$(call gen-doc, $(gen-html))
$(call available-node, $(gen-html))
docopen: $(apidocs_html)
@$(PYTHON) -mwebbrowser file://$(PWD)/out/doc/api/all.html
......@@ -843,7 +871,7 @@ ifeq ($(XZ), 0)
endif
$(RM) $(TARNAME).tar
tar: $(TARBALL)
tar: $(TARBALL) ## Create a source tarball.
tar-upload: tar
ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
......@@ -879,7 +907,7 @@ ifeq ($(XZ), 0)
endif
$(RM) $(TARNAME)-headers.tar
tar-headers: $(TARBALL)-headers
tar-headers: $(TARBALL)-headers ## Build the node header tarball.
tar-headers-upload: tar-headers
ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
......@@ -916,7 +944,7 @@ ifeq ($(XZ), 0)
endif
$(RM) $(BINARYNAME).tar
binary: $(BINARYTAR)
binary: $(BINARYTAR) ## Build release binary tarballs.
binary-upload: binary
ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
......@@ -967,7 +995,7 @@ bench-dgram: all
bench-all: bench bench-misc bench-array bench-buffer bench-url bench-events bench-dgram bench-util
bench: bench-net bench-http bench-fs bench-tls
bench: bench-net bench-http bench-fs bench-tls ## Run node benchmarks.
bench-ci: bench
......@@ -1015,6 +1043,13 @@ LINT_JS_CMD = tools/eslint/bin/eslint.js --cache \
--rulesdir=tools/eslint-rules --ext=.js,.mjs,.md \
$(LINT_JS_TARGETS)
lint-js-fix:
@if [ -x $(NODE) ]; then \
$(NODE) $(LINT_JS_CMD) --fix; \
else \
node $(LINT_JS_CMD) --fix; \
fi
lint-js:
@echo "Running JS linter..."
@if [ -x $(NODE) ]; then \
......@@ -1086,7 +1121,7 @@ cpplint: lint-cpp
@echo "Please use lint-cpp instead of cpplint"
ifneq ("","$(wildcard tools/eslint/)")
lint:
lint: ## Run JS, C++, MD and doc linters.
@EXIT_STATUS=0 ; \
$(MAKE) lint-js || EXIT_STATUS=$$? ; \
$(MAKE) lint-cpp || EXIT_STATUS=$$? ; \
......@@ -1152,6 +1187,7 @@ lint-clean:
docclean \
docopen \
dynamiclib \
help \
install \
install-bin \
install-includes \
......@@ -1161,6 +1197,7 @@ lint-clean:
lint-cpp \
lint-js \
lint-js-ci \
lint-js-fix \
list-gtests \
lint-md \
lint-md-build \
......
......@@ -19,13 +19,10 @@ policies, and releases are managed under an
**This project is bound by a [Code of Conduct][].**
If you need help using or installing Node.js, please use the
[nodejs/help](https://github.com/nodejs/help) issue tracker.
# Table of Contents
* [Resources for Newcomers](#resources-for-newcomers)
* [Support](#support)
* [Release Types](#release-types)
* [Download](#download)
* [Current and LTS Releases](#current-and-lts-releases)
......@@ -33,38 +30,43 @@ If you need help using or installing Node.js, please use the
* [API Documentation](#api-documentation)
* [Verifying Binaries](#verifying-binaries)
* [Building Node.js](#building-nodejs)
* [Security](#security)
* [Current Project Team Members](#current-project-team-members)
* [TSC (Technical Steering Committee)](#tsc-technical-steering-committee)
* [Collaborators](#collaborators)
* [Release Team](#release-team)
* [Security](#security)
* [Current Project Team Members](#current-project-team-members)
* [TSC (Technical Steering Committee)](#tsc-technical-steering-committee)
* [Collaborators](#collaborators)
* [Release Team](#release-team)
* [Contributing to Node.js](#contributing-to-nodejs)
## Support
## Resources for Newcomers
Node.js contributors have limited availability to address general support
questions. Please make sure you are using a [currently-supported version of
Node.js](https://github.com/nodejs/Release#release-schedule).
### Official Resources
When looking for support, please first search for your question in these venues:
* [Website][]
* [Node.js Website][]
* [Node.js Help][]
* [Contributing to the project][]
* IRC (node core development): [#node-dev on chat.freenode.net][]
* [Open or closed issues in the Node.js GitHub organization](https://github.com/issues?utf8=%E2%9C%93&q=sort%3Aupdated-desc+org%3Anodejs+is%3Aissue)
* [Questions tagged 'node.js' on StackOverflow][]
### Unofficial Resources
If you didn't find an answer in one of the venues above, you can:
* IRC (general questions): [#node.js on chat.freenode.net][]. Please see
<http://nodeirc.info/> for more information regarding the `#node.js` IRC
channel.
* Join the **unofficial** [#node.js channel on chat.freenode.net][]. See
<http://nodeirc.info/> for more information.
_Please note that unofficial resources are neither managed by (nor necessarily
endorsed by) the Node.js TSC. Specifically, such resources are not
currently covered by the [Node.js Moderation Policy][] and the selection and
actions of resource operators/moderators are not subject to TSC oversight._
GitHub issues are meant for tracking enhancements and bugs, not general support.
Remember, libre != gratis; the open source license grants you the freedom to use
and modify, but not commitments of other people's time. Please be respectful,
and set your expectations accordingly.
## Release Types
The Node.js project maintains multiple types of releases:
* **Current**: Released from active development branches of this repository,
versioned by [SemVer](http://semver.org/) and signed by a member of the
versioned by [SemVer](https://semver.org) and signed by a member of the
[Release Team](#release-team).
Code for Current releases is organized in this repository by major version
number. For example: [v4.x](https://github.com/nodejs/node/tree/v4.x).
......@@ -88,7 +90,7 @@ The Node.js project maintains multiple types of releases:
More information can be found in the [LTS README](https://github.com/nodejs/LTS/).
## Download
### Download
Binaries, installers, and source tarballs are available at
<https://nodejs.org>.
......@@ -114,11 +116,11 @@ documentation of the latest stable version.
### Verifying Binaries
Current, LTS and Nightly download directories all contain a _SHASUMS256.txt_