Warum es endlich Zeit für Entwickler ist, das Chaos von Node.js und NPM anzugehen

Dies sind die heißesten Programmiersprachen von 2018 Swift und JavaScript wachsen schneller als ihre Konkurrenten, sagt Nick Heath von TechRepublic.

Node.js ist eine einzigartig seltsame Plattform. Insbesondere gibt es ein wirklich gutes Beispiel dafür, "wer möglicherweise dachte, dass dies eine gute Idee ist", auf das man leicht hinweisen kann, weil das Chaos, das es umgab, ausbrach.

Im Jahr 2016 forderte der Messaging-Dienst Kik (think LINE, außer Canadian) den Entwickler Azer Koçulu, der ein nicht verwandtes Paket mit demselben Namen hatte, auf, den Namen seines Pakets im NPM-Paketmanager zu ändern. Nach der Ablehnung kontaktierten Anwälte, die Kik vertraten, den NPM-CEO Issac Schlueter, der Kik das Eigentum an dem Paket übertrug. Koçulu veröffentlichte aus Protest alle seine Module von NPM, darunter das "Left-Pad" -Paket, und brach alles im Einsatz, was vom Paket abhing.

Das Left-Pad-Paket wurde unter anderem von Node und Babel verwendet. Laut ZDNet wurde es in der Woche vor dem Vorfall 575.000 Mal heruntergeladen. Der Fallout war schlimm genug, dass NPM das Paket nicht veröffentlicht hatte, um die Situation zu beheben. Was macht dieses Paket mit einem Namen wie "left-pad" für einen eindeutig kritischen Vorgang, bei dem dieses Paket importiert werden muss?

Es ist das:

 module.exports = leftpad; Funktion leftpad (str, len, ch) {str = String (str); var i = -1; if (! ch && ch! == 0) ch = ''; len = len - str.length; while (++ i <len) {str = ch + str; } return str; }} 

Es polstert. Links. Wie der Name andeutet. Es wäre beunruhigend, wenn es etwas anderes tun würde.

Denken Sie jetzt über diese Situation nach. Das Problem bei der Benennung von Paketen ist ein Zusammenfluss des gewaltsamen Einsatzes von Anwälten und eine schnelle Reaktion darauf, dass ein Programmierer den Teppich unter sich herausgezogen hat. Sie sollten Ihre eigenen Schlussfolgerungen über die Angemessenheit der Einbeziehung von Anwälten in diese Situation und die Angemessenheit der Reaktion von Koçulu ziehen. Sie sollten auch Ihre eigenen Schlussfolgerungen zum Design eines Paketmanagers ziehen, mit dem ein weit verbreitetes Paket ohne Verzögerung global unveröffentlicht werden kann, wodurch Produktionssysteme beschädigt werden.

Das ist nicht das Hauptproblem.

Das Problem ist, dass so viele Dinge durch ein Paket kaputt gehen könnten, das die Pads verlassen hat . Wer braucht dieses Paket? Warum würden Sie eine Abhängigkeit für etwas so Offensichtliches schaffen?

NPM ist genau so mit Paketen übersät. JavaScript verfügt nicht über eine Standardbibliothek, sodass die Programmierer von Node.j bei jedem Start eines neuen Projekts entweder grundlegende Funktionen zur Zeichenfolgenbehandlung schreiben oder jedes Mal einzelne Pakete importieren können, wenn sie auf etwas stoßen, das in der richtigen Reihenfolge ausgeführt werden muss um das eigentliche Ziel des Programms zu erreichen.

Mehr über Open Source

  • 8 der schlimmsten Open Source-Innovationen des Jahrzehnts
  • Open Source im Jahr 2020: Die Zukunft sieht rosig aus
  • Linus Torvalds: "Git hat bewiesen, dass ich mehr als ein One-Hit-Wunder sein kann."
  • 20 schnelle Tipps zur Vereinfachung der Linux-Vernetzung (kostenloses PDF)

NPM ermöglicht dieses Verhalten, indem Pakete wie das linke Pad für den Import trivial gemacht werden. Unter anderen Umständen würden viele Programmierer wahrscheinlich nur etwas von Stack Overflow oder ähnlichen Websites kopieren. Die Qualität dieses Codes und die Anwendbarkeit dieses Codes auf den beabsichtigten Anwendungsfall sind wahrscheinlich verdächtig. NPM erstellt aufgrund seiner Mängel eine Besitzkette für den importierten Code, nicht nur ein Patchwork aus Snippets, die auf Message Boards gefunden werden.

