Körtidsmiljön Node.js blir alltmer populär bland team som behöver bygga dynamiska webbprogram på serversidan. Node.js underhålls för närvarande av OpenJS Foundation, har nästan 2 500 bidragsgivare och är det snabbast växande öppen källkodsprojektet, med mer än 1 miljard nedladdningar hittills.
Sedan Node.js släpptes 2009 använder många stora organisationer nu Node.js för att bygga företagsapplikationer och förbättra applikationernas prestanda. En av dem är PayPal, som minskade svarstiderna för sin sida med cirka 35 % när de använde Node.js. Andra användare av Node.js är IBM, NASA, Uber, Netflix och till och med Microsoft.
Och även om Node.js håller på att bli det föredragna utvecklingsspråket för webbservern bör användarna vara medvetna om att det finns Node.js licens- och säkerhetsaspekter.
Vad är Node.js licensiering?
Node.js använder en tillåtande MIT-licens för huvudbiblioteket. MIT-licensen gäller alla delar av Node.js-modulen som inte underhålls externt.
Det finns ytterligare licenser som gäller för de återstående biblioteken från tredje part, bland annat Zero Clause BSD-licensen och ISC-licensen där den fullständiga licensfilen finns tillgänglig här.
Dessa licenser tillåter vem som helst att använda, modifiera och distribuera programvaran när som helst, med endast krav på tillskrivning samtidigt som bidragsgivarna ersätts. Jämfört med GNU GPL kräver MIT-licensen inte att utvecklare gör sin egen källkod tillgänglig när de distribuerar sin programvara vidare.
Vilka licens- och säkerhetsrisker finns det för Node.js?
Node.js använder sig av en pakethanterare (npm) som har mer än 1 000 000 paket tillgängliga. Utvecklargemenskapen för Node.js är en av de mest produktiva och 2019 hade npm-plattformen vuxit med 250 procent. En av utmaningarna för utvecklare med Node.js-säkerhet är att se till att alla paket och alla länkade beroenden som används i produktionen får regelbundna uppdateringar och patchar.
Utvecklare måste granska alla paketberoenden ofta för att hitta nyupptäckta sårbarheter. När de bygger nya funktioner måste utvecklarna se till att de använder säkra paket och lappar alla kända sårbarheter innan de släpper sin kod.
Hur mycket av Node.js-licensen är öppen källkod?
Företagen älskar Node.js-licensmodellen eftersom den gör det möjligt för dem att gaffla kodbasen, bygga sina egna server-side snippets och bara uppdatera sina länkade paket när det behövs. Permissiva licenser ger teamen möjlighet att göra sin kodbas proprietär i framtiden, i motsats till copyleft-principen i GNU GPL.
I fråga om licensiering måste utvecklare veta vilka programvarulicenser som deras paket använder, eftersom det finns gott om GPL-paket som finns tillgängliga på npm. I vissa fall kommer utvecklare att tillhandahålla samma paket under en kommersiell licens, vilket skulle förhindra att ömsesidighetsklausulen i GPLv3 utlöses.
Vad är fördelarna med Node.js licensmodell?
Debatterna om tillåtande kontra copyleft-licensiering kommer att fortsätta, men Node.js verkar bevisa att kommersiella intressen inte behöver hindra samarbete. För team som arbetar i högt hemliga miljöer (som NASA) har Node.js och npm-ekosystemet visat sig vara en värdefull resurs. Med en modell som gör det möjligt för enskilda team att bestämma om all deras källkod ska vara tillgänglig eller inte, ger Node.js användarna maximal frihet.
Det finns även följande utvecklingsfördelar med Node.js:
- Erbjuder en lösning för serverbaserad JavaScript-programmering
- Förblir mycket skalbar i både horisontell och vertikal riktning
- Gör att utvecklare har ett enda programmeringsspråk för front- och backend-applikationer
- Ökar applikationsprestandan med icke-blockerande I/O-operationer
- Stöd från branschledare med representanter på Node.js Foundation
Kan man använda Node.js licensierade paket i kommersiell programvara?
När ett team väl har laddat ner och modifierat Node.js har de friheten att när som helst upphovsrättsskydda sin version av programvaran och tillämpa en mer restriktiv licens på sitt eget arbete.
Majoriteten av Node.js-projekt förblir öppen källkod och företag använder den för ramverk, bibliotek och verktyg. För alla team som använder npm-sourcade paket måste det inte finnas några ömsesidiga licenser i någon av modulerna (om det inte är avsett). Alla länkade paket och moduler ska omfattas av MIT-licensen eller någon av licenserna i BSD-stil, inklusive ISC-licensen.
Hur använder man en Node.js-licens?
Alla komponenter som byggs på Node.js-biblioteket kan använda vilken som helst av de tillgängliga programvarulicenserna vid distribution. Bidragsgivare föredrar att använda tillåtande licenser eftersom det ger efterföljande användare friheten att fatta egna beslut om sin programvara i framtiden. När teamet börjar förlita sig på andra paket måste de se till att deras arbete överensstämmer med eventuella andra begränsningar som impliceras i dessa moduler.
I npm finns det ett specifikt kommando för att lägga till licenstext i alla projektfiler. Utvecklare kan ange licensnamnet och författarens namn, med en fullständig lista över kompatibla licenser tillgänglig här.
Hur hanterar Node.js säkerhetsrisker i paket?
När en utvecklare eller ett säkerhetsteam upptäcker en ny sårbarhet släpper Node.js en version med en säkerhetsuppdatering. I vissa fall kommer det att krävas en manuell patch. Utvecklare måste granska sina pakets sårbarheter ofta med hjälp av kommandot audit, som kommer att ge en rekommenderad korrigering av säkerhetsbristen.
Underhåll dina beroenden i kodbasen med Snyk
Alla projekt som körs i produktion bör vara föremål för regelbunden sårbarhets- och licensgranskning för alla beroenden.
Snyk hjälper team att skanna alla beroenden och se till att de kan hantera licensöverensstämmelse i hela projektet. För Node.js-utvecklingsteam kan en tydlig övervakning av alla paket och säkerställande av att licenserna följs under varje skede av projektet bidra till att förhindra att större problem smyger sig in i kodbasen.
För att se hur Snyk kan hjälpa ditt team att hantera licensöverensstämmelse – boka en demo idag.