Обдумываю идею одной игры и хочу сразу в начале разработки предусмотреть хороший интерфейс для пользовательских модификаций. Разрабатываю на gambas. Нюанс в том, что модификациям понадобится работать на разделяемых серверах. Сначала я думал использовать тот же gambas, но перед трансляцией и подключением модуля, проверять его на наличие вызовов определённых функций и объектов. Типа что бы не мог произвольно открывать сокеты и писать файлы за пределами специльного каталога, а так же не пытался делать системные вызовы и дергать что либо. Но понял что можно всякими хитростями обмануть простой парсер или в процессе выполнения сгенерировать нужный скрипт и спровоцировать его запуск. На docker и fakechroot надежды мало, подозреваю что в них дыр много. Читал про lua, но не понял как его подключить к gambas, да и кажется это всё извращением.
В идеале нужна надёжная песочница, внутрь которой передаётся файл используемый через функцию mmap, с игровой картой и стандартный ввод-вывод, для передачи отдельных сообщений и синхронизации «тиков». Нужно что бы из песочницы нельзя было выбраться и даже постучать в сеть, а все процессы в ней имеют пониженный приоритет. Слышал про виртуальные машины, но и слышал про падение производительности.
Сойдёт и какой нибудь скриптовый язык с функциями типа JIT (производительность важна). Но как такому языку передать общую память, не имею представлений.
Суть в том что задумываемая игра будет сетевая и работать на сервере, интерфейс рисоваться в браузере. Но основной игровой режим будет одиночный и пользователям захочется использовать моды. Понадобиться пользовательские моды устанавливать на сервер.
Была ещё мысль разработать собственный ЯП, но не хочу этим заниматься. Да и мододелы не оценят.
Ещё есть мысль полностью всю серверную часть запихнуть в одну песочницу, отдельную для каждого пользователя, позволив мододелам по полной использовать gambas и его окружение. Но опять же, нужна надёжная и быстрая песочница которую можно ограничить во внешних соединениях и использовании ресурсов.
Те кто имеет всякий опыт разработки и администрирования, подскажите какое решение было бы лучше и при помощи чего это будет лучше реализовать.