RSSAmplifier

Blog

William Durand

williamdurand.frRSS feed ↗88 posts

Latest posts

Moziversary #8

Today is my eighth Moziversary 🎂 I joined Mozilla as a full-time employee on May 1st, 2018. I previously blogged in 2019 , 2020 , 2021 , 2022 , 2023 , 2024 , and 2025 . You might have come across this built-in data consent thing for extensions in Firefox. I spent a good chunk of last year working on this project, from developing a technical proposal to implementing the feature in Gecko , Firefox…

My process for pitching projects as an engineer

This winter break has finally given me the mental space I needed, so I wrote another work-related article this month 1 , yay! This time, I’ll focus on my personal process for pitching projects as an engineer. Ever had a great idea at work but struggled to get it on the roadmap? As an engineer in an environment where product work is primarily driven by product managers, I’ve learned how to turn…

You can lead a horse to water but you can't force it to drink

It’s an unpleasant pattern, one I’m deeply aware of: the tendency to use my regular 1:1s with my manager as an outlet for pent-up frustration. While I strive for constructive dialogue, the reality is that the various challenges my team has faced over the past 3 years have created a reservoir of exasperation that sometimes spills over. It doesn’t happen every time but I wouldn’t exclude it happened…

Moziversary #7

A few days ago, this was my seventh Moziversary 🎂 I joined Mozilla as a full-time employee on May 1st, 2018. I previously blogged in 2019 , 2020 , 2021 , 2022 , 2023 , and 2024 . While I may not have the energy to reflect extensively on the past year right now, I can say with confidence that the last 12 months have been incredibly productive, and things are generally going well for me. Seven…

Firefox AI & WebExtensions

I gave an introduction to the Firefox AI runtime and WebExtensions at a French local conference this month. This article is a loose transcript of what I said. Let’s talk about Firefox, AI, and WebExtensions. Browser extensions Browser extensions are tiny applications that modify and/or add features to a web browser. Nowadays, these small programs can be written in such a way that they should be…

Senior Staff.

I remember a conversation I had with a colleague a while back, shortly after I joined, where they told me that promotions at Mozilla were almost inevitable—that if you just stuck around long enough, you’d get promoted eventually 1 . It certainly didn’t feel like that to me. I’ve been working at Mozilla for about 7 years and I was last promoted in 2021 . I joined the WebExtensions team in 2022 to…

Moziversary #6

Today is my sixth Moziversary 🎂 I joined Mozilla as a full-time employee on May 1st, 2018. I previously blogged in 2019 , 2020 , 2021 , 2022 , and 2023 . Last year, I mainly contributed to Firefox for Android as the lead engineer on a project called “Add-ons General Availability (GA)”. The goal was to allow for more add-ons on this platform. Success! More than a thousand extensions are now…

Introducing xpidump

