The Moe Contest Environment (formerly Moe) is a system for conducting programming competitions similar in spirit to the International Olympiad in Informatics – contestants solve programming tasks, submit the source code of their solutions, which is then automatically tested on a set of test inputs.
Moe is built in a modular way, making it easy to adapt it to the specifics of a particular contest, to other types of tasks, or other programming languages.
A brief description of the system and of the ideas behind it can be found in the following series of papers published in Olympiads in Informatics:
isolate
) is available.
It has very low overhead (it uses Linux kernel containers) and it is able to cope with
multi-threaded programs. For more details, see the "New Contest Sandbox" paper above
or the isolate's man page.
module | description | status |
---|---|---|
sandbox | Runs the contestant's solution in a controlled and secure environment,
limiting its execution time, memory consumption and system calls.
We have a stable implementation (box ) based on ptrace
and a new one (isolate ) based on Linux kernel containers.
| works |
judges | A set of utilities for comparing the solution's output with the correct answer at a given level of strictness. | works |
evaluator (a.k.a. grader) | This module controls the whole process of grading the solution. It runs the compilers, the sandbox and the judges as described in configuration files. | works |
evaluator v2 | We have decided to rewrite the evaluator from scratch in Python for greater flexibility. It will however need some more time to finish. | in progress |
queue manager | Distributes grading between a cluster of computers, each of them running the evaluator. | works, but needs revision |
submitter | Handles submitting of solutions by contestants and passing them to the evaluation system. Contains a server daemon and a front-end for contestants. (If your contest uses a web-based contestant interface, you probably do not need this, although it can serve as a clean interface between your web services and the evaluator.) | works, but needs revision |
Moe is still under heavy development, so the best way to obtain the latest version is directly from our Git repository at git://git.ucw.cz/moe.git. The master branch of the repository is kept in a stable state, new development is done on other branches and then merged to the master. You can also browse the repository online.
We occasionally publish snapshot tarballs in our FTP archive.
Warning: Most parts of this documentation are outdated. Please consult the papers above to get a more up-to-date picture.
Moe (or some of its modules) are used at the following contests:
Moe is known to work with these programming languages:
Adding a new language should be easy, as long as the language behaves in a sane way (e.g., if it does not need to use a zillion threads for a trivial program as Java does).
Moe is developed and tested on Linux, but all modules except the sandbox should happily work on any UNIX-like system providing a reasonable set of GNU utilities (especially bash) and Perl. This probably includes MinGW or Cygwin on Windows, but we have not tested that.
The sandbox heavily depends on the target OS. The current version works only on Linux with kernel version 2.6 or newer and only on the i386 and amd64 architectures. Porting to other architectures should require only minor changes, porting to other systems is likely to be hard.
The isolate
sandbox does not depend on CPU architecture,
but it requires a recent Linux kernel in a configuration which might be different
from your distribution's default.
Moe has been written by the following people:
isolate
)
We are also thankful to Jan Kára and Milan Straka for their help and for many fine ideas.
Moe can be used and distributed under the terms of the GNU General Public License version 2.
All bug reports, suggestions and patches are welcome. Please mail them to our mailing list moe@ucw.cz. You can ask the list server to subscribe to this list.