Tauchen Sie ein in die Welt von gehärtetem JavaScript, LavaMoat und JavaScript-Sicherheit mit Zbyszek "ZB" Tenerowicz (@naugtur) in Episode 4 von Change Mode. Von HTML-Versuchen zu Hause bis hin zur Entwicklung von 3D-Gaming-Engines taucht ZB in seine Open-Source-Reise und die unglaublichen Projekte ein, an denen er weiterhin jeden Tag arbeitet. Dazu gehören auch seine Leidenschaft und sein Engagement für die Organisation und das Halten von öffentlichen Vorträgen bei internationalen Entwicklerveranstaltungen. Los geht's mit der Folge!
Wir haben ChatGPT verwendet, um die Grammatik und Syntax des Transkripts zu verbessern.
Marine: Vielen Dank, dass Sie heute bei mir sind. Ich bin von Zbyszek, auch bekannt als ZB für Englischsprachige. Danke, dass Sie sich heute mit uns treffen. Könnten Sie sich kurz vorstellen und uns ein wenig darüber erzählen, was Sie tun und warum Sie hier sind?
Zbyszek: Hallo, ich bin ZB. Sie kennen mich vielleicht auch als Naukter von meiner Online-Aktivität. Ich bin hier, weil ich viel mit Open Source zu tun habe, insbesondere mit JavaScript-Sicherheit. Ich beschäftige mich schon seit acht bis zehn Jahren mit Open Source und Node.js. Zurzeit arbeite ich an einem Projekt namens LavaMoat, einem vollständig quelloffenen Projekt, das unter einer MIT-Lizenz verfügbar ist.
Marine: Großartig, vielen Dank. Wir werden über LavaMoat sprechen, aber zuerst möchte ich Sie besser kennen lernen. Wie sind Sie zur Open-Source-Arbeit gekommen?
Zbyszek: Ich bin über JavaScript zu Open-Source gekommen. Ich habe vor vielen Jahren in der Grundschule angefangen, JavaScript zu lernen. Meine Eltern kauften einen PC, und ich lernte ein bisschen, wie er funktioniert. Im Alter von 13 Jahren begann ich, HTML durch Versuch und Irrtum zu lernen. Schließlich erstellte ich meine erste Website in reinem HTML und wurde von JavaScript fasziniert. Mit der Zeit habe ich verschiedene Dinge auf GitHub und npm veröffentlicht. Mein erster signifikanter Beitrag war das XHR-Paket, und seither habe ich an verschiedenen Open-Source-Projekten mitgewirkt.
Marine: Das ist erstaunlich. Wie kam es zur Gründung von LavaMoat? Sind Sie dazugekommen, als es bereits existierte, oder haben Sie es geschaffen?
Zbyszek: LavaMoat wurde aus einer berechtigten Angst vor bösartigen npm-Paketen geboren. Aaron, der Gründer von MetaMask, war besorgt darüber, was passieren würde, wenn eine der Abhängigkeiten bösartig würde. Er begann, an LavaMoat zu arbeiten, und ich wurde auf seine Arbeit aufmerksam, als ich mich mit der Sicherheit von Lieferketten beschäftigte. Nach einigen Diskussionen trat ich dem Team bei, um LavaMoat weiter auszubauen.
Marine: Das ist jetzt also Ihr Vollzeitjob?
Zbyszek: Ja, ich arbeite Vollzeit an LavaMoat und anderen sicherheitsbezogenen Projekten bei MetaMask. Wir entwickeln Software zur Verhinderung von Angriffen und beraten andere Teams in Sachen JavaScript-Sicherheit.
Marine: Können Sie erklären, wie LavaMoat hergestellt wird und was es bewirkt?
Zbyszek: LavaMoat besteht aus mehreren Werkzeugen. Das erste Tool verhindert, dass bösartige Pakete nach der Installation Skripte verwenden, um Sie anzugreifen. Ein anderes Tool führt Ihre JavaScript-Software mit einer Richtlinie aus, die verhindert, dass Abhängigkeiten unerwartete Dinge tun. LavaMoat verwendet Hardened JavaScript-Compartments, um Abhängigkeiten zu isolieren und sicherzustellen, dass sie keine bösartigen Aktionen ausführen können. Hardened JavaScript, auch bekannt als SES (Secure ECMAScript), ist ein Konzept, das in die Sprache selbst integriert werden soll. Es ist bereits implementiert und funktioniert mit minimalen Abstrichen.
Marine: Das ist faszinierend. Wie viele Personen tragen zu LavaMoat bei?
Zbyszek: Wir haben etwa vier Personen, die direkt an LavaMoat arbeiten. Wir tragen auch zu Endo bei, der Laufzeitumgebung für LavaMoat, die mehr Mitarbeiter hat.
Die Marine: Was sollte man tun, wenn man zu LavaMoat beitragen möchte?
Zbyszek: Setzen Sie sich mit uns in Verbindung. Wir haben wöchentliche Zoom-Anrufe, an denen jeder teilnehmen kann, der möchte. Nehmen Sie daran teil, sehen Sie, was los ist, und beginnen Sie zu experimentieren. Probleme zu melden und uns zu helfen, sie zu lösen, ist ebenfalls eine gute Möglichkeit, einen Beitrag zu leisten.
Marine: Sie haben erwähnt, dass Sie manchmal auf Konferenzen Demos machen. Wie sind Sie dazu gekommen, in der Öffentlichkeit zu sprechen? Liegt es daran, dass Sie Ihr Wissen leidenschaftlich gerne weitergeben?
Zbyszek: Ich kann einfach nicht aufhören. Es fing schon sehr früh an. Den ersten Vortrag bei einem lokalen Treffen hielt ich 2011. Die Organisatoren ließen mich immer wissen, wenn sie ein weiteres Treffen organisierten, und ich hielt immer wieder Vorträge. Ich habe mich mit Dingen beschäftigt, nur um genug zu lernen, um einen Vortrag darüber zu halten. Ich habe Web-Audio gelernt, nur um einen Vortrag darüber zu halten, weil es mir interessant erschien. Es ist eine Fortsetzung dieser Leidenschaft, Dinge in die Köpfe der Leute zu bringen. Als Teenager habe ich viele Rollenspiele gespielt und es hat mir sehr viel Spaß gemacht, der Erzähler des Spiels zu sein. Ich denke, das ist eine Fortsetzung davon. Ich habe über JavaScript und Node.js gesprochen. Vor allem Diagnose und Leistung in Node.js. Dann bin ich zu etwas mehr Sicherheit übergegangen und habe mich seitdem auf Sicherheit konzentriert.
Marine: Das ist wirklich cool. Ich liebe die Analogie zu Rollenspielen. Vielleicht klaue ich sie. Ich glaube, Sie helfen auch selbst bei der Organisation von Konferenzen, richtig?
Zbyszek: Ja. Dieses lokale Treffen ist irgendwie eskaliert. Irgendwann bin ich vom regelmäßigen Sprecher zum Organisator geworden. Ich habe also aufgehört, jedes Mal auf dem lokalen Treffen zu sprechen, und stattdessen angefangen, andere Leute zum Sprechen zu bringen. Ich organisierte das lokale Treffen. Die Meetup-Familie wuchs tatsächlich auf mehrere Städte an. Irgendwann brauchten sie einen neuen Koordinator. Also übernahm ich die Rolle des Koordinators. Ich kann nicht sagen, dass ich großartige Arbeit geleistet habe, denn es ist unmöglich, so etwas zu koordinieren, aber ja, ich habe es versucht. Die Meetup-Familie hat eigentlich jedes Jahr eine Konferenz veranstaltet, und wir haben jemanden gesucht, der sich traut, eine Konferenz zu organisieren. Wir haben keine juristische Person, wir haben gar nichts, wir sind nur ein Haufen Enthusiasten in verschiedenen Städten Polens, die Meetups organisieren. Also haben wir versucht, jedes Jahr jemanden zu überreden, eine Konferenz zu organisieren, bei der sich die Leute an einem Ort treffen und über Städte hinweg zusammenkommen. Ich war 2014, 2018 und 2022 dabei und habe auch bei ein paar anderen geholfen. Es macht sehr viel Spaß, vor allem am Tag der Konferenz, Brände zu löschen, herumzulaufen und die Moderation zu übernehmen. Ich weiß nicht, ich mache das nur zum Spaß. Aber wir haben es auch geschafft, etwas Geld zu verdienen. Aber wie gesagt, wir haben nicht einmal eine juristische Person. Was machen wir also mit dem Geld? Die Antwort war einfach: Wir verschenken es. Es handelt sich um Wohltätigkeitskonferenzen, und jedes Mal, wenn wir eine veranstalten, suchen wir uns eine Wohltätigkeitsorganisation, mit der wir zusammenarbeiten, und diese bekommt das gesamte Geld, das wir von der Organisation der Konferenz übrig haben. Manchmal sind es sogar noch Reste von Sponsoren, wenn wir nicht alles ausgegeben haben, aber meistens sind es die Einnahmen aus den Eintrittskarten. Unsere Eintrittskarten sind sehr preiswert, aber wenn man eine Konferenz für 500 Personen organisiert, ist das immer noch ein bisschen viel. Ich habe mich darauf spezialisiert, die Veranstaltung kostengünstig zu gestalten, aber für die Gemeinschaft zu arbeiten. Wenn man sagen kann: "Hey, wir machen das für einen guten Zweck", hilft das bei den Verhandlungen. Wir können einen Rabatt auf das Essen aushandeln, wenn wir das Catering-Unternehmen erwähnen, das es liefert. Ich habe das Update für dieses Jahr nicht zur Hand, aber ich glaube, es war ähnlich. In den Jahren 2018 und 2022 haben wir der Wohltätigkeitsorganisation etwas mehr gegeben, als wir für die Organisation der Veranstaltung ausgegeben haben.
Marine: Das ist erstaunlich. Wow!
Zbyszek: Das hat Spaß gemacht. Oh, und übrigens, die Organisation heißt MeetJS.
Marine: Ja.
Zbyszek: Wenn Sie jemals in Polen sind, suchen Sie nach einem Meetup oder versuchen Sie, zu unserer Konferenz zu kommen. Sie ist auf Englisch. Wir wollen für unsere Gemeinschaft eine internationale Konferenzerfahrung schaffen, denn es geht nicht nur um die Teilnehmer. Wir versuchen auch, unserer Gemeinschaft eine Bühne zu geben. Viele der Redner, die hier auftauchen, sind daher auch neue Redner oder Leute, die nicht oft auf größeren Konferenzen im Ausland sprechen. Manchmal ist dies ihr erster Versuch, vor ein paar hundert Zuhörern aufzutreten. Es sind Leute von unseren lokalen Treffen, die großartige Vorträge gehalten haben. Wir versuchen natürlich auch, einige Leute von außerhalb mitzubringen. Wir haben einige Leute, die uns gerne besuchen. Es gibt einen kleinen Freund der Konferenz, der immer einen Platz bekommt, und er hält Vorträge über JavaScript-Sicherheit, wann immer er Zeit hat, denn ich bin der Organisator, also sollte ich das nicht tun. Er kommt aus Israel und sorgt immer dafür, dass wir seinen Flug nicht bezahlen müssen, denn das Geld geht an einen wohltätigen Zweck. Er bezahlt den Flug immer nicht mit uns. Das ist also ein nettes Arrangement. Ich muss sagen, dass ich das wirklich gerne mache. Aber wie Sie bemerkt haben, mache ich es alle vier Jahre, denn so lange dauert es, bis man sich für die Organisation einer Veranstaltung ausruhen kann.
Marine: Ich weiß, was du meinst. Veranstaltungen zu organisieren ist eine Menge Arbeit. Es ist gut, dass Sie ein Team haben, mit dem Sie sich abwechseln und die Veranstaltung trotzdem durchführen können. Das ist also großartig. Sie mögen die Gemeinschaft sehr. Ich nehme an, bei Open Source geht es für Sie auch um Gemeinschaft, nicht nur um Code und den Austausch von Dingen, richtig?
Zbyszek: Ja, ich muss sagen, ich habe Jake erwähnt, und ich habe ausdrücklich gesagt, dass er die erste Person war, die ich durch Open Source und dann nach ein paar Jahren persönlich kennengelernt habe. Das ist etwas, das heutzutage oft passiert. Ich treffe viele Leute aus dem Open-Source-Bereich, und dann sehen wir uns persönlich auf Veranstaltungen wie der NodeConf EU. NodeConf EU ist wie ein Urlaub für Open-Source-Leute. Wir kommen zusammen und verbringen Zeit miteinander. Wir achten sogar auf die Vorträge, aber ich wage zu behaupten, dass diese nicht das Wichtigste an der Konferenz sind. Die NodeConf EU war dieses und letztes Jahr ein großartiges Ereignis mit vier Nächten und drei Tagen. Das mit den vier Nächten ist da schon ziemlich wichtig.
Marine: Schön. Was wäre ein Traumprojekt für dich, beruflich oder im Bereich Open Source, etwas, an dem du gerne arbeiten würdest? Es sei denn, das ist bereits LavaMoat. Ich meine, das könnte sein.
Zbyszek: Nun, ja, das war auch mein Gedanke, als ich das alles begann. Ich kann gar nicht glauben, dass das möglich ist. Jetzt darf ich daran teilnehmen. Diese Leute sagen mir, dass das, woran ich in den nächsten zwei Monaten arbeiten soll, tatsächlich möglich ist. Ich bin begierig darauf, es auszuprobieren. Ja, das ist definitiv meine Einstellung zu LavaMoat und Hardened JavaScript. Ich würde mich freuen, wenn es etwas wird, das eine große Verbreitung findet. Mein Traumprojekt wäre es, in ein paar Jahren an LavaMoat zu arbeiten, wenn wir bereits ESM- und Bundler-Unterstützung haben und die Akzeptanz groß ist. Zu diesem Zeitpunkt arbeiten wir an hochinteressanten Sicherheitsproblemen und verbessern die Art und Weise, wie wir Richtlinien definieren, so dass selbst die ausgeklügeltsten Bedrohungen im NPM-Ökosystem damit umgehen können.
Marine: Das ist großartig. Sie arbeiten an Ihrem Traum. Ich gratuliere. OK, ich habe ein paar dumme Fragen an Sie.
Zbyszek: Das sind die besten.
Marine: Wenn Sie die Erlaubnis bekämen, einen Tag lang alles zu tun, was würden Sie tun?
Zbyszek: Schlafen.
Marine: Ach, kommen Sie. Zbyszek: Wirklich?
Zbyszek: Ja, ich bin ein Elternteil. Ich bin erst kürzlich in eine andere Stadt gezogen. Ich würde wahrscheinlich schlafen. Aber ich weiß, was Sie meinen. Sie meinen Open Source.
Marine: Nein, nein. Ich meine alles. Wenn alles erlaubt wäre. Nein, aber ich habe es verstanden.
Zbyszek: Ausruhen gehört dazu. Ich habe einen ganzen Haufen von Projektideen. Wenn Sie mir einen Monat Zeit geben würden, nicht nur einen Tag, könnte ich meine 3D-Spielengine fertigstellen, die ich einmal angefangen habe. Das Interessante daran ist, dass es heutzutage ziemlich sinnlos ist, eine 3D-Spiele-Engine zu entwickeln, da bereits alles als Open Source verfügbar ist. Aber die Besonderheit ist, dass meine 3D-Spiele-Engine, an der ich angefangen habe zu arbeiten, nur Sound und Ton wiedergibt. Es ist also wie ein Spiel, aber es ist ein Bobcast.
Marine: Oh, wow. Jetzt haben Sie mein Interesse geweckt.
Zbyszek: Es ist ein Genre. Früher nannte man es manchmal Spiele für Blinde, aber eigentlich ist es für alle da. Und es ist ein Genre, das einfach ein bisschen inklusiver ist. Ich bin auf ein Internetforum gestoßen, in dem Menschen mit verschiedenen Behinderungen über Spiele diskutieren, aber auch Spiele entwickeln. Dafür gab es keine großartigen Tools, die einfach zu benutzen waren. Man muss wirklich sehr viel selbst machen. Sie waren keine sehr erfahrenen Spieleentwickler. Sie haben interessante Experimente gemacht. Das motivierte mich, diese Idee zu entwickeln. Das Leben passierte, die Arbeit passierte. Am Ende habe ich nur einen kleinen Teil davon programmiert und mit einigen Dingen darin wirklich zu kämpfen gehabt. Ich würde das gerne fertigstellen. Die Idee war, dass man die gesamte Szene fast vollständig deklarativ definieren kann, um ein Audioerlebnis mit Kollisionen und allem zu schaffen. Das Lustige an diesem Projekt war für mich, dass das Rendering-Medium Sound bedeutet, dass ich nichts davon beherrschen muss. Ich kann diese Engine selbst erstellen, weil 3D-Audio bereits im Browser vorhanden ist. Man kann es einfach verwenden. Positional Audio hat eine API. Die ganze schwierige Mathematik ist also schon erledigt. Es geht darum, einen guten Weg zu finden, diese Dinge so zu organisieren, dass sie einen Sinn ergeben. Mein Favorit beim Rendern von Audio ist die Tatsache, dass man alle Kollisionen so implementieren kann, als wären es Kollisionen zwischen Kugeln, und niemand wird es bemerken.
Marine: Das glaube ich dir. Wow. Das ist erstaunlich. Ich habe eine so tiefgründige Antwort nicht erwartet. Ich liebe den Fokus auf Zugänglichkeit. Großes Lob an Sie. OKAY, OKAY. Also eine andere dumme Frage. Wenn du eine neue Erlaubnis erfinden könntest, z. B. wenn du den Modus ändern könntest, blah, blah, blah, irgendwas, was würde deine neue Erlaubnis tun? Alles, was es auf der Welt gibt. Nicht nur bei Computern.
Zbyszek: Es wird wahrscheinlich sehr langweilig sein, aber meine neue Erlaubnis wäre wie, Sie wissen schon, wir haben use strict in JavaScript. Ich würde wollen, dass die neue Erlaubnis use lockdown ist, die einfach das tut, was lockdown von hard in JavaScript tut. Das ist die langweilige Antwort. Die interessantere Antwort ist, dass ich etwas einführen würde, das einfach alle mächtigen Verweise, die man aus dem ganzen Code da draußen zur Verfügung hat, wegnimmt. Man könnte sie nur an etwas weitergeben, das sie von oben nach unten verwenden will. Wenn Sie z.B. ein Programm haben, das eine Datei liest, Änderungen daran vornimmt und sie zurückschreibt, wie ein Linter für Ihren Code, dann hat dieser Linter, wenn er läuft, Zugriff auf Ihr gesamtes System, genau wie der Benutzer, Sie, weil Sie ihn als Ihren eigenen Benutzer ausführen. Ich möchte, dass es einfach ist. Das ist eine große Herausforderung. Ich möchte, dass es einfach ist, dieses Programm ohne jegliche Berechtigungen auszuführen, außer denen, die ihm direkt gegeben werden. Sie haben also Zugriff auf diese Dateien, können sie lesen und in sie schreiben. Das ist alles, was Sie tun können. Nichts anderes steht Ihnen zur Verfügung, als gäbe es sie nicht. Ich fände es schön, wenn das der Fall wäre. Es gibt sogar diesen Preis vom Foresight Institute. Er heißt Norm-Hardy-Preis. Er erinnert an Norm Hardy, der bei dieser Idee Pionierarbeit geleistet hat, und sucht nach neuen Forschungsergebnissen darüber, wie man Nutzern die Möglichkeit geben kann, zu entscheiden, wie sie bestimmten Richtlinien zustimmen, und zwar mit einer Benutzererfahrung, die es nicht leicht macht, sie auszutricksen. Dies ist meine sehr einfache Erklärung dazu. Schlagen Sie es nach. Das Thema ist hochinteressant, denn wir haben eine Situation geschaffen, in der unsere Software unsicher ist. Das ist theoretisch möglich, und es gibt Leute, die daran arbeiten. Gehärtetes JavaScript ist übrigens einer der Versuche. Es wird daran gearbeitet, Software-Paradigmen zu entwickeln, die nicht die Unsicherheit aufweisen, die überall sonst üblich ist. Es ist der gleiche Fehler, den wir immer wieder machen, nämlich Befehle mit Eingaben zu vermischen. Wir haben keinen getrennten Speicher für Programme und für Daten, und wenn Sie Ihr C-Programm oder Ihre CPU nur ein wenig verwirren, wird es anfangen, etwas auszuführen, das eigentlich Daten sein sollten. Dies ist eine der Manifestationen dieses Phänomens, allerdings in Hardware. Die Idee hier ist, eine Situation zu schaffen, in der alles, jede Erlaubnis verweigert wird, bis man sie bekommt. Das bedeutet, dass wir Interaktionen zwischen Mensch und Computer entwickeln müssen, die diese Art von Verhalten für den Menschen nutzbar machen, denn eine durchschnittliche App, die Sie verwenden, nutzt nicht nur die 15 Dinge, denen Sie bei der Installation der App zugestimmt haben. Sie nutzt eine ganze Reihe von Funktionen, die ihr standardmäßig zur Verfügung stehen. Wenn wir sie immer spezifischer machen wollen, müssen wir uns Interaktionen ausdenken, bei denen die Benutzer nicht nur in der Lage sind, ihr Berechtigungen für bestimmte Dinge zu erteilen, sondern auch in der Lage sind, zu verstehen, was sie tun, und nicht leicht dazu verleitet werden können, Berechtigungen zu erteilen, die sie nicht beabsichtigt haben. Während die meiste Software auf diese Weise funktioniert, ist dies ein Problem, das immer dann wichtig wird, wenn man sich mit supersicheren Systemen, Kryptographie oder elektronischem Geld beschäftigt. Die ganze Krypto-Sache mit all den merkwürdigen Dingen, die damit zusammenhängen, hat zu vielen interessanten Entwicklungen im Bereich der Sicherheit geführt, weil man mit der bestehenden Sicherheit nicht mehr auskommt. Man muss anfangen, darüber hinauszugehen.
Marine: Sie haben geantwortet wie ein echter Sicherheitsexperte, richtig? Sie sprechen von grundsätzlich zugänglicher defensiver Programmierung. Das ist hochinteressant. Nun, vielen Dank für Ihre Zeit. Es war super interessant für mich, ein bisschen mehr über LavaMoat zu erfahren und darüber, was ihr macht. Ich hoffe, ihr bekommt ein paar neue Mitwirkende. Und ich freue mich darauf, Sie bald auf der Bühne zu sehen, hoffe ich.
Zbyszek: Oh, das erinnert mich daran, dass ich ein paar CFP-Einreichungen machen muss. Für das nächste Jahr habe ich noch nichts geplant.
Marine: Sehen Sie? Zeit, sich darum zu kümmern.
Zbyszek: Ja. Ich danke Ihnen. Ich hoffe wirklich, dass die Leute unser Webpack-Plugin ausprobieren und über etwaige Probleme berichten werden. Wenn Sie sich für diese Dinge interessieren und zufällig ein Projekt haben, das sein Frontend mit Webpack aufbaut, ist das der beste Ort, um damit anzufangen.
Marine: Wir werden alle Links teilen. Vielen Dank dafür.
Zbyszek: Ein großes Lob an MetaMask für das Sponsoring des gesamten Projekts.
Marine: Sicher. Sie haben Recht. Open Source kann nur so weit gehen. Es ist großartig, dass Unternehmen tatsächlich Zeit und Geld dafür zur Verfügung stellen. Ich stimme dir zu.