Пишу систему тестирования для различных языков программирования. Суть такова: пользователю предлагается некое задание, пользователь пишет к нему решение на языке, например, С. Его программа отправляется на сервер, компилируется и тестируется. Пользователю сообщается результат.
Подобная система использовалась в Google CodeJam.
Вопрос в следующем: как запретить пользовательским программам делать ненужные вещи? Они должны иметь возможность только считать, но не исследовать файловую систему, что-то удалять, что-то записывать, открывать порты и т.д. При этом, используемые языки могут быть совершенно разными: кроме уже упомянутого С, допустим, - Java, Ruby и Lisp.