General interface:
- File list
- Some fixed set of compiler options (only allow some – e.g. we shouldn't be able to let them change the target arch)
- Compilation time limit, memory limit, etc.
Output: executable or runtime + executable pair
Or compiler errors