Curriculum Vitae

My name is wilkie. I develop large scale distributed systems and am looking for a position that will allow me to use that specialization to make better the open web. I have a strong desire to develop technology that can be accessed by anybody and push progress of a public commons without constraint. I specialize in the research and development of low-level distributed systems that reduce barriers of entry and push more control, authority, and rights to those that use the system. My overall goal is to provide a system that guarantees the freedom to compute.
Education
- College: University of Pittsburgh, 2005-2009
- Degree: Bachelors with Honors, Computer Science
- Post-Bachelors: Master of Science, Computer Science, University of Pittsburgh, 2009-2014
Speaking
Operating System Fundamentalism - SOSP 2011 - Stressed new concerns and models for modern OS/kernel architectures to an audience of established systems researchers at a top systems conference. Paper. Poster
XOmB+Djehuty: Platform for Code Remix - CSA 2013 - Discussed an operating system architecture that promotes better diversity and involvement of non-systems people in its creation and maintenance and how to promote better code reuse. Afterward, my co-speaker and I were invited to help plan and review proposals for the panel for next year. Slides
Social Computation and the Freedom to Compute - PGHTechFest 2013 - A political view of the open source culture and how it actively discourages participation from the commons and is driven from a centralized, authoritarian development model and new models of systems that would solve these problems. Slides
Preserving Digital Art and Games for 100 Years! - !!Con 2016 - A short talk on what it means to potentially archive interactivity for a century. The slides are an interactive ZZT level, adding to the fun. "Slides" Video
Interactive Software Archival - Abstractions 2016 - A look at the domain of interactive archival, some misconceptions people have about how permanent digital information is (it’s not), the odd definition of “what is software” and “what is interaction,” and how we might create tools/systems to preserve the digital world. Slides
Save Icons in Real Life?! (My Love of the Floppy Disk!) - !!Con 2021 - A short talk on floppy disks, how they work, and what cool things we can still do with them. Slides Slides (pptx)
Writing
XOmB: an Exokernel for Modern 64-bit Multicore Hardware - WSO - VII Workshop de Sistemas Operacionais - Belo Horizonte, Brasil - July, 2010. Describes the system architecture, technical merit, and novelty of a new kernel built without the legacy of prior abstractions. Full paper.
Balancing Performance, Accuracy, and Precision for Secure Cloud Transactions - IEEE Transactions on Parallel and Distributed Systems - August, 2013. Proposes new database consistency algorithms for emerging distributed data solutions to account for finer-grained privacy control within an eventually consistent environment. Full paper.
Studying Speedrunners - Game Developer Magazine - March, 2013. A look at the bugs in the popular game DOOM that have been discovered over the years by enthusiast players. I examine the released source code to explain why certain tricks work and discuss why having bugs in your games can be part of its appeal, not a drawback or mistake. Full article.
Evaluating Interactive Archives - Gateways 2017 - October 2017. Posits a metric for comparing various archive projects for their ability to preserve the interactivity of software. Paper
Software Provenance: Track the Reality not the Virtual Machine - P-RECS 2018 - June 2018. Describes a mechanism for generating virtual machines on-the-fly in support of software preservation versus storing VMs. Paper
Long-term Preservation of Repeatable Builds in Occam - CANOPIE-HPC, SC'19 - November 2019. Discusses the need for software preservation to elevate build preservation and how Occam helps to do so. Paper
Teaching
Introduction to Java - Instructor, University of Pittsburgh - 2010-2011 - Taught for 3 consecutive semesters with an above-average student-evaluated teaching rating. Instructs beginner level Java programming for non-computer-science majors. Had full control over curriculum and planning devising homework assignments and exams. My curriculum experimented with interweaving computer art and culture into the discussion. One of my more celebrated/hated classes involved a group discussion of ethics involving free information and hacktivism, types of activities that programming skill may unlock.
Introduction to Systems Software - Lab Instructor, University of Pittsburgh - 2011-2012 - Taught for 2 semesters. Taught C to computer science minors/majors with an emphasis on systems and low-level programming. Included labs on Makefiles, filesystem programming, and adding system calls to Linux.
Open Source Game Coding Competition - Event organizer - 2009-2013 - Yearly competition that attracts around 30 participants per year devoted to beginners to motivate them to form teams with experienced programmers to pair and build video games to be released open source to help jumpstart similar beginners outside of the competition. I won the competition in its 2nd year and have ran the competition since then for the last 4 years. My responsibilities are to fund the event through sponsorship, advertise, organize judging, and make sure everybody is having fun. Website. Competition Code.
Undergraduate Capstone - Mentor, University of Pittsburgh - 2014-2019 - Led groups of students through their capstone projects during several terms. Projects were either pulled from industry with myself acting as a mentor and manager, or similarly part of my own research group.
Advanced Operating Systems: Distributed Systems - Co-Instructor, University of Pittsburgh - 2018 - Taught several classes of advanced Operating Systems topics to last year undergraduates and first year graduate students of Computer Science. Topics included distributed file systems and storage, stateless/stateful protocols, and peer-to-peer/federated designs.
Introduction to Computer Organization and Assembly - Instructor, University of Pittsburgh - 2018-2019 - Taught several semesters of introductory MIPS assembly and digital logic and electronics to students intending to major or minor in Computer Science. Also maintained the software (MARS, Java-based MIPS simulator) for the other ongoing sections of the course taught by other instructors.
Introduction to Systems Software - Instructor, University of Pittsburgh - 2019-2020 - Taught several classes of introductory C and Operating Systems concepts to second year students of Computer Science. Topics include C programming, CPU scheduling, virtual memory and paging, disk storage, and threading.
Work Experience
Software Engineer - Vocollect - Summer of 2008 - Worked on their flagship product, a hand-held, voice-activated, programmable device typically used for warehouse workers or carriers for hands-free inventory. Embedded C/C++. Rewrote very low-level, core pieces of code to optimize and reduce initialization time by around 60 percent, a significant feat.
Freelance Work - Summer of 2009 - Implemented a contract work within the period of two weeks to develop an iPhone application generator for the syndication of RSS/Atom feeds of audio/video podcasts into a custom styled app used to play the various episodes.
Student Researcher - University of Pittsburgh - 2009-2012 - Researched operating system designs and distributed systems with an emphasis on building new systems.
Teaching Fellow - University of Pittsburgh - 2010-2014 - Responsible for curriculum in introductory programming courses. See Teaching section.
Freelance Work - 2013-2015 - Implemented a variety of contract work, mostly web-based, that can be elaborated upon request.
Lead Research Engineer - University of Pittsburgh - 2014-present - Designing and developing the Occam software archival project.
Software
Occam (ruby/sinatra, python, javascript/webpack+babel) - Software Archive
- Source: gitlab
- Website: occam.software
- License: AGPL 3.0, various

