About Me

About Me

I am a sixth year PhD student at the University of Massachusetts Amherst. I work in the PLASMA lab with Emery Berger. Feel free to contact me if you want to get in touch!


My research aims to improve the browser as an application platform by making it easier to write, debug, and optimize complex web applications. To that end, my research interests include debugging, software performance, operating systems, and programming languages.

ReJS: Time-Travel Debugging for Browser-Based Applications

John Vilk, James Mickens, and Mark Marron

Browser-based applications are difficult to debug because they are inherently nondeterministic. Network requests can intermittently fail or return unexpected results, JavaScript events can race with one another, and JavaScript code can race with the browser’s renderer. Traditional stepping debuggers provide little help to developers trying to debug these issues.

We present ReJS, the first time-traveling debugger for browser-based applications that lets developers step forward and backward in time to isolate non-determinacy bugs. ReJS faithfully and efficiently reproduces nondeterministic behavior, and supports existing GUI debugging tools during time-travel because it keeps the browser’s renderer live and in sync with JavaScript execution. To make time-travel possible, we extend the renderer with a small number of non-intrusive interrogative interfaces that expose previously hidden runtime information. ReJS imposes imperceptible tracing overhead, its logs typically grow less than 1 KB/s, and, after a one-time startup delay, stepping backward is as fast as stepping forward. Core parts of ReJS have been incorporated into Microsoft’s ChakraCore JavaScript engine.

This work is currently in submission.

Browsix: Bridging the Gap Between Unix and the Browser

Bobby Powers, John Vilk, and Emery D. Berger

Applications written to run on conventional operating systems typically depend on OS abstractions like processes, pipes, signals, sockets, and a shared file system. Porting these applications to the web currently requires extensive rewriting or hosting significant portions of code server-side because browsers present a nontraditional runtime environment that lacks OS functionality.

This paper presents Browsix, a framework that bridges the considerable gap between conventional operating systems and the browser, enabling unmodified programs expecting a Unix-like environment to run directly in the browser. Browsix comprises two core parts: (1) a JavaScript-only system that makes core Unix features (including pipes, concurrent processes, signals, sockets, and a shared file system) available to web applications; and (2) extended JavaScript runtimes for C, C++, Go, and Node.js that support running programs written in these languages as processes in the browser. Browsix supports running a POSIX shell, making it straightforward to connect applications together via pipes.

We illustrate Browsix’s capabilities via case studies that demonstrate how it eases porting legacy applications to the browser and enables new functionality. We demonstrate a Browsix-enabled LaTeX editor that operates by executing unmodified versions of pdfLaTeX and BibTeX. This browser-only LaTeX editor can render documents in seconds, making it fast enough to be practical. We further demonstrate how Browsix lets us port a client-server application to run entirely in the browser for disconnected operation. Creating these applications required less than 50 lines of glue code and no code modifications, demonstrating how easily Browsix can be used to build sophisticated web applications from existing parts without modification.

This work was recently accepted to ASPLOS 2017.

SurroundWeb: Mitigating Privacy Concerns in a 3D Web Browser

John Vilk, David Molnar, Eyal Ofek, Chris Rossbach, Benjamin Livshits, Alexander Moshchuk, Helen J. Wang, and Ran Gal

Immersive experiences that mix digital and real-world objects are becoming reality, but they raise serious privacy concerns as they require real-time sensor input. SurroundWeb is the first 3D web browser that provides the novel functionality of rendering web content onto a room while tackling many of the inherent privacy challenges. Following the principle of least privilege, we propose three abstractions for immersive rendering:

  1. The room skeleton lets applications place content in response to the physical dimensions and locations of renderable surfaces in a room.
  2. The detection sandbox lets applications declaratively place content near recognized objects in the room without revealing if the object is present.
  3. Satellite screens let applications display content across devices registered with SurroundWeb.

We implement these abstractions in a prototype system, and demonstrate that a wide range of immersive experiences can be implemented with acceptable performance. SurroundWeb will appear at IEEE Security and Privacy 2015.

Doppio: Breaking the Browser Language Barrier

John Vilk and Emery D. Berger

Doppio is a JavaScript-based runtime system that makes it possible to run unaltered applications written in general-purpose languages directly inside the browser. Doppio provides a wide range of runtime services, including a file system that enables local and external (cloud-based) storage, an unmanaged heap, sockets, blocking I/O, and multiple threads. We demonstrate Doppio’s usefulness with two case studies: we extend Emscripten with Doppio, letting it run an unmodified C++ application in the browser with full functionality, and present DoppioJVM, an interpreter that runs unmodified JVM programs directly in the browser. This work appeared at PLDI 2014, won the Distinguished Artifact Award, and was selected as a SIGPLAN Research Highlight!

DoppioJVM is currently used by the University of Illinois at CodeMoo.com to teach children how to program in Java, and components of Doppio are used by the MS-DOS Collection at the Internet Archive.

Side Projects

Occasionally, I find the time to work on some fun side projects.

MakeTypes: TypeScript Types from JSON Examples

MakeTypes lets developers typecheck code that interacts with JSON services by generating TypeScript types from JSON examples. MakeTypes can also optionally perform runtime type checking to enforce these types at runtime, guarding code against unexpected service responses.

