← Ultimi articoli
💻 informatica

Dormant at the core: Inactivity, dependence and exit among the most downloaded npm packages

Questo studio rivela che la dormienza è diffusa e ampiamente silenziosa tra i pacchetti npm più scaricati, con la deprecazione esplicita da parte dei manutentori che rappresenta il segnale primario che spinge i progetti dipendenti a rimuovere queste dipendenze inattive, nonostante il fatto che pochi pacchetti dormienti presentino vulnerabilità note.

Autore originale: Revanth Krishna Maddula

Pubblicato 2026-11-05
📖 6 min di lettura🧠 Approfondimento

Autore originale: Revanth Krishna Maddula

Articolo originale sotto licenza CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). ✨ Questa è una spiegazione generata dall'IA dell'articolo qui sotto. Non è stata scritta né approvata dall'autore. Per precisione tecnica, consulta l'articolo originale. Leggi il disclaimer completo

Il software moderno viene raramente costruito da zero. Al contrario, viene assemblato come una massiccia struttura composta da parti prefabbricate, dove ogni parte è un piccolo pezzo di codice scritto da qualcun altro. Nel mondo di JavaScript, il sistema che tiene insieme queste parti si chiama npm, un magazzino digitale dove gli sviluppatori scaricano questi pacchetti di codice per costruire di tutto, dai siti web alle applicazioni mobili. La maggior parte di queste parti è mantenuta da volontari che ci lavorano nel proprio tempo libero. Quando un volontario smette di lavorare su una parte, quel pezzo di codice diventa dormiente. Non si rompe immediatamente, ma smette di ricevere aggiornamenti, correzioni di bug o patch di sicurezza. Ciò crea un rischio nascosto: se una parte ampiamente utilizzata smette di essere aggiornata, i migliaia di progetti che si affidano ad essa rimangono con un componente che non può essere riparato se qualcosa va storto. La domanda non è solo se queste parti smettano di essere aggiornate, ma quanti di esse siano effettivamente dormienti, quante persone le stiano usando e se le persone che le usano sappiano di dover smettere di usarle.

Un ricercatore di nome Revanth Krishna Maddula si è proposto di esaminare le parti più popolari in questo sistema. Ha analizzato quasi sedicimila pacchetti che vengono scaricati almeno un milione di volte ogni settimana. Questi sono i componenti centrali dell'ecosistema JavaScript, le parti che hanno il peso maggiore. Studiando la storia completa di questi pacchetti fino a ottobre 2026, voleva vedere quanti avessero smesso di rilasciare nuove versioni, quante persone li stessero ancora usando e come il sistema reagisse quando una parte diventava silenziosa. Lo studio si è concentrato su una definizione specifica di dormienza: un pacchetto che non avesse pubblicato una versione stabile e definitiva negli ultimi due anni. Questo intervallo di tempo è stato scelto per distinguere tra le parti che sono semplicemente finite e quelle che sono state abbandonate.

I risultati rivelano che la dormienza è molto più comune di quanto molti potrebbero aspettarsi. Alla fine del periodo di studio, quasi il trentacinque percento di questi pacchetti principali non aveva rilasciato una nuova versione negli ultimi due anni. Questo silenzio non era limitato a strumenti oscuri o raramente utilizzati; raggiungeva il cuore stesso del sistema. Tra i cento pacchetti più scaricati, il ventisei percento era dormiente. In effetti, alcuni di questi pacchetti silenziosi non venivano aggiornati da più di otto anni. Nonostante questa diffusa inattività, il silenzio era quasi sempre indisturbato. Quando il ricercatore ha controllato le note pubbliche allegate a questi pacchetti, note conosciute come file README, ha scoperto che solo circa il tre percento dei pacchetti dormienti dichiarava esplicitamente di non essere più mantenuto. La maggior parte delle volte, il codice smetteva semplicemente di cambiare, lasciando gli utenti a indovinare se il progetto fosse terminato o dimenticato.