Occam is a free and open-source (AGPL 3.0), federated software preservation and archival system. This system, designed by myself over several years and developed by a team at the University of Pittsburgh, serves to solve an increasingly dire problem: the degradation of software and digital data. To offset this peril, the system is designed to generate virtual machines (VMs) through Vagrant or Docker to build and run packaged software. Much like a package manager, the system can derive a VM based on a small description of software and then rake its dependencies which are themselves preserved objects. It then recursively preserves each package in a way that can be distributed and extensibly executed as a virtual machine on current and future hardware.
One novelty is that VMs are generated on-the-fly and can make use of preserved software, such as emulators, to provide means of executing obsolete software. These emulators can be introduced to the system (and learned over time) at any point to provide more functionality to patrons of the archive. In this way, new emulators can be introduced and selected as needed without having to change the system or force the system to store large, complete virtual machines that are built around particular emulation targets.
On top of the backend infrastructure, which is a sophisticated object store using python, git, and PostgreSQL, there exists a web portal frontend that allows the execution of software within a browser environment. For instance, software objects may target the browser itself and run (contained within sandboxes) within the browser. Such objects might be emulators, such as Em-DOSBox, which allow for software to be executed within a native emulator (via Docker) or executed within the JS version of the emulator on-the-fly.
RAWRS (ruby/sinatra, javascript/webpack+babel+emscripten) - Educational Tool
- Source: gitlab
- Website: wilkie.gitlab.io/rawrs
- License: AGPL 3.0

The RISC-V Assembler and Workable, Rewritable System (RAWRS) is a learning-focused toolchain that incorporates an assembler, debugger, and RISC-V kernel together entirely within a static website. To this end, a GNU toolchain consisting of binutils and the RISC-V emulator TinyEMU where cross-compiled to JavaScript WebAssembly using emscripten. This allows these sophisticated and time-proven applications to be usable directly within a browser environment without having students install anything to their local machines. This side-steps a huge problem we have had with even Java-based toolchains such as the namesake MARS program.
Overall, this work-in-progress educational tool should provide a nice stepping stone for educators to move from MIPS based education to a RISC-V based environment. By being a web-based tool, it is my hope that this lowers the barrier-to-entry for learning assembly and systems curricula, and overall make this material more accessible to all.
Play and learn here!
rstat.us (ruby/rails, javascript/coffeescript) - Web Application
- Source: github
- License: CC0 1.0 Universal

A free and open-source, federated microblogging platform I founded with a team of friends, resembling twitter and status.net, that emphasizes personal use and self-ownership of data. That is, this software is designed to be easily deployed on a hosting service or a personal server. The ownership and authority over the content is primarily in the hands of the individual, instead of a company that runs a centralized service such as twitter. It uses the ostatus protocol to distribute content within a social graph to nodes and servers maintained by other people.
Considering it is a social system at heart that attempts to liberate data to individuals, rstat.us became very successful. The rate of adoption out-paced app.net with 6,000 unique users in our opening week. We have over 60 contributors from all across the world which further suggests its appeal and need in the global world. I am a core maintainer along with Carol Nichols, and help organize new feature efforts and review pull requests, although our development model allows for any past contributor to commit and merge at any time.
xomb (D, assembly) - Systems Design and Implementation
- Source: github
- License: WTFPL v2

