I am very enthusiastic about programming language and runtime platform design. As such, most of my work has revolved around language compilation and virtual machines. In my day-to-day work, I prefer to use C# or C depending on the task, but I also have a high level of expertise with C++, D, Elixir, Erlang, F#, Python, TypeScript, and even plain assembly. Beyond these, I have briefly used a vast array of programming, scripting, orchestration, query, and markup languages that is far too long to list here.
I have many years of experience working on cross-platform projects targeting Windows, Linux, and macOS at various levels of abstraction. I have also worked with Android and iOS at the native code level. I am, for better or worse, intimately familiar with many of the nasty quirks and pitfalls of each operating system.
I have also worked with most of the major processor architectures in use today – x86, ARM, RISC-V, Power ISA, and MIPS – as well as some lesser-known ones like Epiphany. Compilation to machine code, disassembly and analysis, and processor emulation/simulation are subjects I have a great interest in.
When necessary, I have reverse engineered both native and managed applications and libraries for the sake of interoperability, bug fixing, security research, or just plain old curiosity. Reverse engineering proprietary network protocols is something I find particularly interesting and have done many times.
Occasional Web development has afforded me experience with some modern frameworks and tools - ASP.NET Core, Flask, Node.js, webpack, etc. My interest here is mainly in the backend. I have also done more general server-side development not tied to Web technologies. In all of these endeavors, I have gained experience with various relational database systems – MySQL, PostgreSQL, and SQLite in particular – as well as some document-oriented systems.
Build systems, continuous integration, and engineering automation are areas I have a purely pragmatic interest in. Few things annoy me as much as tedious and error-prone build processes that get in the way of doing actually interesting work. I go to great lengths to automate as many tasks as possible in my projects and ensure that weird build system bugs are not harming productivity.
As you can probably tell, I have done a bit of everything. It turns out that I am a pretty fast learner who enjoys learning new technologies and solving problems for other people.
I have worked for the following companies and organizations:
- Microsoft (2016-2019): Senior runtime engineer working on the Mono virtual machine and related tooling
- Xamarin (2013-2016): Runtime engineer working on the Mono virtual machine and the Xamarin.Android, Xamarin.iOS, and Xamarin.Mac products
- Mono Project (2012-2012): Google Summer of Code mentor overseeing a student's continued work on the CIL assembler and disassembler tools
- Xamarin (2011-2012): Intern working on the internal build system for Xamarin.Android and Xamarin.iOS documentation
- Mono Project (2011-2011): Google Summer of Code student working on C# implementations of the CIL assembler and disassembler tools
I have created several open source programs and projects, some of them more complete than others:
- Alkahest: An extensible TERA proxy server
- Atomique: Sane atomic operations for .NET based on the C++11 memory model
- Augmentrex: A reverse engineering tool for the Steam version of Hellgate: London
- DAREPL: An interactive REPL for CPU architecture emulation
- ExMake: A modern, scriptable, dependency-based build tool similar to Make
- ExParsec: A parser combinator library inspired by Parsec
- Flare: A dynamic programming language suitable for embedding
- ISC-0: The ISC No Attribution License (ISC-0) is a modification to the original ISC License that removes the attribution requirement
- MSBuild SDK Template: A template repository for sanely building a custom MSBuild SDK in .NET 6+
- Oninaki Reincarnation: A combat and post-game overhaul mod for the Steam version of Oninaki
- SDB: Command line interface to the Mono soft debugger
- Satori: Libraries and tools for the Epiphany processor architecture
- Seiiki: A walled garden where all is right with the world
- System.Terminal: A terminal-centric replacement for System.Console
- Zig MSBuild SDK: An MSBuild SDK for building Zig, C, and C++ projects using the Zig compiler
- Zig MSBuild Toolsets: The Zig compiler and standard library packaged for use in MSBuild
I have contributed substantially to many others:
- DMD: The reference compiler for the D programming language
- dnlib: .NET module/assembly reader/writer library
- DocFX: Tools for building and publishing API documentation for .NET projects
- DRuntime: The runtime library for the D programming language
- Elixir: The Elixir programming language for the Erlang VM
- gpr: A .NET Core tool for working with the GitHub Package Registry
- Homebrew: The missing package manager for macOS
- LDC: The LLVM-based compiler for the D programming language
- Meson: The Meson build system
- Mono: Open source implementation of C#, CLI, and .NET
- Mono.Posix: POSIX interface for Mono, .NET and .NET Core
- MonoDevelop: Open source C#/.NET IDE
- Orleans: A cross-platform framework for building distributed .NET applications
- Pegged: PEG-based parser generator for the D programming language
- Phobos: The standard library for the D programming language
- Silk.NET: One-stop-shop for high-speed .NET multimedia, graphics, and compute
- VapourSynth: A modern video processing framework
- Waf: The meta build system
- Wcwidth: A .NET library that calculates the width of Unicode characters
- WebMarkupMin: A set of markup minifiers for .NET
- Xamarin.Android: C# bindings and tooling for Android
- Xamarin.Mac/iOS: C# bindings and tooling for macOS, iOS, tvOS, and watchOS