You can find many of my public projects on my GitHub profile: @thinkmoore. This page describes some of the larger projects I have developed or contributed to.

Shill: A Secure Shell Scripting Language§

Shill is a scripting language design to make it easy to follow the Principle of Least Privilege when running programs on a commodity operating system. Shill uses capabilities to control what access scripts have to your system, and every shill script comes with a contract that describes what it can do. Shill currently runs on FreeBSD and is developed in Racket. I am currently developing an improved version of Shill that targets Linux.

GitHub Documentation

Polyglot: an extensible compiler framework for Java§

Polyglot is an extensible compiler framework for the Java programming language. It can be used to implement extensions to the Java programming language or as a Java compiler front end for other tools. I helped improve Polyglot's support for Java 5 and 7.

GitHub Documentation

Accrue: an object-sensitive analysis framework for Java§

The Accrue Interprocedural Java Analysis Framework is a static analysis framework for Java built on the Polyglot compiler framework. It implements a customizable object-sensitive interprocedural analysis. I contributed to the development of Accrue and developed a number of static analyses using the framework including a constraint-based information-flow analysis and a number of numeric abstract interpretation analyses.


llvm-deps: an inter-procedural analysis framework and information-flow analysis for LLVM§

This project ports the core of the Accrue analysis framework from Polyglot to (a now very old version of) LLVM. The framework uses the Data Structure Analysis pointer analysis from LLVM, but can be configured to use a custom pointer analysis. The repository also contains a constraint-based information-flow/dependency analysis built using the framework.


FUSE for Racket§

Filesystem in Userspace (FUSE) is a kernel interface for userspace programs to implement filesystems. FUSE has two parts: a kernel module (available for Linux, BSD, and MacOS) that mounts and coordinates userspace filesystems, and a userspace library for communicating with the kernel module. libfuse is a reference implementation of the userspace library in C. FUSE for Racket is a native Racket implementation of the userspace component of FUSE that allows developers to write a filesystem entirely in Racket.

GitHub Documentation