XOmB is a novel exokernel-inspired operating system project aimed at developing the most flexible OS architecture possible as a means of building more efficient systems and building systems more efficiently. Our immediate aim is to build a research and education platform, but by doing so we contend XOmB offers the opportunity to develop more streamlined OS implementations for general purpose and server use. The flexibility we aim to achieve should allow the same kernel to be deployed in many scenarios, adapting the userspace if needed.
The design of the XOmB kernel does not impose any unnecessary abstractions, and thus avoids hiding state from the applications or incurring additional overheads (e.g. implementing a database on top of a filesystem introduces numerous inefficiencies). Due to minimizing abstractions imposed by the OS, XOmB will be able to provide a software base sufficient to build new interfaces without having to tear down or re-engineer the kernel.
We (myself and James Larkby-Lahet) diverge significantly from prior efforts in our treatment of state with the XOmB exokernel, and in many ways predicted the rise of Xen-like hypervisors. We relegate even more kernel code to userspace libraries, which are untrusted and can be customized (completely modified or replaced) on a per-application basis. We do so by extracting two key components of the exokernel: device drivers and system state. These components are implemented in userspace where they are met with easy debugging and hardware enforced safety.
gutenberg (ruby, javascript/jQuery) - Content Generation
- Source: github
- License: CC0 1.0 Universal

I am very intrigued by typesetting and often find myself writing typesetting tools instead of actual writing, which is what I should be doing. More to the point, I am very interested in hypermedia and exploring its use to transform traditional media into something more substantial in this information era. To that end, gutenberg is a project that turns a flavor of markdown into a website that is typeset using javascript code on the client side. The idea is that books can contain links to other books and other external information and to provide, eventually, a seamless experience in reading this information.
The project consists of ruby code that will render the markup into html, css, and images and package them with javascript. It is designed such that without javascript or using a screenreader (typically used by blind individuals), the book is still readable as a basic webpage. The book output can also be easily parsed by html parsers and generates a very minimal markup. The rest of the work to make the book into a dynamic frame with full typesetting is done completely in javascript. Styling can be provided by stylesheets and images provided by the library or easily extended by adding custom css and javascript.
reuleaux-selectors (javascript) - User/Human Interfaces
- Source: github

As a queer individual, I'm concerned with forms of available representation and allowances of diversity in the technological space. The role of personal gender identification is a part of human interfaces that has been untouched regardless of the fact that dropdown gender selection of simply male and female is unacceptable. Textfields, while better, allow for so much choice that people may pigeonhole themselves and would be otherwise incomparable.
Along with Lindsey Bieda, we designed and implemented a new form of gender and sexuality selector that we feel is a stage of evolution that provides a familiar selector that is both comparable and highly representative of the queer identity. We see the primary use of such a selector for social networking sites as a means of representing oneself as one pleases, and also for dating services to offer better support for the preferences and identity of queer individuals.
Play around with the selectors here.
apsis (C++, assembly, GLSL) - General-Purpose Game Engine
- Source: github
- License: WTFPL v2

Going along with my open source game coding competition, I am currently developing a free and open-source (early stages) game engine builder. To jumpstart games and creative expression, I have created a framework that gives you the building blocks for creating game engines.
Here is how it works: Create an Engine. Add a Map to draw tile-based maps. Add an Actor to represent the player. Attach an Up, Down, Left, Right modules to the player actor to give it a set of rules that let it respond to input and move in all four directions. Add a MapCollider rule so that you do not go through walls. You now have a basic top-down 2D scroller much like Zelda games. Remove the Up and Down rules on the player actor, and add Jump and Fall rules, and now you have a 2D side-scroller.
By building games via a set of rules, you can be provided a set of predefined rules to quickly make traditional games, but also allow extensibility by defining new rules. This will be perfect in an educational environment where predefined rules can be used to get things rolling, but programming concepts can be introduced gradually to beginners when they want to do something fancy.
I hope to bind the logic and rule creation to a language that is better suited for beginners such as Lua or Ruby. That way, the game engine itself is written in OpenGL/C++ but the extensible components can be an easy to use scripting language.
Open-Source Contributions
- rackula - Ruby static site generator of rack-based websites.
- sinatra - Ruby rack-based web micro-framework.
- shoes - C library backend for the shoes ruby GUI framework.
- hackety-hack - Ruby educational tool to teach programming visually to beginners.
- ratom - Ruby library for Atom feed generation.
- ldc - D compiler frontend to LLVM.
- redfinger - Ruby library for webfinger (distributed identity) polling.
- gratipay - Python-based website for weekly tips to online creators.
Tags
Comments
If you'd like to comment, just send me an email at wilkie@xomb.org or on either Twitter or via my Mastodon profile. I would love to hear from you! Any opinions, criticism, etc are welcome.
Donations
If you'd like to make a donation, I don't know what is best for that. Let me know.
Copyright
All content off of this domain, unless otherwise noted or linked from a different domain, is licensed as CC0