The Node.js runtime environment is becoming more popular with teams that need to build dynamic, server-side web applications. Currently maintained by the OpenJS Foundation, Node.js has almost 2,500 contributors and is the fastest growing open-source project, with more than 1 billion downloads to date.
Since its release in 2009, many major organizations now use Node.js to build enterprise applications and improve application performance. One of them is PayPal, which reduced response times for their page by about 35% when they deployed Node.js. Other users of Node.js include IBM, NASA, Uber, Netflix, and even Microsoft.
Node.js uses a permissive MIT license for the main library. The MIT license applies to all parts of the Node.js module not externally maintained.
Additional licenses that apply to the remaining third-party libraries include the Zero Clause BSD license and ISC license with the complete license file available here.
These licenses allow anyone to use, modify, and redistribute the software at any time, with only attribution required while indemnifying the contributors. Compared to the GNU GPL, the MIT license doesn’t require developers to make their own source code available when redistributing their software.
What are the Node.js licensing and security risks?
Node.js uses a package manager (npm) which has more than 1,000,000 packages available. The developer community for Node.js is one of the most productive and by 2019, the npm platform had grown by 250%. One of the challenges for developers with Node.js security is ensuring that any package and all linked dependencies used in production receives regular updates and patches.
Developers have to audit all package dependencies frequently to find any newly discovered vulnerabilities. When building new features, developers need to ensure they use secure packages and patch any known vulnerabilities before releasing their code.
Enterprises love the Node.js license model as it allows them to fork the codebase, build their own server-side snippets, and only update their linked packages when required. Permissive licenses give teams the option to make their codebase proprietary in the future, as opposed to the copyleft principle of the GNU GPL.
In licensing terms, developers must know which software licenses their packages use because there are plenty of GPLed packages available on npm. In some instances, developers will provide the same package under a commercial license, which would prevent triggering the reciprocity clause in GPLv3.
What are the benefits of the Node.js license model?
Permissive versus copyleft licensing debates will continue, but Node.js seems to prove commercial interests don’t have to impede collaboration. For teams that work in highly classified environments (like NASA), Node.js and the npm ecosystem has proven to be a valuable resource. With a model that allows individual teams to decide whether all of their source code should be available or not, Node.js gives the maximum freedom to users.
Can you use Node.js licensed packages in commercial software?
Once a team downloads and modifies Node.js, they have the freedom to copyright their version of the software at any time and apply a more restrictive license on their own work.
The majority of Node.js projects remain open source and enterprises use it for frameworks, libraries, and tools. For any teams using npm-sourced packages, there must be zero reciprocal licenses contained within any of the modules (unless intended). Every linked package and module should fall under the MIT license or any of the BSD-style licenses, including the ISC license.
How do you use a Node.js license?
Any component built on the Node.js library can use any of the available software licenses upon distribution. Contributors prefer to use permissive licenses as it gives subsequent users the freedom to make their own decisions about their software in the future. Once the team starts relying on other packages, they’ll need to ensure their work complies with any other restrictions implied in those modules.
In npm, there is a specific command to add license text to all project files. Developers can specify the license name and the author’s name, with a complete list of compatible licenses available here.
How does Node.js address security risks in packages?
Whenever a developer or security team discovers a new vulnerability, Node.js will release a version with a security update. In some cases, a manual patch will be required. Developers need to review their package vulnerabilities frequently using the audit command, which will provide a recommended fix for the security flaw.