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:
- https://www.theregister.com/2022/01/10/npm_fakerjs_colorsjs/
- 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
- https://www.usenix.org/system/files/sec19-zimmermann.pdf
- https://vercel.com/blog/vercel-welcomes-rich-harris-creator-of-svelte
- 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