I wrote xpidump to give a human-readable summary of some information about a Firefox add-on . It is designed to answer these two questions: is the add-on likely 1 signed? And if so, how? This tool takes an XPI file as input. XPI files are Firefox add-ons packaged as ZIP archives with the .xpi file extension. xpidump currently extracts information from up to 4 files in an XPI (depending on what is…

Moziversary #5

Today is my fifth 1 Moziversary 🎂 I joined Mozilla as a full-time employee on May 1st, 2018. I previously blogged in 2019, 2020 , 2021 , and 2022 . I spent a good chunk of last year working on Manifest Version 3 (MV3) with the rest of my team (WebExtensions / Add-ons team). My most notable “H1 2022” contributions were probably the scripting namespace and a simpler versioning format . The…

GitHub Container Registry, Proxy and Synology

Last week, I migrated a private application from Heroku to my Synology NAS (compatible with Docker). Thanks to GitHub Actions , every time the main branch of the project is updated, a new private “Docker image” is built and pushed to the GitHub Container Registry . On the NAS, one may think that running this private (“dockerized”) application is just a matter of logging in to the GitHub Container…

Containers and micro virtual machines

I wrote an article about my deep dive into containers last month. As part of this learning journey, I built a prototype named Yaman , an extremely limited yet functional container manager. In today’s article, I introduce a new sub-project named microvm . It’s an experimental container runtime that uses short-lived Virtual Machines (VMs). This isn’t forward-thinking, I developed this new prototype…

Deep dive into containers

It (almost) all started with this talk from Liz Rice that I found in my Pocket list. I spent some time on a Sunday afternoon to write the same code and decided to study more in-depth. I wanted to better understand what was behind containers and how the different technologies interacted with each other. That was a month ago or so and things got out of control pretty quickly 😅 Given there are many…

Developing Firefox in Firefox with Gitpod

Gitpod provides Linux-based development environments on demand along with a web editor frontend (VS Code). There is apparently no limit on what you can do in a Gitpod workspace , e.g., I ran my own toy kernel in QEMU in the browser. I like Gitpod because it… avoids potential issues when setting up a new project, which is great for the maintainers (e.g., it is easier to reproduce an issue when you…

Moziversary #4

Today is my fourth Moziversary 🎂 I have been working at Mozilla as a full-time employee for 4 years. I blogged two times before: in 2020 and 2021 . What happened in 2019? I. Don’t. Know. I was hired as a Senior Web Developer on addons.mozilla.org (AMO). I am now a Staff Software Engineer in the Firefox WebExtensions team. I officially joined this team in January. Since then, I became a peer of…

On writing a network stack (2/2)

I am writing a minimum viable network stack from scratch for ArvernOS (a UNIX-like toy kernel). This two-part story describes some protocols of the TCP/IP stack as well as some implementation details in the context of ArvernOS. In Part 1 of this two-part story , I presented some of the network protocols that I implemented when I started writing a network stack from scratch. In this second part, I…

Some non-production tools I wrote

This is a short article about 3 different tools I authored for my needs at Mozilla. I worked on AMO for almost 4 years and created various libraries like pino-mozlog , pino-devtools or an ESLint plugin to name a few. These libraries have been created either to improve our developer experience or to fulfill some production requirements. This isn’t the kind of projects I want to focus on in the rest…

SPI flash content analysis and firmware reconstruction

I wrote a [Twitter thread about hardware hacking] 1 some time ago. The idea was to explain one way to obtain privileged access on a device. In this case, the target was a cheap Chromecast-like device (more on that below) and I “easily” got root access via UART. This article explains how I reconstructed a modified firmware for this device. Overview of the Chrome/Mira/Any-cast device The target was…

On writing a network stack (1/2)

I am writing a minimum viable network stack from scratch for ArvernOS (a UNIX-like toy kernel). This two-part story describes some protocols of the TCP/IP stack as well as some implementation details in the context of ArvernOS. There are different ways to approach a problem like “let’s write a network stack”. The most sane solution is probably to not do it because there are many great…

I joined a new team (at Mozilla)

The year is 2022 and I am still using my blog to share personal-ish status updates. Today’s post is about my career. I work at Mozilla for ~4 years now (including my time as a contractor). After having worked on many things and getting a promotion not too long ago, I made a lateral move . I am now a full-time Firefox engineer , working on the WebExtensions API . I’ve been working on “web apps” for…

ArvernOS in 2021

ArvernOS is a side project I started to learn more about operating systems and low level development. I usually work on it for a few weeks in a row, then pause it for a long time until I come back to it again. At the begin of the year, I tried to make ArvernOS run on a Raspberry Pi 2 . It was challenging because the original code was written for x86_64 and QEMU. It kinda worked and I learned a few…

On pretty printers

Pretty printers are tools used to format textual content according to a set of stylistic conventions. Prettier , black , rustfmt are great examples of such tools, which we call “code formatters” because they are applied to source code. Users can usually specify the maximum line length and the type of indentation (spaces or tabs) among other things but those two are responsible for endless debates…

An introduction to `git worktree`

This is a quick introduction to a git feature I use quite often because I find it better than simple branches in some cases. git worktree can help “manage multiple working trees attached to the same repository” . Instead of having different branches within the same folder, you have distinct folders (working trees) bound to the same git repository. In other words, this feature allows you to work on…

Moziversary #3

Three years at Mozilla, yay! 🎉 It’s my longest time at the same company, and I am now a Staff Software Engineer . What a ride! A year ago, I wrote that I was starting to be more involved in Firefox . I worked on very diverse projects in 2020 but one of them was super fun: we revamped the AMO statistics and it required backend changes on AMO, some ETL/BigQuery work, and new data collection in…

Yes, it happened on Slack

This is one of those moments worth calling out explicitly. Yes, it happened on Slack Here, it refers to a decision, an agreement, or some important results. All of these should NOT have been left on Slack alone. At the very least, the Slack threads or some key messages should have been copied into some more open and permanent places like Bugzilla or GitHub (in public issues). It won’t come as a…

Introducing srht.vim

Sourcehut is a free and open source platform to develop software. It provides different services like git hosting, issue tracking, continuous integration and mailing-lists. This platform also offers secondary services such as a “pastebin-like” tool named paste.sr.ht . As a long-time and frequent GitHub user, I use two essential vim plugins to collaborate: vim-fugitive : I use the :GBrowse command…

I got a promotion!

Long story short, I have been promoted to Staff Software Engineer . Julia Evans explains what a senior engineer’s job is and her blog post describes my role well enough, which is why I won’t go into details here. Instead, I chose to write a more personal “status update”. First of all, Mozilla has a great [career path for engineers] 1 , which doesn’t force folks who like to code to become managers,…

First patch in the Linux kernel

Below is the very first patch that I recently landed in the Linux kernel: diff --git a/drivers/staging/rtl8192e/rtllib_wx.c b/drivers/staging/rtl8192e/rtllib_wx.c index aa26b2fd2774..2e486ccb6432 100644 --- a/drivers/staging/rtl8192e/rtllib_wx.c +++ b/drivers/staging/rtl8192e/rtllib_wx.c @@ -341,8 +341,6 @@ int rtllib_wx_set_encode(struct rtllib_device *ieee, goto done; } - - sec.enabled = 1;…

Rebasing without `git rebase`

My git workflow involves creating a lot of short-lived branches (a.k.a. feature branches), switching between them and, sometimes, I need to rebase one of these branches. git rebase is a super useful git command and I recommend everyone to get more familiar with it (take a look at git rebase in depth for instance). My feature branches usually contain a single commit (of interest) and when there are…

Introducing chipolata: a CHIP-8 interpreter

A few weeks ago, I wrote a CHIP-8 interpreter named chipolata (you can take a look at the online demo here ). This article gives a quick tour of this project. CHIP-8 is a programming language that has been used to write video games on a few different platforms in the 70s-80s. There are tons of interpreters already, and mine isn’t fundamentally different I believe. Context One of my personal…

Bare-metal Raspberry Pi 2 programming

Last week-end, I started to play with ArvernOS (my very own 64-bit kernel) and one of the Raspberry Pi 2 I had in a drawer (32-bit architecture unfortunately but that’s a story for another time). After a few hours, I was able to run ArvernOS with most features disabled on real hardware (getting it to run in QEMU was surprisingly straightforward). In the following, I’ll explain the boot sequence of…

Feature flags in real life

Many folks are familiar with the concept of feature toggles (also known as feature flags ) but they do not necessarily use them because <insert reason here>. This is a very powerful technique that allows teams to ship new features and/or experiments in a controlled way. My team uses different flavors of feature toggles on the AMO platform, and that is what I am going to describe in this article.…

Moziversary #2

Today is my second Moziversary. I joined Mozilla as a full-time employee on May 1st, 2018, not too long after contracting with them via my previous company. I am part of the Firefox Add-ons team and I work on AMO , which is much more than “just a website”. I spent 2019 working on the server stack as well as creating and deploying new security tools to cope with malicious activities. Everyone seems…

Suggested changes in code reviews

I recently wrote that I wanted to blog more often and share how I work . Today’s article is about suggestions in code reviews. A little more than a year ago, GitHub introduced a button to suggest changes when reviewing Pull Requests. It’s a neat but somewhat limited feature. I only use this button as a replacement for (rather confusing) comments like s/typo/fix/ (which means: “please replace…

Unit testing C code with LD_PRELOAD

One of my side projects is a tiny kernel/operating system , which I started to learn more about operating systems (OS) and kernel development in general. The codebase is fairly small (around 4K lines of code at the time of writing) but I started to face a few bugs that I could have likely avoided with unit testing. Writing a kernel often implies creating a lot of things from scratch, even the most…

SIGCONT

I have never been really good at blogging consistently. The truth is: it’s hard, for multiple reasons. I used to write without fear when I was younger, so what happened? Over the last five years, I learnt a lot about various topics and the more I was learning, the more I was scared of actually not knowing anything. And this weird feeling became much stronger after I had a life incident 3.5 years…

Malware analysis writeup: Heodo (2/2)

This is Part 2 of a malware analysis I did last week. This time, it was not an exercise! In Part 1 , I described how I extracted a PowerShell script executed by a VBA macro hidden in a Word document. At the end, I was able to download the program that was supposed to be downloaded by the PowerShell script. In the sequel, I am going to describe the analysis of this program named 71.exe . First look…

Malware analysis writeup: Heodo (1/2)

This is Part 1 of a malware analysis I did this week. This time, it was not an exercise! I started digging into “malware analysis” some time ago, mostly because I did not know anything about malware (except that they were not nice). I still do not know a lot about this topic, but I learned a few things already. In the sequel, I am going to describe why and how I analyzed the first part of this…

Reviewing the FlexiSpot Desktop Workstation 27 inches

Disclaimer: Loctek Inc. contacted me spontaneously and offered me the product I am going to write about for review purposes. I agreed to do the review and asked about return shipping, only to be told that they offered me the product. I received a free workstation in return for a review. I asked whether I could write anything about it in this review and that was OK. This review is my very own…

PhD: ✔️

The more I learn, the more I realize how much I don’t know. Albert Einstein Three years ago , I started a PhD. I am happy to let the Internets™ know that I successfully defended it two weeks ago! I can now officially call myself a doctor (LOL). In case you’re interested or simply curious, you can download the manuscript here: Automated Test Generation for production systems with a Model-based…

Patching the Linux kernel (Raspbian &amp; CVE-2016-0728)

CVE-2016-0728 has been disclosed earlier this week and it is a serious security issue . The vulnerability affects most of the Linux kernel versions (3.8 and above). Although the exploit seems tricky to successfully use, it is still a flaw that has to be patched ASAP. I use a few Raspberry Pis for a while now and they all run Raspbian , a Debian-based distribution for Raspberry Pi. I tried to…

My life on The Internets: a year later

It’s been a year since I changed the way I deal with my Internet presence . I would like to share some updates in this article. In short, I am pretty satisfied with my current setup but a few things could be improved. I am more than happy with Fastmail (affiliate link) for emails, calendars and contacts. It works very well! It has everything I ever needed and the support team has been amazing! The…

Level up

What I have delayed as long as I could finally happened: deciding on what to do professionally speaking. Yup , it is almost time for me to leave University after nine years studying tons of different topics. Fortunately, I had the opportunity to work beside my studies. Also, Open Source gave me some keys to explore the real world by myself so I knew what a “job” was. I was just too scared, and…

[Video] Nobody understands REST but that's OK ;-)

Last month, I gave a talk on why nobody understands REST at PHP Tour Luxembourg 2015 . It is not quite right to say “nobody” understands X , no matter the topic. The title of this talk is definitely catchy! The aim of this presentation was to explain how complicated REST was, and describe why it was impractical in real life (with concrete examples). I also gave some ideas to build powerful and…

On capifony and its future

Hi! This is your captain speaking. capifony is based on Capistrano v2.x and will stick to this version (i.e. capifony is feature-frozen, and will only accept bug fixes). At the time of writing, Capistrano v3 is the current major version, and capifony is not compatible with it. Don’t worry, there is a plugin for that! Using Capistrano v3 + capistrano/symfony (heavily inspired by capifony ) may be…

Playing with a ESP8266 WiFi module

I started to play with some Arduino -based technologies after having built my very own Arduino board at AcoLab 1 a few weeks ago. I’ve been working on a project to connect a coffee machine to the Internets. In this article, I introduce the ESP8266 WiFi module, courtesy of @disk_91, from a “user perspective”. I have a ESP-01 module (ESP8266 being a microchip with its own built-in TCP/IP stack). It…

Je n'ai rien a cacher (I've got nothing to hide)

This week, I launched jenairienacacher.fr , a website explaining what is wrong with the “nothing to hide” argument, and providing information, data, and facts on this topic. This is my first project written in French (as far as I can remember), however @Guyzmo made an English version of the content (that isn’t available anymore, unfortunately). I know quite a lot of people who think they don’t…

Rethinking My Life (On The Internets)

The Internets. This wonderful land where everything is free , public , and… persistent . LOL I often carefully chose what I put online: comments, documents, pictures, etc. I wrote often here because it took me a while to educate myself , to learn and understand the implications of my behavior on Internet. I started using Internet when I was 18 -ish , because of my studies to be honest, since I was…

A year in pictures

Open Source and work put aside, here are some of my greatest moments in 2014. January Visiting my sister + City Trip — Brussels, Belgium February Clermont’ech 1st Birthday — Clermont-Fd, France March Skiing with friends — French Alps, France April Running — Gergovie, France May Visiting @KPhoen + City Trip — Montreal, Canada City Trip + Visiting @jmikola — New York City, USA Visiting Julien + City…

Configuring SSL/TLS With Hipache (And Node.js)

Lately, I have been working on configuring a SSL/TLS layer for a project. As you may (or may not) think, it is not only about creating SSL certificates. In the following article, I am going to describe how to properly configure SSL/TLS with Hipache , a distributed HTTP(s) and websocket proxy. Disclaimer: even if I am really interested in security, I am not a security expert. Getting SSL…

Elasticsearch, Logstash &amp; Kibana with Docker

Yesterday, I gave a talk on how I use Docker to deploy applications at Clermont’ech API Hour #12 , a French local developer group. I explained how to create a simple yet robust infrastructure to deploy a web application and a few services with zero downtime . In order to monitor my infrastructure, and especially the HTTP responses, I gave the popular ELK stack a try. ELK stands for E lasticsearch…