Dieser Podcast ist eine initiative der Development Community des DOAG e.V.

Library Nightmare - Moderne Package Manager und Open Source - Teil 1

Shownotes

devsontape beschäftigt sich in dieser Folge mit dem Open-Source Ökosystem und den positiven sowie auch negativen Nebeneffekten, die damit einhergehen. Der Fall rund um "color.js" und "faker.js" wurde in den letzten Wochen intensiv diskutiert und wir greifen dieses Thema auf und stellen uns elementare Fragen in Bezug auf unsere eigene Arbeit mit der Verwendung von Open-Source Software. Ist es ethisch vertretbar, kostenlos veröffentlichten Code zu verwenden und dafür selbst die "Lorbeeren einheimsen"? Darf der Entwickler eines Open-Source Packages aktiv Schaden verursachen? Spielt es eine Rolle, wie groß das Unternehmen ist, das meinen Code verwendet?

All diese und viele weitere Fragen werden in dieser Ausgabe unseres Podcasts besprochen.

Zum Nachlesen:

  1. https://www.theregister.com/2022/01/10/npm_fakerjs_colorsjs/
  2. https://blog.sonatype.com/npm-libraries-colors-and-faker-sabotaged-in-protest-by-their-maintainer-what-to-do-now 3.https://github.com/Marak/colors.js/commit/6bc50e79eeaa1d87369bb3e7e608ebed18c5cf26
  3. https://www.usenix.org/system/files/sec19-zimmermann.pdf
  4. https://vercel.com/blog/vercel-welcomes-rich-harris-creator-of-svelte
  5. https://opencollective.com/svelte

devsontape

Kai Donato - kai.donato@mt-ag.com - Twitter: @_KaiDonato Carolin Hagemann - carolin.hagemann@doag.org - Twitter: @CaroHagi

