Plongez dans le monde du JavaScript renforcé, de LavaMoat et de la sécurité JavaScript avec Zbyszek "ZB" Tenerowicz (@naugtur) dans l'épisode 4 de Change Mode. De l'essai-erreur HTML à la maison à la construction de moteurs de jeu 3D inclusifs, ZB plonge dans son parcours open-source et les projets incroyables sur lesquels il continue de travailler chaque jour. Il se passionne notamment pour l'organisation d'événements internationaux pour les développeurs et la prise de parole en public à cette occasion. Entrons dans l'épisode !
Nous avons utilisé ChatGPT pour améliorer la grammaire et la syntaxe de la transcription.
Marine : Merci beaucoup de vous joindre à moi aujourd'hui. Je suis Zbyszek, également connu sous le nom de ZB pour les anglophones. Merci de nous rencontrer aujourd'hui. Pouvez-vous vous présenter et nous dire un peu ce que vous faites et pourquoi vous êtes ici ?
Zbyszek : Bonjour, je suis ZB. Vous me connaissez peut-être aussi sous le nom de Naukter en raison de mes activités en ligne. Je suis ici parce que je travaille beaucoup dans le domaine de l'open source, en particulier dans le domaine de la sécurité JavaScript. Je suis impliqué dans l'open source et Node.js depuis huit à dix ans. Actuellement, je travaille sur un projet appelé LavaMoat, qui est un projet entièrement open-source disponible sous une licence MIT.
Marine : Super, merci. Nous allons parler de LavaMoat, mais d'abord, j'aimerais mieux vous connaître. Comment en êtes-vous arrivé à travailler dans le domaine des logiciels libres ?
Zbyszek : Je suis entré dans l'open source par le biais de JavaScript. J'ai commencé à apprendre JavaScript il y a de nombreuses années, à l'école primaire. Mes parents ont acheté un PC et j'ai appris un peu comment il fonctionnait. Vers l'âge de 13 ans, j'ai commencé à apprendre le HTML par essais et erreurs. Finalement, j'ai créé mon premier site web en HTML pur et j'ai été fasciné par JavaScript. Au fil du temps, j'ai publié diverses choses sur GitHub et npm. Ma première contribution significative a été le paquet XHR, et depuis lors, j'ai été impliqué dans divers projets open-source.
Marine : C'est incroyable. Comment LavaMoat a-t-elle vu le jour ? Avez-vous rejoint le groupe alors qu'il existait déjà, ou l'avez-vous créé ?
Zbyszek : LavaMoat est né d'une peur légitime des paquets npm malveillants. Aaron, le fondateur de MetaMask, s'inquiétait de ce qui se passerait si l'une des dépendances devenait malveillante. Il a commencé à travailler sur LavaMoat, et j'ai remarqué son travail lors de mes recherches sur la sécurité de la chaîne d'approvisionnement. Après quelques discussions, j'ai rejoint l'équipe pour aider à développer LavaMoat.
Marine : C'est donc votre travail à plein temps maintenant ?
Zbyszek : Oui, je travaille à plein temps sur LavaMoat et d'autres projets liés à la sécurité chez MetaMask. Nous développons des logiciels pour prévenir les attaques et nous consultons d'autres équipes sur la sécurité du JavaScript.
Marine : Pouvez-vous nous expliquer comment LavaMoat est fabriqué et ce qu'il fait ?
Zbyszek : LavaMoat se compose de plusieurs outils. Le premier outil empêche les paquets malveillants d'utiliser des scripts de post-installation pour vous attaquer. Un autre outil exécute votre logiciel JavaScript avec une politique qui empêche les dépendances de faire des choses inattendues. LavaMoat utilise des compartiments JavaScript renforcés pour isoler les dépendances et s'assurer qu'elles ne peuvent pas effectuer d'actions malveillantes. Le JavaScript renforcé, également connu sous le nom de SES (Secure ECMAScript), est un concept destiné à être intégré au langage lui-même. Il est déjà mis en œuvre et fonctionne avec un minimum de compromis.
Marine : C'est fascinant. Combien de personnes contribuent à LavaMoat ?
Zbyszek : Environ quatre personnes travaillent directement sur LavaMoat. Nous contribuons également à Endo, l'environnement d'exécution de LavaMoat, qui compte davantage de contributeurs.
Marine : Que doit faire une personne qui souhaite contribuer à LavaMoat ?
Zbyszek : Prenez contact avec nous. Nous organisons des conférences téléphoniques hebdomadaires sur Zoom, ouvertes à tous ceux qui souhaitent y participer. Rejoignez l'appel, voyez ce qui se passe et commencez à expérimenter. Signaler des problèmes et nous aider à les résoudre est également une excellente façon de contribuer.
Marine : Vous avez mentionné qu'il vous arrive de faire des démonstrations lors de conférences. Comment en êtes-vous venu à parler en public ? Est-ce parce que vous êtes passionné par le partage de vos connaissances ?
Zbyszek : Je ne peux pas m'arrêter. J'ai commencé très tôt. La première conférence que j'ai donnée dans le cadre d'une rencontre locale remonte à 2011. Les organisateurs me faisaient savoir chaque fois qu'ils en organisaient un autre, et j'ai continué à donner des conférences. Je me renseignais sur certains sujets dans le seul but d'en apprendre suffisamment pour pouvoir donner une conférence à ce sujet. J'ai appris l'audio web juste pour donner une conférence à ce sujet parce que cela me semblait intéressant. C'est la continuation de cette passion de mettre des choses dans la tête des gens. J'ai joué à de nombreux jeux de rôle lorsque j'étais adolescent et j'aimais beaucoup être le narrateur du jeu. Je pense que c'est une continuation de cela. J'ai parlé de JavaScript et de Node.js. En particulier les diagnostics et les performances dans Node.js. Ensuite, je suis passé à un peu plus de sécurité et je me concentre sur la sécurité depuis lors.
Marine : C'est vraiment cool. J'adore l'analogie avec les jeux de rôle. Je vais peut-être la voler. Je pense que vous aidez également à organiser des conférences, n'est-ce pas ?
Zbyszek : Oui. Cette rencontre locale a pris de l'ampleur. À un moment donné, je suis passé du statut d'orateur régulier à celui d'organisateur. J'ai donc cessé de prendre la parole à chaque fois et j'ai commencé à demander à d'autres personnes de le faire. J'organisais le meetingup local. La famille du meetup s'est en fait étendue à plusieurs villes. À un moment donné, ils ont eu besoin d'un nouveau coordinateur. J'ai donc pris le rôle de coordinateur. Je ne peux pas dire que j'ai fait du bon travail, parce qu'il est impossible de coordonner cette chose, mais j'ai essayé. La famille Meetup organisait en fait une conférence chaque année, et nous cherchions quelqu'un qui oserait organiser une conférence. Nous n'avons pas d'entité légale, nous n'avons rien, nous sommes juste une bande de passionnés qui organisent des Meetups dans différentes villes de Pologne. Nous avons donc essayé de convaincre quelqu'un, chaque année, d'organiser une conférence qui permettrait aux gens de se réunir en un seul lieu et de se rencontrer dans plusieurs villes. J'ai organisé les conférences de 2014, 2018 et 2022, et j'ai participé à quelques autres. C'est très amusant, surtout le jour de la conférence, on éteint les incendies, on court partout, on anime la conférence. Je ne sais pas, je fais ça pour m'amuser. Mais nous avons aussi réussi à gagner un peu d'argent. Mais comme je l'ai dit, nous n'avons même pas d'entité légale. Alors que faire de l'argent ? La réponse est simple : nous le donnons. Il s'agit de conférences caritatives, et chaque fois que nous en organisons une, nous trouvons une organisation caritative avec laquelle travailler, et elle reçoit tout l'argent qui nous reste de l'organisation de la conférence. Parfois, il s'agit même de restes de ce que nous recevons des sponsors, si nous n'avons pas tout dépensé, mais il s'agit surtout de l'argent que nous obtenons des billets. Nos billets sont très bon marché, mais si vous organisez une conférence pour 500 personnes, c'est toujours un peu cher. Je me suis en quelque sorte spécialisée dans l'organisation d'événements à petit budget, mais qui fonctionnent pour la communauté. Pouvoir dire que nous faisons cela pour une œuvre de bienfaisance aide à négocier des choses. Nous pouvons négocier une réduction sur la nourriture en échange d'une mention de l'entreprise de restauration qui la fournit. Je n'ai pas la mise à jour pour cette année, mais je pense que c'était similaire. En 2018 et 2022, nous avons donné à l'organisation caritative un peu plus que ce que nous avons dépensé pour organiser l'événement.
Marine : C'est incroyable. C'est incroyable.
Zbyszek : C'était amusant. Oh, et au fait, l'organisation s'appelle MeetJS.
Marine : Oui.
Zbyszek : Si vous êtes en Pologne, cherchez une rencontre ou essayez d'assister à notre conférence. Elle est en anglais. Nous voulons créer une expérience de type conférence internationale pour notre communauté, parce que ce n'est pas seulement pour les participants. Nous essayons également de donner la scène à notre communauté. Ainsi, de nombreuses personnes qui se présentent comme orateurs sont de nouveaux orateurs ou des personnes qui ne vont pas souvent à l'étranger pour parler dans des conférences plus importantes. Il s'agit parfois de leur première tentative de se produire devant un public de quelques centaines de personnes. Il s'agit de personnes issues de nos meetups locaux qui ont donné d'excellentes conférences. Nous essayons évidemment de faire venir des gens de l'extérieur. Nous avons des gens qui aiment nous rendre visite. Il y a un petit ami de la conférence qui obtient toujours un créneau, et il donne des conférences sur la sécurité JavaScript chaque fois qu'il est disponible, parce que je suis l'organisateur, donc je ne devrais pas. Il vient d'Israël, et il fait toujours en sorte que nous n'ayons pas à payer son vol, car l'argent va à une œuvre de charité. Il ne paie jamais son vol avec nous. C'est donc un bon arrangement. Je dois dire que j'aime beaucoup faire cela. Mais comme vous l'avez remarqué, je le fais tous les quatre ans, parce que c'est le temps qu'il faut pour se reposer avant d'en organiser un.
Marine : Je comprends ce que tu veux dire. Organiser des événements, c'est beaucoup de travail. C'est bien que tu aies une équipe qui te permette de te relayer et de continuer à organiser l'événement. C'est très bien. Vous aimez vraiment la communauté. Je suppose que pour vous, l'open source est aussi une affaire de communauté, et pas seulement de code et de partage, n'est-ce pas ?
Zbyszek : Oui, je dois dire que j'ai mentionné Jake, et j'ai explicitement dit qu'il était la première personne que j'ai rencontrée par le biais de l'open source, puis en personne après quelques années. C'est quelque chose qui arrive souvent de nos jours. Je rencontre beaucoup de gens dans le domaine de l'open source, puis nous nous voyons en personne lors d'événements comme la NodeConf EU. La NodeConf EU est comme des vacances pour les gens de l'open source. Nous nous réunissons et passons du temps ensemble. Nous prêtons même attention aux conférences, mais j'ose dire que ce ne sont pas les éléments les plus importants de la conférence. La NodeConf EU de cette année et de l'année dernière s'est déroulée sur quatre nuits et trois jours. Les quatre nuits sont un peu plus importantes.
Marine : C'est bien. Quel serait le projet de rêve pour toi, professionnellement ou dans le domaine de l'open source, quelque chose qui serait excitant pour toi de travailler dessus ? A moins que ce ne soit ce que LavaMoat est déjà. Je veux dire, cela pourrait être le cas.
Zbyszek : Eh bien, oui, c'est ce que j'ai pensé en commençant. Je n'arrive même pas à croire que c'est possible. Maintenant, je peux y participer. Ces gens me disent que la chose sur laquelle je suis censé travailler pendant les deux prochains mois est en fait possible. J'ai hâte d'essayer. Donc, oui, c'est vraiment mon attitude envers LavaMoat et Hardened JavaScript. J'aimerais que cela devienne quelque chose d'important. Mon projet de rêve serait de travailler sur LavaMoat dans quelques années, lorsque nous aurons déjà finalisé la prise en charge d'ESM et de Bundler et que l'adoption sera majeure. À ce moment-là, nous travaillons sur des bizarreries de sécurité très intéressantes et nous améliorons la façon dont nous définissons la politique afin que même les menaces les plus sophistiquées de l'écosystème NPM puissent l'obtenir.
Marine : C'est formidable. Vous travaillez sur votre rêve. Félicitations. Bon, j'ai quelques questions idiotes à vous poser.
Zbyszek : Ce sont les meilleures.
Marine : Si vous pouviez avoir la permission de faire n'importe quoi pendant une journée, que feriez-vous ?
Zbyszek : Dormir.
Marine : Allez. Vraiment ?
Zbyszek : Oui, je suis parent. J'ai déménagé dans une autre ville récemment. Je dormirais probablement. Mais je sais ce que vous voulez dire. Vous voulez dire open source.
Marine : Non, non. Je veux dire n'importe quoi. Si tout était permis. Non, mais je comprends.
Zbyszek : Il s'agit de se reposer. J'ai un tas d'idées de projets. Si vous me donniez un mois, et non un jour, je pourrais terminer le moteur de jeu en 3D que j'ai commencé. Ce qui est intéressant, c'est que la construction d'un moteur de jeu en 3D est plutôt inutile de nos jours, car tout est déjà disponible en open source. Mais la particularité est que mon moteur de jeu 3D sur lequel j'ai commencé à travailler rend au son et uniquement au son. C'est donc comme un jeu, mais c'est un Bobcast.
Marine : Oh, wow. Là, tu m'intéresses.
Zbyszek : C'est un genre. On l'appelait parfois jeux pour aveugles, mais en fait, c'est un genre qui s'adresse à tout le monde. Et c'est un genre qui est un peu plus inclusif. Je suis tombé sur un forum en ligne où des personnes souffrant de divers handicaps discutaient de jeux, mais aussi en créaient. Il n'y avait pas de grands outils faciles à utiliser pour cela. Il faut vraiment faire beaucoup de choses soi-même. Ces personnes n'étaient pas des développeurs de jeux très expérimentés. Ils faisaient des expériences intéressantes. C'est ce qui m'a motivé à lancer cette idée. La vie est passée par là, le travail aussi. J'ai fini par coder une petite partie du jeu et j'ai eu beaucoup de mal avec un certain nombre de choses. J'aimerais bien le terminer. L'idée était que vous puissiez presque entièrement définir la scène de manière déclarative pour créer une expérience audio avec des collisions et tout le reste. Ce qui m'a plu dans ce projet, c'est que le rendu du son signifie que je n'ai pas besoin d'être doué pour faire quoi que ce soit. J'ai créé ce moteur moi-même parce que l'audio 3D est déjà présent dans le navigateur. Il suffit de l'utiliser. L'audio positionnel dispose d'une API. Tous les calculs difficiles sont donc déjà faits. Il s'agit de trouver un bon moyen d'organiser tout cela de manière logique. Ce que je préfère dans le rendu audio, c'est que vous pouvez faire toutes les collisions, vous pouvez implémenter toutes les collisions comme s'il s'agissait de collisions entre des sphères et personne ne s'en apercevra.
Marine : Je vous crois sur ce point. Je te crois sur ce point. C'est incroyable. Je ne m'attendais pas à une réponse aussi profonde. J'aime l'accent mis sur l'accessibilité. Je vous félicite. JE VOUS FÉLICITE. Autre question idiote. Si vous pouviez inventer une nouvelle permission, comme si vous pouviez changer de mode, bla, bla, bla, quelque chose, que ferait votre nouvelle permission ? Tout ce qui existe dans le monde. Pas seulement dans les ordinateurs.
Zbyszek : Cela va probablement être très ennuyeux, mais ma nouvelle permission serait comme, vous savez, nous avons use strict en JavaScript. Je voudrais que la nouvelle permission soit use lockdown qui fait tout ce que fait lockdown de hard en JavaScript. C'est une réponse ennuyeuse. La réponse plus intéressante est que j'introduirais quelque chose qui supprimerait toutes les références puissantes disponibles dans tout le code existant. Vous ne pourriez les donner qu'à ceux qui veulent les utiliser de haut en bas. Par exemple, si vous avez un programme qui veut lire un fichier, y apporter des modifications et le réécrire comme un linter pour votre code, ce linter, lorsqu'il s'exécute, a accès à l'ensemble de votre système tout comme l'utilisateur, vous, parce que vous l'exécutez en tant que votre propre utilisateur. J'aimerais que ce soit simple. C'est un grand défi. J'aimerais qu'il soit simple d'exécuter ce programme sans aucune permission, à l'exception de celles qui lui sont directement accordées. Par exemple, vous avez accès à ces fichiers, vous pouvez les lire et vous pouvez y écrire. C'est tout ce que vous pouvez faire. Rien d'autre n'est disponible comme s'il n'existait pas. J'aimerais que ce soit le cas. Il existe même un prix décerné par le Foresight Institute. Il s'agit du prix Norm Hardy. Il s'agit d'un prix en mémoire de Norm Hardy, qui a été en quelque sorte le pionnier de cette idée. L'institut recherche de nouvelles recherches sur la manière de permettre aux utilisateurs de décider comment ils vont accepter certaines politiques avec une expérience utilisateur qui ne permet pas de les tromper facilement. Voici mon explication très peu sophistiquée de la question. Jetez-y un coup d'œil. C'est un sujet très intéressant, car nous avons créé une situation où nos logiciels sont insécurisables. C'est théoriquement possible, et des gens y travaillent. Le JavaScript renforcé est l'une des tentatives, d'ailleurs. Les gens travaillent à la création de paradigmes logiciels qui ne présentent pas l'insécurité qui est normale partout ailleurs. C'est la même erreur que nous commettons encore et encore, en mélangeant les commandes et les entrées. Nous n'avons pas de mémoire séparée pour les programmes et pour les données, et si vous confondez un tant soit peu votre programme C ou votre CPU, il va commencer à exécuter quelque chose qui était censé être des données. C'est l'une des manifestations de ce phénomène, mais dans le matériel. L'idée est de créer une situation dans laquelle toute permission est refusée jusqu'à ce qu'elle soit obtenue. Cela signifie que nous devons trouver des interactions homme-ordinateur qui rendront ce type de comportement utilisable par les humains, parce qu'une application moyenne que vous utilisez ne se limite pas aux 15 choses que vous avez acceptées lors de l'installation de l'application. Elle utilise une tonne de capacités qui lui sont données par défaut. Si nous voulions le rendre de plus en plus spécifique, nous devrions trouver des interactions qui permettraient aux utilisateurs non seulement de lui donner des permissions pour des choses spécifiques, mais aussi de comprendre ce qu'ils font et de ne pas se faire piéger en donnant des permissions qu'ils n'avaient pas l'intention d'accorder. Si la plupart des logiciels fonctionnent bien de cette manière pour l'instant, ce problème est très important lorsqu'il s'agit de systèmes super-sécurisés, de cryptographie ou de monnaie électronique. La cryptographie, avec toutes les choses bizarres qui se produisent autour d'elle, a en fait suscité beaucoup de développements intéressants en matière de sécurité, parce qu'on ne peut plus y faire face avec la sécurité existante. Il faut commencer à aller au-delà.
Marine : Vous avez répondu comme un vrai spécialiste de la sécurité, n'est-ce pas ? Tu parles de programmation défensive accessible. C'est super intéressant. Merci beaucoup pour le temps que tu nous as accordé. C'était super intéressant pour moi de comprendre un peu plus LavaMoat et ce que vous faites. J'espère que vous aurez de nouveaux contributeurs. Et je serai très heureux de vous voir bientôt sur scène, j'espère.
Zbyszek : Oh, cela me rappelle que je dois soumettre des propositions d'articles. Je n'ai encore rien prévu pour l'année prochaine.
Marine : Vous voyez ? Il est temps de s'y mettre.
Zbyszek : Oui. Je vous remercie. J'espère vraiment que les gens vont essayer notre plugin Webpack et nous faire part de leurs problèmes. Si vous êtes intéressés par ces choses et que vous avez un projet qui construit son front-end avec Webpack, c'est le meilleur endroit pour commencer.
Marine : Nous partagerons tous les liens. Merci beaucoup.
Zbyszek : Un grand merci à MetaMask pour avoir sponsorisé l'ensemble du projet.
Marine : Bien sûr : Bien sûr. Vous avez raison. L'open source a ses limites. C'est formidable que des entreprises consacrent du temps et de l'argent à ce projet. Je suis d'accord avec toi.