Jonathan Protzenko

I am now a researcher in the
RiSE group
at Microsoft Research Redmond.
These days, my main area of interest is F*, the new language of the future, in
particular its application to the miTLS
project. My new project, KreMLin, compiles a
subset of F* programs into efficient, readable C code. The flagship
application is HACL*, a side-channel
resistant, memory-safe, functionally-correct cryptographic library.

I spent most of 2015 working with the
BBC on the micro:bit, a
cool device that will hopefully get more kids into programming.
Previously, I spent a bunch of time at
INRIA, where I worked with
François
designing
Mezzo, the (former) language of the
future.

Jonathan Protzenko. Pushing Blocks all the way to
C++. In Proceedings of the 1st Blocks and Beyond Workshop,
2015 [ PDF ]

🌲 Mezzo

My PhD thesis was about
Mezzo. Mezzo is a programming
language in the tradition of ML, which tracks ownership and aliasing
in an accurate manner. Thanks to a careful balance between static
verification and runtime checks, we believe Mezzo enables the
programmer to write more powerful programs, especially in a concurrent
setting.

Thibaut Balabonski, François Pottier, and Jonathan Protzenko.
The design and formalization of Mezzo, a
permission-based programming language.
ACM Transactions on Programming Languages and Systems
(TOPLAS),
November 2015.
[ PDF ]
This is the reference paper:
starts with a gentle introduction, moves on to the core
language, defines the syntax and type system. A major section of
the paper describes the newer, modular proof of soundness. We
also talk about the implementation.

François Pottier and Jonathan Protzenko.
A few lessons from the Mezzo
project.
In Summit oN Advances in Programming Languages (SNAPL),
May
2015.
[ PDF ]
A retrospective on the project, and a
few things we've learned.

Jonathan Protzenko. Functional Pearl: the Proof Search
Monad. In Proceedings of the 11th Workshop on the
Implementation of Logics (IWIL), 2015 [ PDF ]This is a neat trick used in the implementation
of the Mezzo type-checker that I extracted and presented in a
standalone manner.

Thibaut Balabonski, François Pottier, and Jonathan Protzenko.
Type soundness and race freedom for
Mezzo
In Proceedings of the 12th International Symposium on Functional
and Logic Programming (FLOPS 2014), volume 8475, pages 253-269, June 2014.
[ PDF ]
The submitted journal paper contains more
information about the proof of soundness.

Jonathan Protzenko. An introduction to Mezzo.
[ Part
1, Part
2 ]An informal, tutorial-style introduction to
Mezzo on the team's blog.

🌲 OCaml

Jonathan Protzenko, Gabriel Scherer.
A toy type language
[ Part 1,
Part 2,
Part 3 ]A three-part series. The first part is about
writing a parser and a pretty-printer with a one-to-one
correspondence so that the pretty-printer does "perfect
parenthesizing". The second part is about variance, presented as
a system of mutually recursive equations. The last part is about
solving the equations using Pottier's Fix
library. No groundbreaking science in there, but mostly a
collection of nice tricks that didn't seem to be widely known.

🌲 Books and other publications

Jonathan Protzenko, with contributions by Benoît Picaud.
Les Cahiers du programmeur XUL, Eyrolles, 2005.
[ the book's website ]
I wrote a book about developing Mozilla addons. I was younger,
back then.

🌲 Selected talks

Secure compilation from F* to C using the KreMLin
compiler, Models and Tools for Security Analysis and
Proofs (MTP), 2017.
[ PDF ]
This is an improved version of talk previously given at the ML
Workshop (2016) and the Secure Compilation Meeting (POPL'17
workshop).

The BBC micro:bit and TouchDevelop (keynote),
Programming for Mobile and Touch (PROMOTO) 2015.
[ PPTX ]
Talk
also given at the Workshop on Programming Languages
Technology for Massive Open Online Courses (PLOOC), 2015.

🌲 Teaching assistantship

2013-2014 I worked on the
online algorithms course from École Polytechnique, on Coursera.

2011-2013 I was a teaching assistant for INF431
(algorithms) and « Modal Web » (Web programming) at École
Polytechnique

2010-2011 I was a teaching assistant for INF311
(introduction to algorithms) at École Polytechnique

Hacking

🌲 The BBC micro:bit

I did a few fun hardware projects with the BBC micro:bit. Here's
some cursory instructions for creating a clock / temperature display; you
can also live-stream sensor data from the micro:bit to your
javascript web page over usb (very
rough instructions).

🌲 OCaml

When I get headaches from working on type systems, I maintain the
OCaml installer for Windows. Not sure what's worse.
[ download ]
[ on GitHub ]

🌲 Mozilla

I'm a Mozilla contributor although I haven't had much time available
lately. I maintain addons, attend MozCamps when time permits, give a
few talks here and there, and occasionally lurk on IRC.
I mostly hack on Thunderbird, but I've been known to fix
a few bugs in Gecko and Firefox.

Compose for Thunderbird, abandoned
Re-implements the composition workflow, including the UI, and the
sending backend, in Javascript, by leveraging CKEditor. That's
just too much work for a single person, so I abandoned the
project. Plus, I'm trying to get a life.
[ download it ]
[ on GitHub ]

Thunderbird Stdlib
A toolkit that you can build upon for your Thunderbird addons.
Used heavily by Conversations and Compose.
[ on GitHub ]

FOSDEM 2011
I gave a talk on developing Thunderbird Addons at FOSDEM 2011,
in Brussels. I don't know where the slides are. Anyway, the ones
from the MozCamp are better.

🌲 Misc.

A stylesheet for LaTeX documents.
It gives a very condensed, two-column layout for article
document classes. It also adds a \part command that gives
the book-like heading seen in my reports (see here for an example). The heading
was initially an attempt to reproduce the style of the French
LaTeX pour l'impatient book.
[ the stylesheet ]

An IRC client written in PHP-GTk.
When I was in high school, I would stay up all night during summer
break and code like a madman. Those were the days.
[ the result ]

The source code is
GPL-licensed, the text is .
Of course, it doesn't validate.
But guess what? It still displays fine.