Plutselig forsvant npm-pakka, og prosjektene feila: «Urovekkende»
– Dette bør trigge diskusjon om hvordan vi håndterer eldre avhengigheter, mener Kristoffer Eckhoff, som ble ramma da Stylus forsvant.
– Jeg oppdaga det en tidlig morgen, forteller utvikler og konsulent Kristoffer Eckhoff i Aceno til kode24.
Han skulle i forrige uke bygge et prosjekt, men «npm install» feila på ei pakke: CSS-preprocessor-en Stylus.
– Feilmeldingen var en 404, så jeg sjekka direkte mot npm, og skjønte at pakka var fjerna for alle, sier Eckhoff.
– Kort tid etter feila også «npm install» i et nyere prosjekt som hadde Stylus som en indirekte avhengighet, så problemet spredte seg raskt.
Eckhoff og kollegene hans var langt fra alene om å oppleve problemer; med rundt 2,6 millioner ukentlige nedlastinger, er Stylus gammel, men fortsatt tilstede i mange prosjekter, og alle opplevde det samme da pakka plutselig forsvant.
Spørsmålet er hvordan dette kunne skje, og hva dette bør lære oss om avhengigheter.
Frustrert maintainer
Utvikleren Lei Chen i Shanghai er nå Stylus sin maintainer, og på Github kan man lese hvordan han rev seg i håret da pakka ble sletta og bytta ut med en sikkerhetsadvarsel.
En slik «security holding package» skal beskytte deg når pakker viser seg å inneholde skadelig kode, men i dette tilfellet hevder Chen at dette aldri var tilfellet.
Chen sleit med å få tak i npm for å rette opp det han mente var en feil fra deres side, men fikk til slutt svar:
– Det ser ut til at en maintainer assosiert med Stylus-pakka publiserte skadelige pakker, som resulterte i at kontoen ble stengt, og tilknytta pakker ble fjerna, skriver npm i en epost han har delt i et Github-issue.
npm hverken beklager eller innrømmer at det å fjerne Stylus var en feilvurdering, men skriver at de skal få den tilbake. Dermed ble også Stylus etterhvert gjenoppretta, rundt et døgn senere.
Det skapte unødvendig frustrasjon og forsinkelser.
Brukte timesvis
Bleeping Computer skriver at mye tyder på at npm har rett i at en tidligere maintainer av Stylus har publisert skadelig kode, men det skal aldri ha vært noe skadelig kode i Stylus, som han ikke lenger har ansvar for.
Og selv om det endte godt, skapte altså bortetida mye nedetid for mange.
– Flere prosjekt ble blokkert i CI/CD fordi Stylus ikke kunne installeres. Vi mista byggekapasiteten i flere timer før vi fant ut at vi kunne legge til Stylus som en optional npm dependency, forteller Eckhoff til kode24.
– Flere utviklere brukte også tid på å feilsøke lokalt, før vi forsto at problemet lå hos npm. Det skapte unødvendig frustrasjon og forsinkelser. Det hjalp heller ikke på effektiviteten at issuen på Stylus ble fullt opp av memes og folk som plutselig hadde mer tid. Gøy, men ikke veldig produktivt.
Bør trigge diskusjon
Stylus-sjefen Lei Chen beklager det som skjedde, men påpeker altså at dette var en feil fra npm sin side, ikke hans. Og han oppfordrer utviklere til å tenke over hvordan de kan bygge prosjektene sine på mer robuste måter, så de ikke feiler når ei npm-pakke plutselig tar kvelden.
Det er Eckhoff enig i.
– Det er både urovekkende og litt absurd at en så etablert pakke kan forsvinne helt uten forvarsel. Heldigvis var ikke pakken ondsinna, men det viser hvor sårbare vi er for endringer hos tredjepartsleverandører og open source-pakker, sier Eckhoff til kode24.
– Dette burde trigge en diskusjon om hvordan vi håndterer eldre avhengigheter, og hvorvidt npm bør ha bedre rutiner for varsling og rollback. Mange tusen timer har gått tapt her.