From: Ryan Davis Date: 2006-06-13T11:56:23+09:00 Subject: ANN: ZenObfuscate - for when you really really have to ship a binary "Being perfectly honest, your obfuscator has made me feel like writing RubyCocoa apps is a commercially viable business, whereas before I had my doubts." - Aidan Rogers - ZenObfuscate - What is it? - For when you really really have to ship a binary. - Lets you: Write in ruby, and ship a binary. - ZenObfuscate is a translator for a fairly large subset of ruby that converts your pure ruby code into a dynamically loadable binary, protecting your intellectual property(*). - How does it work? zenobfuscate has a commandline interface that takes the specified ruby files and outputs a dynamically loadable binary (.bundle on osx, .so on unix/linux and .dll or windows). - TODO: diagram - e.g., ./bin/zenobfuscate -o mylibrary lib/blah.rb; ruby -rmylibrary -e 'use_my_library' - Built on a solid foundation: RubyInline and ParseTree. Long standing open source packages for ruby. - When is it available? Available nowish on an individual basis - How much does it cost and what is its licensing? ZenObfuscate costs $2500 for a site license or is individually negotiable. ZenObfuscate is a commercial product produced wholly by Eric Hodel and Ryan Davis and is not for redistribution. All rights are reserved, etc., etc. Binaries produced from ZenObfuscate have no restrictions of any kind (except determined by their authors). - Requirements ruby 1.8.x, ruby2c, parse_tree, rubyinline (all available as gems) available on darwin ppc, darwin intel, freebsd x86, freebsd amd/64bit, and linux x86 (with coaxing). - Known Limitations There are issues with what the obfuscator can translate to C and as a result you may need to modify your code in order to translate it. Usually this is a pretty straightforward and simple task. We do a good job of translating static ruby to its equivalent C, but not all ruby has an equivalent in C. - Only translates methods in classes and modules, not freestanding code. - Explicit returns are required in all methods. - Temporary: Conditional logic (including ?:) may not be on the right hand side of an assignment. - Temporaryish: Exception handling and generic block closures currently don't translate. - Some expressions in ruby we don't currently do, but could upon request, where some other ruby expressions will never translate. -- I know that you believe you understand what you think I said but, I'm not sure you realize that what you heard is not what I meant.