Dieser Podcast genießt die freundliche Unterstützung der Deutschen Oracle Anwender Gruppe (DOAG e.V - https://doag.org)

Transkript anzeigen

00:00:00: Hallo und herzlich willkommen zu einer neuen Ausgabe von Devs on Tape.

00:00:03: Hallo Kai, wie geht's dir?

00:00:05: Ja, mir geht's ganz gut tatsächlich wieder.

00:00:07: Ich freue mich jetzt heute, dass wir tatsächlich schon wieder

00:00:10: an der zweiten Ausgabe von diesem Podcast arbeiten können gemeinsam.

00:00:13: Ja, das war doch eine sehr aufregende Geschichte mit der ersten Folge.

00:00:18: Wie hast du das empfunden im Moment, wo wir auf den Knopf gedrückt haben zum Publischen?

00:00:22: Es war sehr eigenartig, ich hätte mich am liebsten unter der Decke versteckt

00:00:28: Und das Ganze erst mal so laufen lassen.

00:00:31: Ja, es ist doch was anderes als Vorträge auf Konferenzen zu halten und zwar dann irgendwie mit aufgenommen zu werden,

00:00:39: aber so eigenen Content nochmal online zu stellen, ist schon besonders anders.

00:00:46: Man spricht irgendwie zeitgleich mit gar niemandem und man spricht aber auch zeitgleich mit einer beliebigen Größe im Internet.

00:00:53: Ich weiß gar nicht, wie viele Leute man eigentlich erreichen kann mit dem, was man da macht.

00:00:55: Oder mit wie vielen Leuten man tatsächlich erreicht.

00:00:58: Ja, ging mir genauso.

00:01:00: Ich bin da auch super nervös gewesen, weil aufnehmen ist das eine.

00:01:03: Aber in dem Moment, wo man das dann freigibt für andere, dann hat das so ein bisschen

00:01:07: den Stempel, wir finden das toll und möchten das teilen.

00:01:09: Und da sind wir auf die Reaktion von außen natürlich gespannt.

00:01:12: Naja, aber man kann auch erwähnen, dass das positive Feedback, was wir eigentlich weitestgehend

00:01:18: bekommen haben, uns so motiviert hat auf jeden Fall deutlich freudiger.

00:01:22: an die nächste Folge ranzugehen, weil wir heute echt ein spannendes Thema haben. An der Stelle

00:01:26: auch ganz neu in der zweiten Folge von unserem Podcast, unser Opening. Viel Spaß mit dem Thema

00:01:32: heute. A Library Nightmare, moderne Package Manager und Open Source.

00:01:36: Passend zu diesem Intro kann man eigentlich fast sagen, wenn wir ein True Crime Podcast

00:01:55: wären, würden wir jetzt heute die Zuhörer zu irgendeinem dramatischen neuen Fall begrüßen,

00:02:00: was ja eigentlich in so einem Tech Podcast jetzt nicht unbedingt gang und gäbe ist. Aber

00:02:05: tatsächlich möchten wir heute über unter anderem zwei Vorkommnisse sprechen, die in den letzten

00:02:10: Wochen und auch Monaten für enormen Fonds in der Community gesorgt hat. Das ist tatsächlich

00:02:15: richtig an die Öffentlichkeit gegangen, weit auch über die Grenzen hinaus von den Developern,

00:02:21: die viel in so GitHub oder in so Szeneforen unterwegs sind. Das ging tatsächlich auch

00:02:28: über die modernen öffentlichen Medien so rund, weil das doch sehr weitgreifend war.

00:02:33: Wir möchten heute über den Vorfall sprechen, der sich mit dem Entwickler Maraq Squires befasst und dem ColorJS und FakerJS Framework, was da so passiert ist.

00:02:46: Der zweite Teil unseres Podcasts soll auch auf einen historischen Fall zugreifen, und zwar auf das, was in dem NPM Ökosystem in der Vergangenheit passiert ist, unter anderem mit LeftPad und auch aktuellen Fällen wie Log4j, was da so alles passiert ist.

00:03:02: Wir werden jetzt nicht in jedes kleine Detail von diesem konkreten Fall eingehen.

00:03:08: Kann ich jetzt schon mal so vorwegnehmen, glaube ich, weil da gibt es tatsächlich viele Formate,

00:03:12: die sich besser eignen als harte Fakten zu nennen, die man auch in einem Blogpost oder

00:03:17: in irgendeiner Abhandlung erwarten würde.

00:03:19: Wir möchten generell über Themen sprechen, die sich unter anderem um diesen konkreten

00:03:25: Incident am Anfang mit ColorJS beziehen, aber auch um generelle Fragen, die man sich

00:03:30: du als Entwickler oder auch als Betreiber von Lösungen stellen würde. Das geht sehr weit in

00:03:35: dieses Open Source Thema rein. Vorab möchte ich dir, Caro, einfach mal eine Frage stellen,

00:03:40: die sich vielleicht so ein bisschen durch unseren Podcast heute auch durchziehen sollte. Und zwar,

00:03:44: was hältst du eigentlich davon? So ein bisschen so die ethische Vertretbarkeit vielleicht,

00:03:50: dass wir für unseren täglichen Job, mit dem ja auch durchaus Geld verdient wird,

00:03:54: kostenlose Software nutzen, kostenlose Libraries and frameworks, also im Schluss einfach Software,

00:04:02: Code, den niemand anders kostenlos zur Verfügung gestellt hat, dass wir uns damit unsere Arbeit

00:04:07: leichter machen, mit der wir letztendlich oder das Unternehmen auch Geld verdienen. Wie stehst du dazu?

00:04:11: Das ist natürlich eine gute Eingangsfrage. Ja, wie stehe ich dazu? Also ich habe es selbst schon

00:04:19: benutzt. Insofern sehe ich das ja von dem ethischen Aspekt schon so, dass man das durchaus machen kann,

00:04:26: was ich wiederum, um da die andere Seite der Medaille aufzuzeigen, nicht so gut finde,

00:04:34: ist, wenn man beispielsweise sich blind darauf verlässt. Also wenn ich kostenfreie Software

00:04:39: Komponenten einsetze, dann tue ich das in der Regel sehr bewusst und auch sehr sparsam bzw.

00:04:47: einfach bewusst, dass ich mir überlege,

00:04:49: was für ein Framework binde ich ein, was hängt da noch mit dran?

00:04:53: Und ist das okay so?

00:04:55: Und könnte ich das zum Beispiel selbst auch warten,

00:04:57: wenn dann irgendetwas passiert?

00:04:59: Weil man kann ja nie sicher sein, dass dann auch immer alles läuft,

00:05:04: wo wir dann nachher noch drauf zurückkommen werden.

00:05:06: Wobei ich aber dazusagen muss, ich arbeite ja nicht in einem solchen Ökosystem,

00:05:12: wo man quasi drauf angewiesen ist,

00:05:14: diese ganzen Komponenten zu verwenden.

00:05:17: Das ist ja primär im JavaScript-Bereich oder im Java-Bereich.

00:05:21: Da wird ja sehr, sehr viel damit gearbeitet.

00:05:22: Daher habe ich da nicht so die Erfahrungswerte.

00:05:25: Ja, das ist so ein bisschen hin und her, wenn ich da kurz reingreetschen darf.

00:05:31: Das muss man so ein bisschen auf der Goldwaage auch halten.

00:05:34: Ich bin ja aus dem Bereich mit dem JavaScript, dass man das durchaus auch nutzen kann.

00:05:38: Aber wie steht das?

00:05:41: Das Verhältnis zwischen kostenlos die Software nutzen,

00:05:43: dafür aber schneller fertig sein mit der Lösung, die man dem Kunden anbietet? Das

00:05:47: durchaus ein Interesse des Kunden oder des Arbeitgebers ist. Und auf der anderen

00:05:50: Seite, wie sinnvoll ist es, das nachhaltig selber zu schreiben, dass man

00:05:55: weiter verwendet? Da bin ich jetzt ertrocknet, tatsächlich gerade gar keine

00:06:00: richtige Antwort zu. Was sagst du denn? Ja, die Fragen, die wir uns hier

00:06:07: gegenseitig stellen, sind natürlich nicht skriptet. Aber ich kann es ja

00:06:11: ... noch mal ein bisschen von der anderen Seite betrachten.

00:06:14: Also klar, es gibt diese eine Seite, ich ...

00:06:18: ... biete oder ich habe mir eine Vorstellung gemacht ...

00:06:22: ... von dem, was ich gerne erreichen möchte, ...

00:06:23: ... mit dem Code, den ich schreibe oder mit der Software, ...

00:06:24: ... die ich habe.

00:06:25: Ich habe ein Ziel, was ich verfolge und ich überlege, ...

00:06:29: ... welchen Weg kann ich den gehen, um dieses Ziel ...

00:06:31: ... einfach zu erreichen oder am besten gut wie möglich ...

00:06:35: ... zu erreichen.

00:06:35: Und dann ist immer wieder dieses Hin und Her, ...

00:06:38: ... finde ich das Rad neu, ...

00:06:40: Bringe ich selber die komplette Lösung auf die Strecke und ...

00:06:43: bau das alles selber, weiß wirklich jede einzelne ...

00:06:46: Kodzeile, die ich da geschrieben habe, selber zu schätzen ...

00:06:49: und kann genau sagen, wo an welcher Stelle ich vielleicht ...

00:06:51: nochmal nacharbeiten kann oder wo ich was mache.

00:06:54: Oder gehe ich dann, das ist wieder die andere Seite, ...

00:06:57: der Medaille, wie du es gesagt hast, oder diese Waage, ...

00:06:59: auf der man sich befindet, sage ich, ich spare mir den ...

00:07:02: üblichen Weg, weil es hat sich ja schon jemand, ...

00:07:04: der im Zweifelsfall auch wirklich Ahnung hat, mit diesem ...

00:07:06: Problem auseinandergesetzt. Da kommen wir später noch mal ...

00:07:09: drauf, was man da tatsächlich reinzieht in so ein Projekt als Dependency oder was man

00:07:15: tatsächlich dann nochmal selber schreiben kann, um diese Abhängigkeit aufzulösen.

00:07:18: Ich kann ein Ziel in einer Woche erreichen, weil sich jemand diesem Problem schonmal

00:07:24: angenähert hat und ich nur noch so ein bisschen die letzten zehn Prozent davon selber erledigen

00:07:28: muss.

00:07:29: Kann die Zeit nutzen, das zu evaluieren, was ich da vielleicht mit reinziehe an Fremdcode.

00:07:33: Ist das vertretbar für dich, dass ich zum Beispiel von dir kostenlos verfügbar gemachten

00:07:40: Code online verwende, damit ich mein Ziel schnell erreiche und im Zweifelsfall auf gut

00:07:45: Deutsch gesagt die Law Wende dafür ernte, dass du dir da mal intensiv Zeit für genommen

00:07:49: hast, dich dem Problem zu widmen?

00:07:50: Wenn wir jetzt von mir persönlich sprechen, würde ich sagen ja, weil sobald ich etwas

00:07:56: online stelle und das dann auch kostenlos zur Verfügung stelle, tue ich das ja auch,

00:08:02: weil ich anderen helfen möchte.

00:08:04: Und bin mir dessen dann auch bewusst.

00:08:06: Es ist ja immer wieder die Frage, wir werden ...

00:08:09: Wir sprechen jetzt gerade über diese Fragen,

00:08:11: weil das gleich in unserem Thema ziemlich relevant wird,

00:08:14: vor welcher Entscheidung man sich da stellt,

00:08:17: wenn man seinen Code veröffentlicht.

00:08:19: Es gibt ja immer, und das auch noch mal vorweg,

00:08:21: die Lizenzfrage, unter die man seinen Code stellt,

00:08:24: den man online zur Verfügung stellt.

00:08:26: Da gibt's ja mehr oder weniger viele Wege,

00:08:28: die das gleiche Ziel haben.

00:08:30: eine Referenz zu mir in dem Code drin steht, aber du darfst trotzdem mit diesem Code machen,

00:08:34: was du willst. Dann gibt es die Möglichkeit zu sagen, hier frei für alle, nimm den Code,

00:08:39: mach mit dem, was du willst, verdiene damit Geld, ändert den Code, verkaufte den geändert

00:08:42: weiter, verkaufte den genauso wie er ist weiter, mach damit, was du wirklich willst. Aber es muss

00:08:46: eine Lizenz dahinterstehen, deswegen ist es jetzt diese hier. Oder es ist eine selbstgeschriebene

00:08:52: Lizenz oder eine besondere Lizenz, die ganz spezifisch sagt, du darfst diesen Code verwenden,

00:08:56: aber du musst es backlinken oder du darfst es verwenden für dein Offensorsprojekt oder du

00:09:01: darfst es bis in einen gewissen Punkt. Also wir möchten jetzt nicht alle Lizenzen hier aufzählen,

00:09:05: die es so gibt, aber das ist so im Groben ist es die Art, wie man seinen Code entweder schützen

00:09:10: kann oder zumindest mit einer Lizenz versehen kann. So und wenn ich mich an der Stelle jetzt,

00:09:14: wie du es gerade in dem Beispiel gebracht hast, dafür entscheide, meinen Code öffentlich zu

00:09:18: machen und entscheide mich an der Stelle ganz bewusst dafür, dass mit meinem Code das passieren darf,

00:09:23: darf, was auch immer derjenige, der diesen Code verwendet, damit machen möchte.

00:09:26: Dann stelle ich auch diese Möglichkeit offen, dass sich ein Milliarden- oder

00:09:30: Millionenkonzern mit entsprechendem Umsatz, darauf beziehe ich mich,

00:09:35: daran bedient und darauf eine Lösung aufbaut und damit wirklich sehr, sehr, sehr

00:09:40: viel Geld macht und sich keinerlei Verpflichtung irgendwie oder keinerlei

00:09:45: Verpflichtung eingeht, mir dafür auch nur einen Cent zu bezahlen in Zukunft.

00:09:49: Das ist die Entscheidung, vor der du stehst.

00:09:52: Und das ist das, wie das NPM Ökosystem aufgebaut wird.

00:09:55: Und ich habe eigentlich im Grunde genommen vorher noch nicht wirklich viele

00:09:58: Fälle davon gehört, dass da jemand zu einem drastischen Mittel gegriffen hat.

00:10:02: Aber einer davon, in den möchte ich jetzt gerne eintauchen,

00:10:06: wie man das so nennen darf, wenn man sich in so ein Thema einarbeitet hatte.

00:10:10: Ja, in dem Fall geht es jetzt um den vorhin schon mal angekündigten

00:10:14: oder genannten Entwickler Maraq Squires.

00:10:17: Ich spreche jetzt einfach mal in Englisch aus den Nachnamen.

00:10:20: Der hat unter anderem zwei Packages geschrieben, die mir persönlich auch schon mal über den Weg gelaufen sind.

00:10:25: Und zwar einmal ColorJS und FakerJS.

00:10:27: Um mal kurz zu verreißen, was diese beiden Frameworks machen.

00:10:30: ColorJS ist eine übliche Dependency, die man im Projekt hat, wenn man auf Konsolenebene,

00:10:36: was häufig bei Node.js beispielsweise der Fall ist oder im Browser in normalen JavaScript-Umfeld,

00:10:41: wenn man farbige Ausgaben in die Konsole machen möchte.

00:10:46: Also ganz banal, ich habe zum Beispiel einen Web Server, den betreibe ich auf der Konsole.

00:10:51: Da sehe ich die Logs werden auch zugreift und was da der Web Server tatsächlich für Tätigkeiten macht,

00:10:56: letztendlich das Live Logging.

00:10:58: Und ich möchte, dass diese Ausgaben in der Konsole farbig dargestellt werden.

00:11:02: Fehler Rot, normale Hinweise vielleicht in der normalen Textfarbe, die ich ausgewählt habe.

00:11:06: Warnings in Gelb und vielleicht irgendwelche erfolgreichen Zugriffe,

00:11:11: zum Beispiel 200er Codes werden dann grün dargestellt.

00:11:13: So, und wenn ich mich jetzt entscheide, das in meinen Code reinzumachen oder das zu verwenden,

00:11:17: kann ich selber programmieren oder ich greife auf so ein Framework zu, welches all diese Arbeit für mich macht.

00:11:23: Das heißt Unterstützung für alle möglichen Arten von Konsolen, ganz einfache Rapper, die mir erlauben,

00:11:29: mit wenigen Buchstaben, sage ich jetzt mal, in meinem Code gewisse Konsolenausgaben zu färben

00:11:34: und entscheide mich dann dafür für dieses Colors Framework.

00:11:38: Und das haben tatsächlich super viele gemacht, um mal jetzt so eine konkrete Zahl zu nennen.

00:11:43: Seit der Veröffentlichung von diesem Package sind es ungefähr 3,43 Milliarden Downloads gewesen,

00:11:48: die teilweise manuell gewesen sein können, aber auch die natürlich mit jeder Installation von einem NPM Package,

00:11:56: von einer NPM Library durchgeführt werden, die jemand bei sich macht.

00:12:00: Das heißt, wir haben verschiedene Arten von Abhängigkeiten in so einem Projekt, welche wir direkt reinziehen.

00:12:06: Das sind die direkten Abhängigkeiten oder wir haben diese sogenannten transitiven Abhängigkeiten,

00:12:11: ... die wiederum Abhängigkeiten von Abhängigkeiten sein können.

00:12:14: Da wissen wir teilweise noch nicht mal, ...

00:12:16: ... welches der in dem Abhängigkeitsbaum befindenden ...

00:12:20: ... Frameworks jetzt dieses Framework beispielsweise verwendet.

00:12:24: Also das haben sehr, sehr viele gemacht in der Vergangenheit.

00:12:27: In dem Beispiel Colors zum Beispiel wissen wir von ...

00:12:30: ... ungefähr 19.000 Projekten, in denen das drin verwendet wurde.

00:12:33: Entweder direkt oder indirekt.

00:12:36: Das ist schon echt eine ganze Menge.

00:12:39: Hast du das schon mal verwendet, Kau?

00:12:41: Bestimmt.

00:12:43: In einem der Projekte, in den paar Projekten,

00:12:46: die ich schon mal gemacht habe, aber wie das dann so ist

00:12:49: und wie du das auch gerade erklärt hast,

00:12:51: es ist wahrscheinlich in einem der anderen Dependencies drin gewesen,

00:12:55: die ich verwendet habe.

00:12:56: Insofern, ja.

00:12:59: Ja, mit die Größen.

00:13:00: Also in diesen 19.000 Projekten, in denen das nachgewiesen werden kann,

00:13:04: sage ich jetzt mal,

00:13:05: da können eine Handvoll richtig, richtig große Projekte sein,

00:13:08: wo praktisch jeder eigentlich mitarbeitet.

00:13:11: Das können aber auch tatsächlich richtig kleine Projekte sein,

00:13:13: die vielleicht nur Einzelanwender irgendwo für sich mal gebaut haben.

00:13:17: Also das ist jetzt keine Gewichtung drin,

00:13:19: dass das jetzt die 19 wichtigsten Projekte sind, in denen das vorhanden ist.

00:13:22: Aber naja, das, was daraufhin passiert ist,

00:13:26: ist natürlich wirklich für alle eine ziemliche Phase gewesen.

00:13:30: Darauf gehen wir gleich nochmal näher ein.

00:13:34: Das zweite Package, was der Autor ziemlich populär

00:13:37: Oder was den Autor ziemlich populär gemacht hat, war das Package Faker.js.

00:13:42: Das ist weniger ein Package als auch wirklich ein großes Framework,

00:13:44: weil damit kann man mehr oder weniger authentische Fake-Daten erzeugen.

00:13:51: Wir kennen das alle davon.

00:13:53: Zum Beispiel, wenn wir

00:13:55: Testing-Tools verwenden oder wenn wir

00:13:57: irgendwelche Mockups machen, dass wir so ein Lorem Ipsum-Text nehmen

00:14:01: oder dass wir Max Mustermann jetzt in deutschen Beispielen Max Mustermann

00:14:06: in diese Formulare eintippen, um unsere Funktionalitäten zu testen.

00:14:09: Und somit hat sich dieser Autor dann mit Faker.js ran gemacht und hat

00:14:12: Logiken geschrieben, die es ermöglichen, wirklich zu tausendfach

00:14:16: Datensätze zu generieren, die für solche Tests oder für Dummy-Einträge

00:14:22: das vornehmen, also die, die quasi Datensätze generieren.

00:14:26: Dazu können Kreditkartendaten sein, die einfach nur dieser

00:14:29: Maskierung von Kreditkarten, Nummern und Ablaufdaten entsprechen.

00:14:34: ... das können Telefonnummern sein, ...

00:14:35: ... das können Koordinaten sein, ...

00:14:36: ... das können sogar Bilder sein, ...

00:14:37: ... die da generiert werden.

00:14:38: Und somit kann man sich auch auf diesen öffentlichen ...

00:14:40: ... Portalen, wo es dieses Framework gibt, ...

00:14:42: ... kann man sich diese Datensätze einfach mal ...

00:14:44: ... spaßesweise generieren lassen ...

00:14:46: ... und das halt auch programmatisch machen.

00:14:49: Da kann man auf die Library zugreifen und sagen, ...

00:14:52: ... ich hätte jetzt gerne in meiner Datenbank beispielsweise ...

00:14:55: ... gehe ich mit einer ganz einfachen Schleife drüber ...

00:14:57: ... und generiere mir 5000 Kreditkartendaten ...

00:15:00: ... und paste die in meine Tabelle rein, ...

00:15:01: ... macht einen Entsatz rein ...

00:15:02: ... und dann habe ich einen guten Datensatz ...

00:15:03: Oder eine gute Ausgangssituation, um zum Beispiel mein Programm code, der später in Produktion

00:15:09: mit Produktivdaten arbeitet, der den mal testet.

00:15:14: Funktioniert eine Maskierung, funktioniert eine Anonymisierung der Daten, funktioniert

00:15:17: vielleicht eine Validierung der Daten.

00:15:19: Das Framework kann einen dabei unterstützen.

00:15:22: So, das hat jetzt im Vergleich zu Colors.js nur in Anführungsstrichen 276 Millionen Downloads

00:15:28: seit der Erstellung dieses Frameworks.

00:15:31: Dennoch ist das immer noch ein riesengroßer Ausnehmer.

00:15:34: Und, ja, was hat der jetzt gemacht?

00:15:37: Ja, ganz interessant, finde ich, tatsächlich die Entwicklung.

00:15:42: Also, der Autor, der hat sich dann jetzt anscheinend

00:15:45: irgendwie dazu entschieden, es ...

00:15:47: Wir hatten vorhin schon den großen Firmen,

00:15:50: den F5-Fund wird es anscheinend heimzuzahlen.

00:15:53: Und hat seine eigenen Packages sabotiert.

00:15:57: Er hat dort Code implementiert,

00:16:00: Zum Beispiel in dem "Colors" hatten wir vorhin, in der Kommandozeile werden dort die Befehle und Meldungen in Farben ausgegeben, also farblich hinterlegt.

00:16:10: Und er hat dort eine Schleife eingebaut, die unendlich oft "Liberty" gepostet hat und hat damit das System quasi lahmgelegt.

00:16:24: Und ja, das hatte halt sehr große Auswirkungen,

00:16:28: weil wenn man das fast 3,5 Milliarden mal downloadet,

00:16:31: dann kann man sich vorstellen, in wie vielen Projekten das Ganze dann steckt.

00:16:34: Und unter anderem war davon auch die Amazons Cloud

00:16:40: Development Kit Library von betroffen.

00:16:46: Sodass das dann alles nicht mehr so ganz funktioniert hat.

00:16:52: Ja, das ist gelinde gesagt, dass es nicht mehr so ganz funktioniert hat.

00:16:55: Das ist tatsächlich einer der bekanntesten Abhängigkeiten, die man so hat.

00:17:00: Die haben da sofort drauf reagiert und die haben natürlich entsprechend

00:17:03: der Schlüsse gezogen.

00:17:04: Aber noch mal kurz, um darauf einzugehen, was passiert, wenn so ein Autor

00:17:08: von so einem Package das jetzt sabotiert sein eigenes Projekt?

00:17:12: Ich meine letztendlich, um auf die Eingangsfrage noch mal einzugehen,

00:17:14: er hat ja sein gutes Recht in dem Code, den er dazu Verfügung gestellt hat, online

00:17:19: ... daran jegliche Änderungen zu machen, ...

00:17:21: ... wie es ihm beliebt.

00:17:22: Der darf ja machen, was er will mit seinem Code.

00:17:23: Der darf den löschen, der darf den ändern.

00:17:25: Der darf den weiterentwickeln.

00:17:27: Im besten Fall natürlich positiv beeinflussen, den Code ...

00:17:30: ... und profitieren dann alle von.

00:17:32: Der darf aber rein rechtlich, sage ich es jetzt einfach mal so.

00:17:35: Da darf er natürlich auch, ...

00:17:37: ... wenn es ihm beliebt, da ...

00:17:40: ... unendlich häufig Limit in die Konsole posten, ...

00:17:42: ... wenn er das gerne möchte.

00:17:43: Nur jedes Projekt, welches dieses Framework verwendet ...

00:17:47: und neu installiert wird. Das muss man jetzt mal dazu sagen. Es ist nicht so, als dass er mit den

00:17:55: Änderungen in seinem Code jetzt sofort alle Projekte beeinflussen kann, die derzeit irgendwo

00:17:59: laufen, sondern es muss natürlich ein Installationsprozess stattfinden. Das heißt,

00:18:02: irgendeine Bildpipeline oder irgendein manueller Install von so einem Projekt muss sich den neuesten

00:18:09: Code von diesem Framework holen und dann in das Projekt integrieren. Das wird dann nicht über

00:18:16: Nacht praktisch bei all diesen Projekten stattgefunden haben. Aber das findet natürlich jedes Mal statt,

00:18:21: wenn Test-Bilds gemacht werden, wenn neue Versionen von anderen Frameworks installiert werden,

00:18:25: dann merkt natürlich dieser Package Manager, hey, da ist eine Abhängigkeit aktualisiert,

00:18:29: das mache ich jetzt mal, das nehme ich mit rein. Also wir können da gerne zum Ende dieses Podcasts

00:18:34: auch nochmal darauf eingehen, was für Vorkehrungen man denn so eingehen kann oder was man dann machen

00:18:37: kann, um das zu verhindern, dass so ein Savotageakt oder vielleicht auch ein mutwilliges Zerstören

00:18:43: ... von diesem Code, dafür sorgen kann, ...

00:18:45: ... dass mein Projekt jetzt darunter leidet.

00:18:47: Das können wir gerne auch noch mal ...

00:18:49: ... gleich näher besprechen.

00:18:51: Aber was, was, ich habe es jetzt gerade schon mal ...

00:18:53: ... so ein bisschen für mich vorweggenommen.

00:18:55: Ich sehe das so und rein rechtlich ist es ja so, ...

00:18:57: ... dass der mit seinem Code machen darf, was er will.

00:18:59: Was sagst du dazu, wenn sich jemand dazu entscheidet, ...

00:19:02: ... einfach seinen Code so zu verändern, ...

00:19:06: ... dass er vielleicht nicht mehr, ...

00:19:07: ... ich sage es jetzt einfach mal so einfach, ...

00:19:09: ... einfach nicht mehr dem entspricht, ...

00:19:11: was andere diesen Code verwenden, im Sinn haben.

00:19:14: Was die dafür sagen.

00:19:16: - Ja, also ich sehe da mehr die soziale Verantwortung.

00:19:23: Jetzt abseits von dem Ganzen, was da noch im Hintergrund

00:19:27: mit dem Marak passiert ist

00:19:30: und was da schon sonst schon kommuniziert wurde.

00:19:35: In den vergangenen Jahren würde ich es eher so sehen,

00:19:39: Natürlich hat er das selbst, seine Zeit und seine Kraft,

00:19:44: auch rein investiert und das Ganze gepublished und verwaltet.

00:19:47: Aber es haben ja erstens auch andere

00:19:50: haben dazu etwas beigetragen und mitgewirkt.

00:19:55: Und auf der anderen Seite, wenn ich das tue,

00:19:58: dann hab ich natürlich auch eine gewisse,

00:20:02: ja, wie gesagt, Verantwortung.

00:20:04: Und wenn er nicht möchte, dass das mehr existiert,

00:20:09: dann würde ich es eher offline nehmen als tatsächlich zu sabotieren.

00:20:13: Das ja schon irgendwo eine, ja, sagen wir, weniger gute Intention hat.

00:20:19: War fast schon kriminelle Energie, weil wir schon im True Crime Faktor hier sind.

00:20:24: Ja, genau, ich wollte es nicht so sagen, aber ja, so in die Richtung.

00:20:27: Genau, und das ist, man ist so ein bisschen hin und her gerissen,

00:20:32: wie wir es ja auch gerade gesagt haben.

00:20:35: Er darf machen, was er will, aber es hat einen sozialen Einfluss

00:20:37: Das ist eine soziale Verantwortung, die man erträgt.

00:20:39: Und wir haben aus reiem Interesse mal in dieser Repository in GitHub einfach mal nachgeguckt,

00:20:45: wie das so die Masse aufnimmt, das Thema.

00:20:47: Und da muss ich deswegen grinsen, weil ich jetzt hier den Screenshot gerade von vor elf

00:20:52: Tagen sehe, wo genau zwei Wörter enthalten sind.

00:20:57: Ich glaube, um das Explicit-Zeichen von diesem Podcast wegzulassen, kann ich nur noch das

00:21:01: eine Wort davon sagen, das ist "Author", also der "Author".

00:21:04: Und das zweite ist auf jeden Fall ein Teil unseres Körpers, den wir alle haben.

00:21:10: Das war die Reaktion, der Kommentar, der unter dem Commit stand, der das alles kaputt gemacht

00:21:15: hat.

00:21:16: Und was daran wieder interessant ist, oder was daran bemerkenswert ist, ist, dass auf

00:21:22: GitHub kann man zu diesen Kommentaren auch noch Reaktionen hinterlassen in Emoji-Form.

00:21:27: Und in dem Fall gab es 41 Daumen hoch, 95 Daumen runter,

00:21:32: einen eher traurig guckenden Smiley und zwei Augen,

00:21:35: die suggerieren, dass da wohl jemand irgendwie nicht ganz bei

00:21:42: Sinden war, der das geschrieben hat.

00:21:43: Das wird jetzt irgendwie komisch hier, weil ja,

00:21:47: er beleidigt den Autor und man sieht, dass es ziemlich viele gibt,

00:21:50: die genauso denken, die einfach sagen, die Persönlichkeit oder das

00:21:53: Persönliche von dem Autor, was der jetzt hier gerade mit seinem

00:21:55: framework gemacht hat, das ist wirklich für den Allerwertesten.

00:21:58: Und viele sagen, nee, also so eine Aussage zu treffen, so pauschal,

00:22:02: einfach zu sagen, der Autor ist echt nicht mehr ganz klar im Kopf

00:22:05: und das geht gar nicht und der ist echt nicht mehr, nicht mehr normal.

00:22:10: Das finden nochmal doppelt so viele Leute jetzt in diesem konkreten Beispiel

00:22:14: nicht passend. Aber die anderen Kommentare sind auch hin und hergerissen,

00:22:19: die man da sieht. Da haben sich Leute echt die Mühe gemacht und haben ausfühlig

00:22:22: geschrieben, was sie denn davon halten.

00:22:25: Ja, sogar, also wie du schon sagst, sehr lange Texte teilweise. Ich finde, gerade in dem

00:22:32: Fall ist es sehr verworren. Teilweise scheint es irgendwelche Verschwörungstheorien zu

00:22:39: geben, irgendwelche anderen Kommentare dazu. Aber tatsächlich finde ich noch interessanter

00:22:46: das, was eigentlich vor ein bis zwei Jahren passiert ist. Da hat der Marak nämlich einen

00:22:51: veröffentlicht, wo er gesagt hat, dass er die Fortune 500 nicht mehr unterstützen möchte mit

00:22:59: seinen Frameworks. Und genau diese Historie finde ich ganz interessant, vor allen Dingen im Hinblick,

00:23:07: was ich vorhin schon meinte, dass das Cloud Development Kit von Amazon auch mit betroffen war.

00:23:13: dass da schon irgendwo eine Historie existiert hat.

00:23:18: Und dass dann wahrscheinlich deswegen auch unter anderem

00:23:23: er diesen Weg gewählt hat, um darauf aufmerksam zu machen,

00:23:29: was denn da im Open-Source-Bereich vielleicht auch ein bisschen schief ist.

00:23:33: Ja, wir können natürlich jetzt auch nur von der Seite betrachten,

00:23:39: dass wir diese Kommunikation natürlich nicht alle nachvollziehen können

00:23:42: und auch nicht kennen. Was man aber schon mal in den vergangenen Jahren auch so aufgefasst hat,

00:23:47: ist, dass natürlich nicht bei großen Unternehmen ist es letztendlich einfach so, da spricht nicht

00:23:52: ein Entwickler einen anderen Entwickler an und sagt, könntest du dich vielleicht noch mal

00:23:55: darum kümmern oder könntest du noch mal gucken, dass das jetzt unterstützt wird, sondern da wird

00:23:59: gegebenenfalls tatsächlich in, ich will es jetzt nicht sagen, in Konzernsprache, aber vielleicht in

00:24:03: einem standardisierten Prozess auch konkret nachgefragt und gesagt, ja pass auf, wir haben

00:24:07: festgestellt, mit der neuesten Library, die wir verwenden, ist dein Code nicht mehr kompatibel

00:24:13: oder der neueste Browser wird nicht mehr unterstützt bei deiner Software. Wir müssen das aber

00:24:16: haben. Wann planst du das zu machen? Wann bist du damit fertig? Wir brauchen hier eine

00:24:21: genaue Timeline. Was ist dein Ziel? Das muss weiter und das wird halt dann schon mal gemacht,

00:24:26: ohne auch nur darüber nachzudenken, dass man das vielleicht unterstützen sollte. Das ist

00:24:30: jetzt vielleicht ein kleines bisschen so vorwurfsvoll gesagt, weil es definitiv auch Arten gibt,

00:24:35: Projekte zu unterstützen, da gehen wir auch gerne gleich drauf ein. Aber ich kann das selber nicht

00:24:40: aus eigener Erfahrung widerspiegeln, wie sowas ablaufen kann. Aber es ist tatsächlich so,

00:24:47: dass wenn ich ein kommerzielles Produkt habe, wo eine Abhängigkeit besteht zu einer Software,

00:24:50: die dann nicht mehr weiterentwickelt wird, dann hat man als Entwickler die Verantwortung,

00:24:53: sich darum zu kümmern. Dann muss man dieses Problem aus der Welt schaffen,

00:24:57: dann muss man eine Kompatibilität schaffen, dann muss man die Libraries upgraden,

00:25:00: im Zweifelsfall, wenn man da was verwendet. Ist jetzt ein Open Source Projekt nicht mehr

00:25:06: weiter maintained, was ja durchaus natürlich aus der Natur eines solchen Frameworks liegt

00:25:11: oder in der Natur von Open Source liegt, wenn keine Zeit mehr da ist von dem Maintainer

00:25:16: und es jetzt keinen passenden Nachfolger gibt, dann kann so ein Projekt, so gut es auch immer

00:25:20: sein mag, auch schon mal aufs Abstellgleis kommen oder dann kann so ein Framework auch

00:25:25: schon mal deutlich länger brauchen, bis es ein Upgrade gibt. Und dann ist es natürlich

00:25:29: nachvollziehbar, dass da keine zeitnahen Reaktionen darauf kommt, dass man für so die genannten

00:25:34: Fortune 500 jetzt noch kostenlose Supportleistungen hergibt. Da können wir auch mit dem Log4j-Fall

00:25:42: nochmal gleich drauf zu sprechen, was gemacht werden kann, was im Zweifel auch gemacht wird

00:25:47: in solchen Open Source Frameworks oder Open Source Software-Schmieden. Was da passiert,

00:25:53: wenn so was einen trifft, so ein Fall wie gleich in dem Fall. Aber was ist jetzt konkret in dem

00:25:59: Fall passiert? Also dieses Fake-All-Framework, das zweite Framework, was der Maraq entwickelt hat,

00:26:05: das ist nicht komplett sabotiert worden, dass es nicht mehr funktioniert, sondern das hat auch eine

00:26:13: Flagge, glaube ich, eine Amerika-Flagge irgendwie ins Loch geschrieben. Da war es tatsächlich so,

00:26:18: dass er da noch nicht mal, also mit den Contributions, die da kamen in finanzieller Form,

00:26:22: konnte er nicht mal die Serverkosten bezahlen, um seine Demo-Seite zu betreiben.

00:26:26: Also der konnte noch nicht mal einen Web-Server damit bezahlen, dass er seine Open-Source-Lösung für andere,

00:26:32: die wahrscheinlich auch das Ganze als Demo nutzen, um das aufrechtzuerhalten.

00:26:36: Und das darf eigentlich nicht sein.

00:26:38: Weil, das habe ich gerade schon erwähnt, die Möglichkeiten, ein solches Framework zu unterstützen,

00:26:43: sind nicht immer nur, rauszufinden, wer das schreibt und irgendwie dem Geld zukommen zu lassen,

00:26:47: sondern mittlerweile gibt es bei GitHub die Möglichkeit, da zu plätschen oder da zu

00:26:52: sponsoren. Da gibt es ganz einfache Möglichkeiten, wenn das freigeschaltet ist, in so einem Projekt

00:26:56: finanzielle Beihilfe zu leisten. Wenn man das nicht schafft, da wirklich Code, Snippets oder

00:27:02: Weiterentwicklungen als Pull Requests einzubereiten, da gibt es die Möglichkeit, direkt bei GitHub zu

00:27:08: spenden. Oder, welche Lösung uns auch noch mal untergekommen ist, welche wir auch sehr interessant

00:27:14: finden, ist das Open Collective. Und zwar kann man das unter Open Collective bekommen.

00:27:18: Das werden wir auch noch mal in der Folgenbeschreibung hier unten hinterlegen, diesen Link. Da kann

00:27:23: man sich die Frameworks, die es so gibt, angucken. Die Betreiber oder die Entwickler dieser Lösung,

00:27:29: die stellen die dann da ein und ermöglichen das dann, dass man diese Frameworks unterstützt.

00:27:34: Und ein konkretes Beispiel dafür ist das Svelte-Framework, welches im JavaScript-Umfeld

00:27:42: schon mal häufiger verwendet wird. Und da kann man Unterstützungstypen wählen, die für mich

00:27:47: sehr interessant klingen. Also man kann da einfach als normaler Baker sich eintragen,

00:27:52: dass man fünf Euro pro Monat gerne den Framework zugutekommen lassen möchte und dann kann der

00:27:56: Entwickler tatsächlich seine Arbeitszeit gegen das rechnen, was er da auch als Unterstützung

00:28:00: erhält. Und das kann man als regelmäßige Spende machen, das kann man als einfach individuelle

00:28:06: Spende machen. Und man kann neben dem normalen Baker für fünf Dollar in dem Fall jetzt, wo ich

00:28:11: das ihr vor mir habt, pro Monat das unterstützen, kann man es auch als Sponsor mit 100 Euro

00:28:15: pro Monat unterstützen. Das sind dann wieder keine Zahlungen. Und damit können sich andere

00:28:20: dann erkenntlich zeigen oder können auch ein bisschen von dem, was sie vielleicht an Profit

00:28:25: durch die Nutzung dieses Frameworks einnehmen, kann man unterstützen. Und das ist ein ganz

00:28:34: gutes Beispiel dieses Welte-Framework, ist nämlich, ganz gut unterstütze ich jetzt hier

00:28:38: Bei den Organisationen, die das jetzt zum aktuellen Zeitpunkt unterstützt haben, sieht man hier von Januar 2022 die Firma Coheer, die 10.000 US-Dollar gespendet haben.

00:28:47: Also wenn ich das mal umrechne, in reiner Zeit, wenn das jetzt jemand ist, der das als Freelancer macht, da kann er schon einige Stunden investieren, um dieses Projekt voranzutreiben.

00:28:57: Das ist nicht die einzige große Spende, sondern da sieht man tatsächlich die Top 10 Spenden,

00:29:02: die da eingehen.

00:29:04: Und die niedrigste Spende von diesen zehn Spenden ist 1.600 Dollar.

00:29:08: Also da befinden sich doch einige in diesem Bereich zwischen zwei und 10.000 Dollar, die

00:29:14: als Organisation spenden.

00:29:16: Und es gibt tatsächlich auch einzelne Unterstützer, die in dem Fall jetzt hier zum Beispiel als

00:29:21: Einzelperson, 1.700 Dollar spenden einfach, weil die scheinbar einen sehr großen Nutzen

00:29:27: aus diesem Framework gezogen haben.

00:29:29: Da kann man sich wirklich mal eine Scheibe von abschneiden, wenn man das so sagen kann,

00:29:34: wenn man sein Open Source Framework unterstützt haben möchte, wenn man der Meinung ist, man

00:29:38: kann es vielleicht nicht mit einer Community machen, die alle mit Code dazu beisteuern

00:29:42: und man möchte das gegenrechnen, dann kann man eines dieser Plattformen verwenden, die

00:29:46: auch durchaus von großen Unternehmen genutzt werden, um Spenden abzugeben.

00:29:50: Da gibt es eine Riesenliste an Möglichkeiten.

00:29:54: Und jetzt gerade dieses Welte-Framework, das ist neben diesem Open Collective auch nochmal

00:29:58: mit einer Sache in die Medien gekommen.

00:30:00: Auch das verlinken wir in der Folgenbeschreibung.

00:30:03: Und zwar die Firma, die für Distributed Computing steht, also die quasi ein weltweites Netz

00:30:09: aufgebaut haben, um Web-Server zur Verfügung zu stellen.

00:30:13: Jetzt mal so ganz banal gesagt.

00:30:14: Die Firma Wörsel, die hat ganz intensiv Svelte verwendet in deren Lösung und haben dann gesagt,

00:30:22: okay, um das Projekt nicht nur mit Einzelspenden zu unterstützen, stellen wir jetzt den Entwickler

00:30:27: oder einer der Entwickler von Svelte komplett Vollzeit bei uns ein ins Unternehmen.

00:30:31: Da wird natürlich klar auch bei der internen Entwicklung teilnehmen, dass es auch die Interessen

00:30:36: von Wörsel unterstützt.

00:30:37: Aber die zahlen ihm seinen Gehalt, jetzt mal so ganz analog zu dem, was der Marak in seinem Post geschrieben hat vor eineinhalb Jahren.

00:30:46: Die bieten ihm seinen Jahresgehalt an, was er braucht, um zu leben oder was er gerne als Entwickler haben möchte, um dann fulltime an Svelte zu entwickeln und einen festen Arbeitgeber zu haben und nicht von Spenden abhängig zu sein.

00:30:57: Und das ist eine Mischung.

00:30:59: Also ich habe jetzt mehrere Möglichkeiten aufgezählt, wie man so ein Projekt unterstützen kann, die natürlich super gut ist.

00:31:05: Also wenn man einem Entwickler die Möglichkeit gibt, eine finanzielle Sicherheit in so einem Projektumfeld zu haben,

00:31:10: aber trotzdem noch sein Open Source Framework weiterzuentwickeln, dann unterstützt Wörsel nicht nur den Entwickler persönlich,

00:31:16: sondern auch entsprechend das Projekt, damit indirekt allen Leuten, die dieses Framework verwenden.

00:31:22: Ja, jetzt haben wir natürlich auch viel darüber gesprochen, was man machen könnte, um vielleicht genau so was zu vermeiden,

00:31:31: Nämlich, dass jemand sehr unzufrieden ist, vielleicht finanzielle Sorgen hat,

00:31:35: weil er Open Source-Projekten mitwirkt.

00:31:39: Was ich mich jetzt noch frage, natürlich, was ist passiert?

00:31:44: Also, jetzt wurden die zwei Frameworks zum Beispiel sabotiert.

00:31:50: Wie ist man damit umgegangen? Was ist passiert?

00:31:53: Hat irgendjemand reagiert und ihn gesperrt oder ähnliches?

00:31:58: Ja, also neben den öffentlichen Reaktionen auf dem auf GitHub und auf den anderen Plattformen

00:32:03: gab es natürlich auch Leute, die aktiv geworden sind und zwar die NPM Plattform selbst.

00:32:08: Die ist hingegangen und hat gesagt, ähnlich wie bei dem Fall, den wir gleich auch noch besprechen werden von 2016.

00:32:15: Wir stellen die letzte funktionierende verfügbare Version von diesem Framework

00:32:23: stellen wir wieder online.

00:32:25: Das heißt, alle npm install, npm update und weiß ich nicht was für Befehle, die auf die Version von Kallas zugreifen, die noch funktioniert hat, zeigen jetzt wieder auf diese Version, unabhängig von dem, was der Entwickler gepublished hat und sperren den Zugang des Entwicklers.

00:32:40: Das ist jetzt auch wieder eine Sache, über die man sprechen kann, auch wieder hinsichtlich der Frage, die wir uns gerade eben gestellt haben.

00:32:48: übernehmen die jetzt gerade die Verantwortung oder die Kontrolle über den Code, den sie

00:32:53: gar nicht besitzen oder die eigentlich, wo der Entwickler eine andere Intention hatte,

00:32:58: was passiert da.

00:32:59: Aber nichtsdestotrotz, diese 19.000 erwähnten Projekte können installiert werden und die

00:33:04: werden auch wieder mit der funktionierenden Version von diesem Framework installiert und

00:33:08: der Entwickler muss erstmal in Klärung treten.

00:33:10: Hat natürlich genauso eine Kontroverse, weil, wie ich gerade erwähnt habe, die haben die

00:33:15: Kontrolle darüber übernommen und der Entwickler hat erst mal keinen Zugriff darauf, was mit dem

00:33:19: Co-op passiert, den er veröffentlicht hat. NPM selber rechtfertigt diesen Move, indem

00:33:26: die halt sagen, naja, also wir haben eine User Guideline hier, wir haben eine AGB sozusagen. Wenn

00:33:33: man ein Paket auf NPM veröffentlicht, hat man auch in der Hinsicht diese soziale Verantwortung

00:33:38: Verantwortung dafür, dass ich keinen Schaden bei anderen anrichten darf.

00:33:44: Und diesem Nachruf oder dieser Guideline geht NPM nach und sagt

00:33:52: entsprechend, ja, wir stellen das wieder her, weil das war nicht rechtens, was der

00:33:56: jenige gemacht hat und wir haben unsere Verantwortung jetzt wahrgenommen und

00:33:59: sichern diese anderen Projekte wieder. Das war das, was NPM gemacht hat.

00:34:03: Das ergibt dann an der Stelle nochmal die Frage, die wir eingangs auch noch auf dem

00:34:13: Tisch liegen hatten, sozusagen nicht nur ethisch Vertretbarkeit, kostenlose Software nutzen,

00:34:17: um selber sich einen Vorteil zu verschaffen.

00:34:19: Wie würde man jetzt, nachdem man sowas hört, auch mal nicht aus unserer Entwicklerperspektive,

00:34:24: sondern vielleicht aus einer IT-Entscheiderposition, wie würde man jetzt sagen, steht man im Vertrauen

00:34:32: ... mit dem Maintainer.

00:34:33: Also installiere ich ein Framework, ...

00:34:36: ... spare dadurch Zeit.

00:34:37: Damit impliziert ja, ...

00:34:39: ... dass ich demjenigen, der diese Software schreibt, ...

00:34:41: ... auch vertraue.

00:34:42: Dass ich den Code, den er hat, unverändert ...

00:34:44: ... bei mir mit in meine Codebase aufnehme ...

00:34:46: ... und im Zweifelsfall irgendwo so präsentiere, ...

00:34:48: ... als dass es ein Teil meiner Lösung ist.

00:34:50: Impliziert habe ich mein Vertrauen ausgesprochen.

00:34:53: Ist das die Lösung?

00:34:56: Meinst du, kann man das gut machen, ...

00:34:58: ... gerade wenn man so eine Story jetzt brüchfrisch ...

00:34:59: ... von uns beiden erklärt kriegt?

00:35:01: Ist das jetzt das, was ich morgen früh als erstes machen werde,

00:35:03: wenn ich mein Projekt starte, dass ich direkt mir erstmal wieder

00:35:06: viele fremde Quellen reinhole oder wie würdest du da jetzt reagieren?

00:35:10: Ja, auch sehr gute Frage.

00:35:13: Ich meine, im Endeffekt basiert das Ökosystem ja auch irgendwie darauf,

00:35:16: dass ich genau das machen kann, nämlich andere Libraries verwenden.

00:35:23: Als ich mich mit der Thematik beschäftigt hatte

00:35:28: Vorbereitung auf dem Podcast habe ich auch gesehen, dass viele als, ja, ich nenne jetzt mal,

00:35:34: Lösungsideen oder als Alternativen, um zum Beispiel auch zu contributen, also auch für große Unternehmen,

00:35:42: dass die sich zum Beispiel die Sachen abforken, das heißt also, dass die sich die Sourcen auch

00:35:47: ziehen, die vielleicht modifizieren für ihre Zwecke und dadurch aber auch automatisch auf

00:35:53: auf einem stabileren Stand sind,

00:35:55: weil sie nicht automatisch alle Updates kriegen,

00:35:58: sondern nur das, was sie tatsächlich bei sich reinziehen.

00:36:01: Und gegebenenfalls würde ich über eine solche Lösung nachdenken.

00:36:05: Ein gewisses Vertrauen brauche ich trotzdem gegenüber dem Maintainern

00:36:09: und dem Marak würde ich persönlich aufgrund der Aktion

00:36:12: vielleicht auch nicht mehr unbedingt so schnell wieder vertrauen.

00:36:15: Aus meiner persönlichen Sicht.

00:36:17: Aber das halte ich dann doch für den besseren Ansatz vielleicht.

00:36:22: Wie siehst du das?

00:36:24: Ja, an der Stelle auch nochmal ein Verweis darauf.

00:36:28: Natürlich, wenn man so recherchiert und wenn man versucht,

00:36:30: sich die vermeintliche Wahrheit über dieses ganze Thema rauszusuchen,

00:36:34: da graben auch Leute tatsächlich ein bisschen tiefer,

00:36:38: was ich jetzt auch mit Vorsicht natürlich mal genießen würde an der Stelle.

00:36:42: Da wird Bezug auf gewisse Sachen in den Medien geworfen,

00:36:46: die früher passiert sind mit Menschen, wo der Name "Marac Squires" auftaucht.

00:36:51: werden Verbindungen gezogen und frühere Posts von ihm,

00:36:55: die irgendwo in der Öffentlichkeit gestanden haben, werden genutzt,

00:36:59: um ihm vielleicht sogar vorzuwerfen, dass er vielleicht einen psychischen Schaden hat

00:37:04: oder dass er psychisch krank ist in irgendeiner Form.

00:37:07: Das darf natürlich nicht mit einfließen, meiner Meinung nach.

00:37:11: Also man sollte das nicht so weit treiben.

00:37:13: Das ist jetzt eine moderne Hexenjagd, die da stattfindet.

00:37:16: Das nochmal an der Stelle.

00:37:18: Im Grunde genommen stellt man sich aber,

00:37:19: wenn man so ein Framework oder wie ich es auch selber jahrelang gemacht habe mit NPM,

00:37:24: man gibt Grundvertrauen mit. Das gebe ich auch wirklich jedes Mal mit und das habe ich auch in

00:37:29: mehreren Vorträgen von mir auf Konferenzen gemacht. Ein Beispiel zu nennen, habe ich auf einer

00:37:35: Konferenz in Nürnberg einmal so ein bisschen die Challenge gemacht, dass ich in 30 Sekunden in der

00:37:39: Lage bin auf der Bühne mit nur einer Konsole und Internetverbindung ein Webserver zu erstellen,

00:37:45: auf den man zugreifen konnte und der Jason ausgegeben hat.

00:37:48: Das konnte ich in diesen 30 Sekunden machen, weil ich auf das Framework

00:37:52: Express JS zugegriffen habe, wo ich wusste, okay, ich referenziere

00:37:56: dieses Projekt, mache die 3, 4, 5 Codezeilen, schreibe ich auf dem Screen,

00:38:00: pass mein Port an und gebe eine Konsole an, npm install und npm run

00:38:04: oder start, je nachdem das Start Skript oder Node Index JS,

00:38:08: wie man es auch immer aufrufen möchte.

00:38:10: Dann hat das funktioniert und ich habe an der Stelle gesagt,

00:38:12: Jo guck mal, ich habe jetzt hier den Webserver aufgebaut.

00:38:15: Ich kann das hier machen.

00:38:16: Ich habe so schnell für euch was gemockt hier. Super.

00:38:19: Ich habe dafür zugegebenermaßen

00:38:22: zugegebenermaßen einen etwas provozierten Applaus bekommen.

00:38:26: Aber ich habe mich in der Situation blind darauf verlassen,

00:38:30: dass die Version, die ich darunter geladen habe oder die automatisch installiert,

00:38:34: wo die neueste Version, die verfügbar war, mit den gleichen Befehlen,

00:38:37: die ich sie, wie ich sie vorher schon mal ausprobiert habe,

00:38:39: in dem Moment funktionieren.

00:38:42: Wenn ich das jetzt im Projekt mache, dann würde ich das nicht in 30 Sekunden machen.

00:38:45: Dann würde ich es auch vielleicht nicht nur mit 12 Zeilen Code machen, aber ich würde mich auf die Grundfunktionalität, die das Ganze verspricht.

00:38:51: Ja, da würde ich darauf vertrauen.

00:38:56: Und ich würde auch in einer tatsächlichen Lösung, die ich im Kundenumfeld geschaffen habe, nenne ich es jetzt einfach mal,

00:39:03: da habe ich mich auf eine Kernfunktionalität von einem Paket verlassen.

00:39:08: Und ich habe diese Frage auch vorher gestellt bekommen oder proaktiv schon mal beantwortet.

00:39:12: Was passiert denn in diesem Code? Wie viel Code auditest du den jetzt oder hast du dir

00:39:22: den jetzt genau angeguckt? Hast du dir die Zeile für Zeile angeguckt, ob das jetzt nicht hier ein

00:39:26: Mist im Netzwerk macht? Da habe ich gesagt, es gibt für mich ein paar Metriken, die mein Gewissen

00:39:32: bei der Auswahl von so einer Library aus der Quelle so ein bisschen beruhigen. Und zwar schaue ich mir

00:39:39: an, wie viele Contributor gibt es in dem Projekt? Wie viele Leute entwickeln aktiv?

00:39:43: Welche von diesen Entwicklern sind denn immer bekannt, gewesen schon durch andere

00:39:49: Frameworks? Gibt es vielleicht Unternehmen, die dahinter stehen? Also wenn es da zum

00:39:53: Beispiel prominente Sponsoren gibt von so einem Framework, die Microsoft heißen oder IBM oder

00:39:58: Intel oder weiß ich nicht, was es für große Unternehmen sind, die dann tatsächlich diesen

00:40:02: Schritt auch gewagt haben und zu sagen, wir stehen da jetzt hinter, wir nutzen das und wir

00:40:05: finanzieren dieses Projekt, dann steigert das mein Vertrauen in dieses Framework und

00:40:10: dann gehe ich da mit einem besseren Gefühl rein. Wenn ich ein Framework habe, was von

00:40:13: einem einzelnen unbekannten Entwickler ist, da habe ich zum einen natürlich keine Information

00:40:18: über den Autor, dann habe ich keine Information darüber, wer nutzt das auch, wer vertraut

00:40:22: dem ganzen noch, wenn das für mich wichtig ist für meine Entscheidung, um mir die einfacher

00:40:26: zu machen. Oder was sagt das für mich darüber hinaus, wird dieser Entwickler die nächsten

00:40:33: ... Jahre dieses Framework weiterentwickeln, ...

00:40:35: ... am Laufen halten, updaten.

00:40:36: Wie sieht das aus?

00:40:38: Und ich sage jetzt einfach mal mit diesen ...

00:40:40: ... drei oder vier Regeln plus die eine oder andere, ...

00:40:43: ... die ich auch noch im Laufe der Zeit für mich ...

00:40:45: ... gefunden habe, entscheide ich dann und würde ...

00:40:47: ... auch jetzt morgen früh bei dem Start von einem ...

00:40:50: ... neuen Projekt entscheiden, ob ich ein Framework ...

00:40:53: ... mit einbeziehe oder halt nicht.

00:40:54: So und was ich aber, haben wir auch gerade angekündigt, ...

00:40:58: ... was kann ich denn machen?

00:40:59: Das wird auch für den zweiten Teil wichtig.

00:41:02: Ich kann erstmal dafür sorgen, dass den Code, den ich einmal einbezogen habe, auf den ich meine Codebase aufgebaut habe, wo ich meine Funktionalität oder Funktionsweise meiner Anwendung drauf aufbaue und gewährleistet habe, die kann ich pinnen.

00:41:16: Das nennt sich so.

00:41:17: Also ich kann sagen, ich basiere auf Version 1.2.8 von diesem Framework und ich möchte nicht, dass ein NPM install morgen oder ein NPM Update übermorgen dafür sorgt, dass eine dieser Abhängigkeiten automatisch aktualisiert wird.

00:41:31: und Code, der in der Zwischenzeit dazugekommen ist oder Major Changes,

00:41:34: vielleicht die nicht ordentlich angekündigt wurden oder die mir vorbeigegangen sind,

00:41:38: dass die einen Einfluss auf meinen existierenden Code haben.

00:41:40: Das heißt, ich lege einmal fest, alle Abhängigkeiten in meinem Projekt

00:41:44: entsprechen der Version, die ich ausgewählt, die ich erprobt habe,

00:41:47: nicht getestet habe zu Beginn der Entwicklung meines Projektes.

00:41:50: So, dann gehe ich im Anschluss hin, wenn ich Updates mache

00:41:54: und update diese Libraries alle manuell.

00:41:56: Das heißt, ich sage, es gibt jetzt eine neue Version von ColorJS beispielsweise,

00:42:00: die möchte ich bei mir in meinem Code haben, weil eine Sicherheitslücke geschlossen wurde oder

00:42:06: weil es eine neue Funktionalität für mich bereithält, die ich gerne nutzen möchte in Zukunft,

00:42:12: dann gucke ich mir das an. Dann kann ich selber entscheiden, ob ich upgraden möchte. Dann kann

00:42:17: ich in Zukunft mir auch einfach vielleicht erstmal ein paar andere Leute vorrennen,

00:42:20: lassen sie das für sich privat überprüfen oder die das auditieren oder die ihre Erfahrung selber

00:42:26: damit machen, da entscheide ich dann selber, wann ich dieses Upgrade mache oder nicht.

00:42:31: Also dieses Pinnen ist auf jeden Fall eine sehr wichtige Sache, die ich jetzt auf jeden

00:42:35: Fall machen würde und die mich davon abhalten würden, in diese Falle zu laufen, jetzt automatisiert

00:42:40: zum Beispiel mit diesem ColorJS automatisiert in dieses Problem laufen zu laufen.

00:42:47: Genau, das hat mich nur mal ein bisschen sensibilisiert, was das angeht, dieses konkrete Feature, diese

00:42:52: konkrete Arbeitsweise, da werde ich in Zukunft ganz pinnibel darauf achten, dass das der Fall ist,

00:42:58: dass ich da Upgrades manuell mache und dass ich den Zustand einfriere. Dann eine weitere Sache,

00:43:05: die kommt von dem NPM Framework selbst. Und zwar Abhängigkeiten von meinem Projekt,

00:43:11: die werden ja in der Package.json, jetzt konkret im Node.js NPM Umfeld, in der Package.json

00:43:16: festgelegt. Wenn ich dann mein Projekt installiere oder baue, dann wird eine Package log.json

00:43:25: angelegt, die sogar Checkzum über den referenzierten Code beinhalten. Das hat zur Folge, dass

00:43:31: wenn ein Framework in der gleichen Version sozusagen gepublished wird, wie vorher nur

00:43:36: jetzt anderen Code beinhaltet, dann würde meine Package.json schon mal sagen, es wurde

00:43:41: eine Änderung am Code vorgenommen. Es ist nicht mehr exakt das, worauf ich basiere oder

00:43:45: wo ich drauf aufsetze. Das soll aber so sein. Also wenn ich meinen Framework jetzt installiere

00:43:52: oder meinen Code installiere mit npm install, möchte ich aber bitte exakt diese Version

00:43:56: von dem Code gerne nachladen. Das ist auch eine Möglichkeit, das Ganze etwas festzulegen.

00:44:02: Das, was du vorhin schon mal erwähnt hast, ist die dritte Variante, die nicht jeder zur

00:44:08: Verfügung hat, die man sich vielleicht mit ein bisschen Mühe selber aufbauen kann. Und

00:44:12: gibt es die Möglichkeit, das hat früh mit NPM Enterprise angefangen, und zwar kann man da seine

00:44:19: eigene Repository aufsetzen. Also ich kann mir sozusagen ein eigenes NPM Ökosystem aufbauen,

00:44:24: wo ich nur von mir auditierte, von mir als gut befundene oder sogar von mir im Unternehmen

00:44:30: geschriebenen, von meinen Kollegen geschriebenen Frameworks drin liegen habe, die ich dann nach

00:44:35: guter Manier mit NPM installieren kann, wo ich dann praktisch sage, ich habe fünf Abhängigkeiten

00:44:42: in mein Projekt und die werden nicht aus dem Internet gezogen, sondern die werden

00:44:44: von unserem lokalen Repository gezogen, welches wiederum manuell und sehr auditiert

00:44:50: und sehr eingeschränkt nur aus dem Internet abgedatet werden.

00:44:54: So gepflegt. Das heißt, ich habe immer einen verfügbaren Server, der ist immer

00:44:59: erreichbar, der hat immer die Softwareversion zur Verfügung, die ich ihm

00:45:03: gegeben habe und ich würde niemals blind aus dem Internet Pakete nachladen,

00:45:09: die möglicherweise auch so getempert sein könnten

00:45:12: oder die irgendetwas beinhalten könnten, was mir schaden könnte.

00:45:16: Etwas ausführlicher auf die Frage, was ich jetzt morgen mache,

00:45:21: oder was die Möglichkeit wäre.

00:45:23: Aber ja, das sind die Dinge, die ich jetzt als lessons learned sehen würde,

00:45:29: wenn ich mir diesen Fall jetzt hier konkret angucke,

00:45:32: mir das so betrachte, wie ich damit umgehen würde.

00:45:34: Ich würde auch sagen, also zusammengefasst ist es ja

00:45:39: So und hör ich auch bei dir raus, dass man einfach nachhaltiger mit dem Thema umgeht.

00:45:43: Nachhaltiger und bewusster.

00:45:45: Und das finde ich jetzt gerade im Hinblick auf unser zweites Thema sehr spannend,

00:45:51: weil es da auch um Nachhaltigkeit und bewusstes Umgehen mit den Sources und vor allen Dingen mit den Versionen geht.

00:46:02: Gerade so ein, sagen wir mal, etwas langsameres Update-Verfahren.

00:46:09: Das kann ja auch durchaus dazu führen, dass wir dort vielleicht auch alte Versionsstände haben und die dann vielleicht auch sicherheitskritisch werden.

00:46:20: Das stimmt ja. Man kennt das ja gerade auch von Unternehmen oder von Kunden jetzt in unserem Umfeld.

00:46:29: Die Arbeitsmaschinen haben vielleicht nicht immer die neueste Version von Windows oder von Mac OS laufen.

00:46:35: laufen. Die sind da auf einem bewährten Stand, auf dem man arbeitet. Genauso geht das mit

00:46:39: der Softwareversion von den bekannten Suites, zum Beispiel die Office Suite oder bestimmte

00:46:45: andere Software, die man jeweils in welchem Fall auch immer einsetzen mag. Da wird auf

00:46:51: bewährte Software gesetzt und so werden Updates gemacht, die aber eine riesengroße, lange

00:46:55: Kette an Validierungen und Prüfungen vorher mit sich gezogen haben, damit man gewährleisten

00:47:00: konnte, dass diejenigen, die das letztendlich produktiv am Ende einsetzen, dass die sich

00:47:05: nicht mehr damit rumschlagen müssen. Mit Kinderkrankheiten beispielsweise oder mit

00:47:09: Funktionen, die nicht mehr so funktionieren wie vorher oder mit Updates, die doch eher

00:47:13: Probleme mit sich bringen, um das zu verhindern. Und ich finde das super, wie du es gerade

00:47:18: gesagt hast, mit dieser Nachhaltigkeit. Das ist nicht nur etwas, was uns im Alltag letztendlich

00:47:24: mit unserer Umwelt interessieren sollte, sondern das sollten wir auch echt übertragen auf

00:47:27: ... das, was wir online machen oder das, ...

00:47:29: ... was wir in unserer Entwicklung machen.

00:47:31: Dass wir da vielleicht auch einfach ein Augenmerk ...

00:47:33: ... darauf legen, nicht nur immer das neueste und ...

00:47:36: ... schnellste sofort up to date haben, in dem Fall ...

00:47:39: ... jetzt hier Libraries nachladen, Software nutzen, ...

00:47:42: ... sondern dass wir da vielleicht ein bisschen ...

00:47:43: ... bedachter auch dran gehen.

00:47:44: Da wollten wir mit dem ersten Teil jetzt auch mal ...

00:47:48: ... einfach zur Sprache bringen, was das für Probleme ...

00:47:52: ... mit sich bringen kann, wenn man so agiert.

00:47:54: Natürlich hat das auch gewisse Vorteile, ...

00:47:56: Aber da überwiegen auf jeden Fall die Nachteile, wenn man da blind im Blindflug unterwegs ist und auf Sachen vertraut, die das vielleicht nicht verdienen würden.

00:48:07: Das war der erste Teil von Library Nightmare, moderne Package Manager und Open Source.

00:48:13: Vielen Dank fürs Zuhören. Bis nächste Woche zum zweiten Teil.

00:48:16: [Musik]

Neuer Kommentar

Dein Name oder Pseudonym (wird öffentlich angezeigt)
Mindestens 10 Zeichen
Durch das Abschicken des Formulars stimmst du zu, dass der Wert unter "Name oder Pseudonym" gespeichert wird und öffentlich angezeigt werden kann. Wir speichern keine IP-Adressen oder andere personenbezogene Daten. Die Nutzung deines echten Namens ist freiwillig.