Il pericolo di questo silenzio è che le parti attive del sistema sono profondamente connesse a quelle dormienti. Lo studio ha mappato le relazioni tra i pacchetti e ha scoperto che più di un quarto dei pacchetti attivamente mantenuti dipendeva direttamente da almeno un pacchetto dormiente. Alcuni di questi pacchetti silenziosi erano così centrali da essere raggiungibili attraverso catene di dipendenze da oltre mille altri pacchetti ad alto traffico. Molti di questi erano piccoli strumenti semplici che potevano essere stati completati anni fa, ma altri erano moduli sostanziali che formavano la base per gran parte degli strumenti software. Il problema è che gli utenti non possono distinguere facilmente tra uno strumento che è finito e uno che è stato abbandonato, perché il sistema non offre un segnale chiaro per distinguere i due.

Quando una dipendenza diventa dormiente, le persone che la utilizzano non di solito reagiscono rapidamente. Lo studio ha monitorato quanto tempo impiegassero gli utenti a rimuovere una dipendenza da un pacchetto che aveva smesso di aggiornarsi. In un periodo di due anni, gli utenti hanno rimosso solo circa il ventisette percento delle loro dipendenze da pacchetti dormienti. Questo tasso era solo leggermente superiore al tasso con cui rimuovevano le dipendenze da pacchetti attivi, suggerendo che il solo fatto che un pacchetto avesse smesso di aggiornarsi non fosse sufficiente a stimolare un'azione. I ricercatori hanno testato se diversi tipi di avvisi cambiassero questo comportamento. Hanno scoperto che una nota nella documentazione del progetto non aveva alcun effetto rilevabile sulla rimozione del pacchetto da parte degli utenti. L'unico segnale che causava affidabilmente l'azione degli utenti era un avviso ufficiale di deprecazione emesso dal registro stesso. Quando un pacchetto dormiente veniva formalmente contrassegnato come deprecato dal sistema, gli utenti rimuovevano le dipendenze da esso con un tasso del sessantacinque percento. Questo avviso ufficiale, che appare agli sviluppatori quando installano il software, era l'unico meccanismo che riusciva con successo a spingere l'ecosistema ad allontanarsi dal codice silenzioso.

C'è anche una dimensione di sicurezza. Sebbene la maggior parte dei pacchetti dormienti non presentasse vulnerabilità di sicurezza note nelle loro ultime versioni, quelli che le avevano si trovavano in una posizione precaria. Lo studio ha scoperto che un piccolo numero di pacchetti dormienti conteneva vulnerabilità note che non potevano più essere corrette dai loro manutentori originali. Poiché il codice non veniva più aggiornato, queste falle non potevano essere riparate dall'alto. Gli utenti che si affidavano a questi pacchetti dovevano rimuoverli, sostituirli con strumenti diversi o correggere essi stessi le falle di sicurezza. Questa situazione evidenzia una lacuna critica nel sistema: quando una parte ampiamente utilizzata smette di essere mantenuta, la responsabilità della sua sicurezza passa interamente alle persone che la utilizzano, spesso senza la loro conoscenza.

Lo studio conclude che la dormienza è uno stato normale e silenzioso per una grande parte dell'ecosistema del software. Non è necessariamente un difetto se un piccolo strumento è terminato, ma la mancanza di comunicazione rende impossibile per gli utenti distinguere la differenza. La ricerca suggerisce che l'attuale sistema si affida troppo agli utenti che devono indovinare lo stato dei propri strumenti. Il modo più efficace per gestire questo rischio è che i manutentori utilizzino il meccanismo ufficiale di deprecazione quando smettono di lavorare su un pacchetto, idealmente indicando agli utenti un sostituto. Affinché l'ecosistema rimanga sano, il registro deve rendere la dormienza e la deprecazione più visibili, assicurando che il segnale raggiunga gli sviluppatori che hanno bisogno di vederlo prima che un pacchetto silenzioso diventi un problema.

Sommerso dagli articoli nel tuo campo?

Ricevi digest giornalieri degli articoli più recenti corrispondenti alle tue parole chiave di ricerca — con riassunti tecnici, nella tua lingua.

Prova Digest →