William Light
resume@wrl.lhiaudio.com
http://github.com/wrl
Rotterdam, NL
I am a software engineer with full-stack experience ranging from front-end web development in Javascript to in-kernel embedded system-on-chip audio drivers. Having built everything from synthesisers to end-to-end encrypted messengers, I can handle broadly scoped features and projects, managing everything from front-end to back-end considerations and anything in between. As a self-taught developer, I'm always learning and adapting, and I can easily work in new languages and frameworks, taking very little time to get up to speed.
With my approachable and easygoing personality, I also work well as a liaison between development teams, and I have a talent for explaining even arcane technical subjects in easy-to-understand terms.
I have a keen interest and experience in high-performance, low latency applications, and have applied this in a number of real-time audio DSP projects. I am particularly interested in concurrency and parallelism, and have experience building lock-free and wait-free data structures.
Languages
C, Python, Rust, C++, Ruby, Objective-C, Javascript + HTML/CSS
Platforms
Linux, FreeBSD, OpenBSD, macOS, Windows, ST31 Embedded
Libraries
POSIX/Unix, OpenGL 3.x, JACK, Steinberg VST2/VST3, Apple AudioUnit, Xlib/XCB, Linux kernel (driver development), libuv, AppKit/Cocoa, waf
Work Experience
-
Founder, Owner-operator Light Heavy Industries (08.2018 - present)
-
As LHI Audio, I developed and released Cadmium, an audio synthesizer plugin.
Cadmium is developed using an in-house framework, which supports Windows, macOS, and Linux, and at Cadmium's time of release supported the Steinberg VST2 plugin API. This framework is primarily developed in C, with compile-time code generation in Python, and leverages knowledge of cross-platform user interface development, advanced thread synchronisation, and high-performance real-time DSP.
For the user interface, I developed my own Rutabaga library, which provides a scene-graph and event dispatching on top of OpenGL 3.2. Developing Rutabaga required detailed knowledge of low-level window system details across the three major desktop OSes (Windows, Mac, and Linux). In addition, the Cadmium UI makes heavy use of OpenGL shaders for rendering several of the widget types.
Cadmium's DSP code is all original work (with the exception of various trigonometric approxmiations), with much of it accelerated using SSE2.
I also automated the release process for all of the LHI Audio products, which is based around a self-hosted Concourse CI instance and builds binaries for all supported platforms automatically.
In mid 2022, I helped refine and iterate on several parts of the CLAP plugin API specification. Notably, I contributed heavily to the `parameters` extension to ensure it avoided pitfalls common to other plugin APIs. I also worked to bolster the CLAP APIs general misuse resistance.
In late 2022, I released my second product, ST4b, a drum processing and transient shaping plugin. In the process, I extended my in-house development framework to support several additional plugin APIs: Steinberg VST3, Apple AudioUnit, and the aforementioned CLAP format. I also extended my framework and product line to support the Apple Silicon CPUs.
I also expanded the capabilities of my release automation, implementing support for declaratively generating installers for built binaries (NSIS for Windows, productbuild for macOS), code signing (for Windows and macOS), and notarisation on macOS.
-
-
Contract Audio/DSP Specialist LEGO (03.2023 - present)
-
While the majority of the work done for Lego is covered under NDA for the time being, I can divulge that I was tasked with writing specifications and developing both prototype and production code for interactive audio synthesis and processing.
-
-
Senior Software Developer Microsoft (04.2021 - 12.2023)
-
My work as part of the Azure Core organisation primarily centered around maintainance of the Flatcar Container Linux distribution. As part of a small team, I assisted in keeping packages current, shipping security updates, and writing/incorporating Flatcar-specific patches.
In addition, I helped modernise and rewrite the way that Flatcar updates are delivered, taking ownership of and continuing development of legacy tools which Flatcar had been using previously.
-
-
Contract Software Developer Google (10.2019 - 01.2021)
-
As part of a Google Fonts research & development project to build Runebender, I have been developing a set of tools for working with and processing OpenType feature files.
Feature files are used to define advanced substitution and positioning rules, with capabilities far beyond simple ligature substitution and kerning that are often seen in Latin fonts. The editing process has historically been an edit-compile-refresh cycle, but, in otf-fea-rs, I have been building a compiler toolchain which supports a more "live-coded" style of development.
This project is developed in Rust, and has required building a deep knowledge of advanced OpenType features (particularly in regards to the GPOS and GSUB tables). Additionally, the feature-file parser is original work (developed using a parser combinator library), as is the TTF/OTF binary codec.
-
-
Contract Software Developer Formlabs (04.2018 - 10.2018)
-
In early/mid 2018, Formlabs was gearing up to launch the Form 3, their third-generation stereolithography 3D printer.
As part of the final stages of development, they had been accumulating vast amounts of analysis data and logs from the printers, and their existing tooling was struggling to process the volume and glean effective insights on printing performance.
I developed a high-performance log processing framework in Python 3 which was not only able to process large volumes of the logs, but was able to do so without using a distributed map/reduce cluster. Additionally, the processing framework exposed simple APIs which allowed other teams to easily add processing logic for new logs as they were added to the printer.
To date, the log processing framework has analysed over 30TB of logs and raw data, and it has become an integral part of the internal Formlabs diagnostic tool-set.
-
-
ICS Security Consultant Applied Risk B.V. (06.2018 - 07.2018)
- Designed and began developing a distributed fuzzing platform for security analysis of embedded devices.
Ecosystem Developer Geeny / Telefónica Next (06.2017 - 06.2018)
- Developed a high-performance, bi-directional MQTT to Kafka bridge in Rust.
- Developed small demos demonstrating an IoT backend platform.
- Retrofitted a Raspberry Pi onto an electronic doorlock to connect to the IoT platform.
Contract Software Engineer Monome (03.2011 - 04.2018)
- Ported my existing libmonome project (originally developed for Linux) to Windows and Mac OS X
- Developed serialosc, a cross-platform serial-to-OpenSoundControl server leveraging my existing work on libmonome.
- Implemented the host-side serial protocol for communicating with the grid and arc devices
- Built installers and distribution packages for the finished product
Senior Embedded Engineer Superscale (02.2017 - 05.2017)
- Ported legacy codebases from C++ to Rust for deployment to embedded WLAN routers running a customised OpenWRT build.
Contract Software Engineer Wire (10.2015 - 09.2016)
-
Wire is a messenger application in the same vein as WhatsApp or Signal, with both mobile applications (for iOS and Android) and a webapp.
At the time I joined the team as a contractor, messages were only encrypted in transit (to/from the server), and were stored in plaintext both on the server and the clients. Wire wanted to implement strong end-to-end cryptography, and to that end had internally developed their own implementation of the Axolotl ratchet in Rust called Proteus.
I was brought on to port Proteus to Javascript for use in the webapp, and did so within approximately one month, delivering Proteus.js ahead of schedule. For the remainder of the contract, I provided implementation guidance to the web team, fixed bugs in both the Javascript and Rust implementations (serving as a liaison between the teams), and diagnosed performance problems in the underlying Javascript implementations.
-
Contract Software Engineer MOD Devices (08.2015 - 10.2015)
- Diagnosed and fixed issues in an embedded linux-sunxi I²S audio driver.
Software Engineer Native Instruments (04.2012 - 06.2012)
- Diagnosed rendering inefficiencies in QT on an embedded Linux platform
- Designed protocols for communication between a USB gadget and the host system
Contract Software Engineer SoundCloud (06.2011 - 03.2012)
- Developed a test harness for acoustic fingerprinting systems
- Implemented an audio classification algorithm for differentiating between music and speech signals
Software Engineer Twilio Inc. (10.2010 - 03.2011)
- Developed graphing components in Javascript
- Reverse-engineered Adobe's RTMP streaming media protocol and developed an implementation as a FreeSWITCH endpoint module
Software Developer Scrapblog Inc. (04.2010 - 10.2010)
- Developed an E-Commerce system in Python, interfacing with APIs from Authorize.net, USPS, FedEx, and others
- Part of a team developing a Facebook application for creating photo collages
Software Developer NeuralIQ Inc. (08.2007 - 10.2008)
- Ported an Actionscript 2 application to AS3/Flex
- Patched bugs in Adobe Flex 2
- Developed a VT100 terminal emulator in AS3
- Developed interactive Flex visualization components
Presentations
Linux USB HID Interfacing in Userspace Rustfest 2016 (17 September 2016, Berlin)
Spoke about reverse-engineering a USB human interface device and developing a userspace driver for it in Rust. Subjects covered included Wireshark and usbmon Linux subsystems, ALSA and hidraw userspace APIs, and assembling everything together into maschine.rs.
Education
Self-taught.
Personal Projects
My personal projects focus on the intersection between music and software, exploring new ways of computer-based performance and composition.
Developed libmonome, which provides an easy to use API for the Monome human interface devices.
Developed rove, a program for live improvisation and performance of electronic music. Over the course of development, I have used rove to perform my music at a number of shows, including several I played while on tour in the western U.S.