MakeTypes uses the Common Preferred Shape Relation from this PLDI paper.

TypeScript Generator for Dropbox’s Stone

Stone is a language-agnostic specification language for APIs. Stone’s generators can generate SDKs for a variety of languages from a Stone specification, including JavaScript.

I mapped Stone’s types onto TypeScript’s type system, and implemented a Stone generator that produces TypeScript definition files for its JavaScript generator.

This generator will eventually provide TypeScript types for the Dropbox JavaScript SDK.

MS-DOS Collection at the Internet Archive

The MS-DOS Collection at the Internet Archive relies on Doppio’s file system to make a large collection of DOS games playable in the browser. I added support for union mounting into the file system to support layering a mutable file system on top of an immutable zip file, making it possible to save game progress to in-browser storage. I also worked with archive employees to integrate the file system appropriately, and to address a complex Cross-origin Resource Sharing (CORS) issue that prevented the initial deployment from working in Internet Explorer and Safari.

JSMESS: Multi Emulator Super System in JavaScript

The JSMESS project aims to port the Multi Emulator Super System (MESS) to JavaScript to enable accurate and embeddable vintage computer and video game console emulators in the browser. This project has enabled the Internet Archive to provide its visitors with interactive demos of vintage and historical software for educational purposes. We use Emscripten along with tweaks to the MESS source code to accomplish this feat.

SDL Joystick Support in Emscripten

I augmented Emscripten’s SDL emulation with support for the SDL Joystick API using the HTML5 Gamepad API. As a result, SDL applications ported to the web with Emscripten, such as JSMESS, will function appropriately with USB gamepads. This code has been integrated into the Emscripten code base, and is present in Emscripten releases since v1.7.3.


  • Research Intern, Microsoft Research, Summer 2015.
  • Research Intern, Microsoft Research, Summer 2014.
  • Research Intern, Microsoft Research, Summer 2013.
  • Software Engineering Intern, Google, Summer 2012.
  • Research Assistant, University of Massachusetts, 2011 to present.
  • Research Intern, MIT Lincoln Laboratory, Summer 2011.
  • Software Engineering Intern, SoftArtisans Inc., Summer 2010.


  • Ph.D. in Computer Science, University of Massachusetts, In Progress.
  • M.S. in Computer Science, University of Massachusetts, 2014.
  • B.S. in Computer Science, Worcester Polytechnic Institute, 2011.


  • IEEE Security & Privacy Student Travel Grant Recipient, IEEE S&P 2015.
  • Facebook Fellowship for the 2015-2016 and 2016-2017 academic years, February 2015.
  • SIGPLAN Research Highlight for Doppio, November 2014.
  • USENIX Student Grant Recipient for travel to OSDI 2014.
  • Distinguished Artifact Award for Doppio: Breaking the Browser Language Barrier, PLDI 2014.
  • SIGPLAN PAC Student Travel Grant Recipient for travel to PLDI 2014.
  • Programming Languages Mentoring Workshop Travel Grant Recipient, POPL 2012.
  • Upsilon Pi Epsilon computer science honor society member, inducted into the WPI chapter in 2011.
  • Salisbury Prize, WPI, 2011.
    • Awarded for completing all of my requirements at WPI “faithfully, industriously, and with distinguished attainment”.
  • Dr. Neil G. Sullivan Memorial Award, WPI, 2010.
    • Awarded annually to three junior undergraduates in recognition of their demonstrated ability and promise.
  • WPI Student Employee of the Year Nominee, WPI, 2009-2010.
  • Charles O’ Thompson Scholar, WPI, 2008.
    • Recognizes outstanding performance by first-year undergraduate students.

Professional Activities

  • External Review Committee Member, PLDI 2017.
  • External Review Committee Member, PLDI 2016.
  • Mentor, Computing Beyond the Double Bind Mentoring Network, 2015-2016.
    • As a part of this program, I remotely mentor two undergraduate women of color to provide them with a listening ear and professional guidance.
  • Member, IEEE, 2015-present.
  • Member, USENIX, 2014-present.
  • Graduate Representative, academic year 2014-2015, University of Massachusetts School of Computer Science.
    • Graduate representatives attend and vote during faculty meetings, meet and provide feedback on faculty candidates, and form a bridge between the graduate students and the faculty as a whole.
  • Student Volunteer, PLDI 2016, PLDI 2016 PC Meeting, OOPSLA 2014.
  • Artifact Evaluation Committee Member: OOPSLA 2015, PLDI 2015, OOPSLA 2014.
  • External Reviewer: USENIX Security 2014, PLDI 2014, OOPSLA 2012, MSPC 2012, HotPar 2012.
  • Member, ACM, 2008-present.


  • Guest Lecturer, COMPSCI 326: Web Development, University of Massachusetts Amherst, Spring 2016.
  • T.A., COMPSCI 326: Web Development, University of Massachusetts Amherst, Spring 2016.
    • For a class of 100 undergraduates, I developed the curriculum, designed and wrote all of the assignments, graded most assignments, held office hours, and answered hundreds of questions on Piazza.
  • Mentor, Doppio, PLASMA Lab, Google Summer of Code, Summer 2015.
    • Students: Muhammad Bhatti
  • Mentor, Doppio, PLASMA Lab, Google Summer of Code, Summer 2013.