Ответ 1
Мой ответ немного запоздал, но я считаю, что это хороший вопрос. К сожалению, я не считаю, что в настоящее время есть решение или, по крайней мере, легкое.
Трудность распространена, потому что для большинства интерпретируемых языков, включая R, часто можно включить ведение журнала и проверку всех запущенных команд. Это может отрицать многие трюки, чтобы запутать код.
Для тех, кто предпочитает думать о том, что код открыт == хорошо, нужно знать, что общая причина для обфускации кода - это если вы консультируетесь с клиентом, который нанимает несколько поставщиков. Клиенту нередко приходится брать сценарии от поставщика A и спрашивать поставщика B, почему он не работает с их системой. (Это может быть сделано низкоуровневым IT-flunkie, а не кем-то, ответственным за контракты NDA.) Если A и B являются конкурентами, код только что передан B. Когда скрипты == серьезные программы, тогда серьезный код были отданы.
Способы, которые я видел, это:
- Сделайте вызов скомпилированного языка и используйте доступные там стандартные защиты.
- Укомплектовать исполняемый файл на другом сервере и использовать вызовы на сервере для выполнения вычислений. (В R есть несколько вариантов на стороне сервера.)
- Использовать скомпилированный (предварительно обработанный/байт-код) код внутри языка.
Вариант 2 на самом деле проще и лучше, когда код может широко распространяться не только по причинам IP. Важным преимуществом является то, что он позволяет вам обновлять код, не испытывая боли в процессе выпуска на сайте. Если нужны новые библиотеки, не проблема - обновите сервер.
Вариант 3 выполняется в Matlab с .p
файлами и может выполняться с помощью py2exe
для Python в Windows. В R новая компиляция байткода может быть аналогичной, но я недостаточно разбираюсь в ней для решения любых различий между .Rc
файлами в контексте R и .p
в контексте Matlab. Дополнительную информацию о компиляторе см. В разделе http://www.inside-r.org/r-doc/compiler/compile
Хостинг вычислений на сервере отлично подходит для работы с неискушенными пользователями, потому что быстрее итерации быстро реагировать на ошибки или запросы функций. Защита IP - это просто преимущество.