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.
- College: University of Pittsburgh, 2005-2009
- Degree: Bachelors with Honors, Computer Science
- Post-Bachelors: Master of Science, Computer Science, University of Pittsburgh, 2009-2014
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
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
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.
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.
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.
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!
- 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.
- Source: github
- License: CC0 1.0 Universal
- 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.
- 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.
If you'd like to make a donation, I don't know what is best for that. Let me know.
All content off of this domain, unless otherwise noted or linked from a different domain, is licensed as CC0