Можете ли вы распространять приложение Ruby on Rails без исходного кода?
Мне интересно, возможно ли распространять приложение RoR для производственного использования без исходного кода? Я видел этот пост на SO, но моя ситуация немного отличается. Это было бы приложение, управляемое людьми, имеющими некоторую подсказку, так что я полон решимости требовать установки Apache/Mongrel/MySQL на стороне клиента. Все, что я действительно хочу, это чтобы источник был защищен. Кодирование кажется популярным способом распространения приложений PHP (например, Helpspot).
Я нашел эти потенциальные решения:
- Zenobfuscate - однако не все типы кода Ruby поддерживаются, так что это считается
- Ruby Encoder - может быть лучшим вариантом, так как их PHP-кодировщик выглядит хорошо (однако я еще не пробовал), но он еще не доступен. Я использовал IONcube для PHP раньше, и он работал хорошо, но , похоже, IONcube еще не заинтересован.
- Рогатка - это было упомянуто в другом посте SO, но она решает проблему, отличную от моей, и источник все еще виден.
- RubyScript2Exe - из документа, он не готов к производству, так что это подсчитано.
Я слышал, что потенциальное использование JRuby и распространение байт-кода может быть способом для достижения этой цели, но я никогда не использовал JRuby, поэтому я не уверен, что с этим связано.
Может ли кто-нибудь предложить какие-либо идеи и / или известные примеры? В идеале я бы хотел иметь какой-то сценарий автоматической сборки.
7 ответов
Ваш лучший вариант сейчас - использовать JRuby. Немного предыстории: моя компания ( BitRock) работает со многими проприетарными и коммерческими поставщиками ПО с открытым исходным кодом. Мы помогаем им упаковать свое серверное программное обеспечение, которое обычно основано на PHP, Java или Ruby, вместе с веб-сервером или сервером приложений (Apache, Tomcat), языковой средой выполнения и базой данных (обычно Postgres, MySQL) в автономные, простой в использовании установщик. У нас есть большое количество клиентов на основе PHP (включая HelpSpot, о котором вы упомянули), но также есть несколько клиентов на основе Rails. В случае клиентов RoR нормой является использование JRuby вместе с Tomcat или Glassfish, хотя в некоторых случаях мы также связываем собственный интерпретатор Ruby для запуска определенных сценариев, которые полагаются на библиотеки, еще не перенесенные в JRuby (обычно это не ядро приложения)., JRuby быстро повзрослел и во многих случаях выполняет код быстрее, чем обычный Ruby. Вам также нужно будет учесть, что хотя перенос вашего кода на JRuby довольно прост, вам придется потратить некоторое время на это. Вы можете проверить JRuby Stack, который является бесплатным инсталлятором всего, что вам нужно для начала работы. Удачи!
Если вы выпустите исходный код, запутанный или иным образом, ваше приложение будет пиратским. См. Например, Mint. Это зависит от того, что вы создаете, но вы можете обнаружить, что лучше выпустить приложение как своего рода гибрид: размещенное приложение с четко определенным API и компонент, который работает на сервере клиента. Пока истинная ценность вашего продукта находится на стороне сервера, вам не нужно запутывать свой код, и вы можете просто выпустить исходный код без изменений. Кроме того, это также может дать вам возможность обращаться к клиентам, работающим, скажем, с PHP, а не с Ruby. См., Например, Google Analytics, HopToad, Scout и т. Д. И т. Д.
Если вы не можете дождаться доставки RubyEncoder, то я думаю, что ZenObfuscate является наиболее перспективным. Хотя это может потребовать некоторых изменений в вашем исходном коде, они говорят об этом на своем сайте:
ZenObfuscate стоит 2500 долларов за лицензию на сайт или является предметом переговоров для других схем лицензирования. Да, это дорого. Это было специально. Но не позволяйте этому слишком мешать вам. Если ваш продукт действительно классный и мы хотим, чтобы он был успешным, мы заставим его работать. "Действительно круто" - это не freecell.
Конечно, за 2500 долларов (или больше) вы надеетесь получить несколько настроек для компилятора, которые обеспечат полную поддержку вашей кодовой базы. Возможно, стоит привлечь их к разговору.
Вы можете, но это не сделало бы ничего, чтобы помешать кому-то реверс-инжинирингу или его модификации. Я помню, что была статья о подобных попытках запутать Perl и как их можно эффективно обойти отладчиком и 5 минут усилий.
Вы также можете взглянуть на Mingle из студии ThoughtWorks как пример использования JRuby для этого. Это приложение Ruby on Rails, они запускают его с помощью JRuby. Они настроили jruby для загрузки зашифрованных.rb файлов.
Посмотрите на JumpBox.
Я разговаривал с ними на эту тему, и у них, похоже, есть решение, которое скоро будет работать для приложений Rails.
Мне интересно, если вы могли бы просто "скомпилировать" код ruby в исполняемый файл, используя что-то вроде RubyScript2Exe?
Честно говоря, я не использовал его, но кажется, что он может быть тем, что вы хотите, даже если он просто упаковывает сценарии с интерпретатором в один исполняемый файл.