Das frühere Problem der plötzlichen Veröffentlichung von Paketen, das in NPM trotz des Vorfalls auf der linken Seite immer noch möglich ist, macht die Aussicht, selbst mäßige Mengen importierter Pakete zu haben, unattraktiv. Der Mangel an wirklicher Sicherheit in NPM macht die Häufigkeit des Imports von Paketen für triviale Dinge zu einem Problem, wie David Gilbertson in diesem Aufsatz vom Januar über das Einfügen von Code und das Leben "in einer Zeit feststellte, in der Menschen npm-Pakete installieren, als würden sie Schmerzmittel platzen lassen. ""

Mit einer Kombination dieses historischen Problems mit "Mikropaketen" und angemessener Vorsicht in Bezug auf die Sicherheit ist der Geist des Internet-Hives auf einen produktiven Programmierer gestoßen: Jon Schlinkert. Schlinkert entwirft "ein Lieferkettensystem, das darauf ausgerichtet ist, den Handel in verarmte Regionen zu bringen". Er hat auch 821 Repositories auf GitHub und nutzt anscheinend jeden einzelnen von ihnen voll aus.

Schlinkert ist verantwortlich für das is-odd-Paket, das in der letzten Woche etwas mehr als 2, 8 Millionen Installationen hatte. Er hat Dutzende von Paketen geschrieben, die unter die breite Kategorie der Typprüfungspakete fallen. Das ungerade Paket wird wegen einer Kette von Abhängigkeiten kritisiert, die es mit Nanomatch und Micromatch verbinden. Letzteres ist eine Abhängigkeit von über 300 Paketen, einschließlich Browsersynchronisation und Webpack.

Schlinkert seinerseits besteht darauf, dass "das NPM-Ökosystem die Kreativität fördert", die Verbreitung von Paketen zur Typprüfung jedoch ein JavaScript-Problem darstellt - was angesichts des Fehlens einer Standardbibliothek keine falsche Schlussfolgerung ist. Für Schlinkerts eigene Verbreitung von Paketen stellte er in einem Anruf bei TechRepublic fest, dass viele davon mit einer von ihm entworfenen Projektgeneratorbibliothek zusammenhängen und dass die Veröffentlichung der Module 15 Minuten dauert. Er organisiert die Module auf diese Weise, um Unit-Tests durchzuführen.

Das ist vernünftig. Letztendlich arbeitet Schlinkert in einem Ökosystem mit erheblichen strukturellen Problemen. Jemanden dafür persönlich anzugreifen ist nicht gerechtfertigt. Das heißt, NPM muss sich mit den strukturellen Problemen befassen, die die Produktion mehrerer überlappender Typprüfer in ihrem Paketmanager ermöglichen - wenn nicht sogar direkt fördern.

Update: NPM hat die Richtlinien zur Aufhebung der Veröffentlichung als Reaktion auf den Vorfall auf der linken Seite geändert. Das Aufheben der Veröffentlichung ist zwar weiterhin möglich, kann jedoch nur durchgeführt werden, wenn das Paket weniger als 24 Stunden alt ist.

Open Source Wöchentlicher Newsletter

Sie möchten unsere Tipps, Tutorials und Kommentare zum Linux-Betriebssystem und zu Open Source-Anwendungen nicht verpassen. Dienstags geliefert

Heute anmelden

Siehe auch

  • So bauen Sie eine erfolgreiche Entwicklerkarriere auf (kostenloses PDF) (TechRepublic)
  • Eine Reihe kritischer Fehler in NPM zerstören Serverkonfigurationen (TechRepublic)
  • GitHub: Unser Abhängigkeitsscan hat vier Millionen Sicherheitslücken in öffentlichen Repos (ZDNet) gefunden.
  • GitHub: Der Leitfaden für intelligente Personen (TechRepublic)
  • Die meisten IT-Experten befürchten IoT-Cyber-Angriffe. Nur wenige tun etwas dagegen. (ZDNet)
  • JavaScript-Bedrohung: Veraltete Bibliotheken stellen ein Sicherheitsrisiko dar (ZDNet)
  • Chaos Engineering: Ein Spickzettel (TechRepublic)
Bild: iStockphoto / wine5020

© Copyright 2021 | mobilegn.com