Беру участие в проекте, где разрабатывается система для проверки задач (типа TopCoder, Timus и другие). Когда пользователь как-то посылает свое решение, я должен скомпилировать/интерпретировать его. Но в то же время, я должен ограничить свободу процеса, в котором запускается его решение (открытие сторонних файлов, узнать системное время, изменить текущую директорию etc - в общем типа restricted shell из баша).
То есть существует 2 типа решений:
- решения, которые можно откомпилировать (с/c++/pascal) (ну и плюс решения типа c#/java, которые jit-таються
- решения, которые интерпретируются (list/ruby/python/php) (в самом шыроком смысле слова, так как многие из них сначала транслируются в байт-код (например ruby 1.9 -> yarv), что не суть важно сейчас)
Так вот. Сама система разрабатывается на c# под Mono и .NET. Если процес, в котором запускается компилированное приложение, можно ограничить с помощью Security Attributes для класа Process, то я не представляю, как можно ограничить интерпретируемые...
Буду благодарен за идеи.