Virtual Appliances como Meio de Controlar Licenças

Aproveitando que este tópico foi desenterrado das cinzas, queria levantar umas idéias aqui. Estava discutindo com o peleteiro sobre modelos de ofuscação como os do Mingle para linguagens interpretadas/facilmente descompilaveis (Ruby, Java, C#, Lisp, Python…) e na conversa surgiu a idéia de termos algo como uma imagem de VMWare ou outro esquema de virtualização que dificultasse o acess ao fonte. Pode ser que a VM não tenha modo interativo, shell e coisas do tipo, por exemplo. Assim quem quiser manter código fechado teria um cadim mais de confiança e você ainda poderia disponibilizar seu produto via download.

Não tenho idéia de como isso seria feito num SO mas acho que pode dar certo, o que vocês acham?

Deixa ver se eu entendi. A idéia é basicamente ter um binário em C que embute uma máquina virtual que simplesmente disponibiliza um par ip:porta para os usuários finais.

É uma solução interessante, porem:

-Tua aplicação vai passar a usar uns 100 megas de ram a mais a troco de quase nada.
-O binário ficaria zilhões de vezes maior para download via internet - em vez de 1 WAR, vai ser 1 SO inteiro + máquina virtual.
-Troubleshooting vai ser muito mais complicado já que a aplicação vai ser muito menos acessível.
-Espaço em disco não vai ser uma coisa simples de resolver. Mesmo usando LVM você teria que disponibilizar alguma ferramenta administrativa para adicionar novos discos a imagem.
-Existem drivers linux que montam imagens de VMWare ou Xen.
-Recovery não é simples já que é uma caixa preta.

Porém tem a vantagem de ser um sistema completamente isolado. Então toneladas de problemas devido ao ambiente do usuário e ambiente não existiriam.

Sinceramente acho que uma solução de AOT é o melhor. Distribuir binários com código x86 que são infinitamente mais difícil de descompilar. A performance, principalmente para Java, seria pior, mas resolveria o problema de uma vez por todas.

Isso é um recurso que a comunidade Java deseja desesperadamente a quase uma década. Minha sugestão é contruir uma prova de conceito com o OpenJDK e depois pressionar pela padronização através de uma jsr.

Também sou a favor de uma Solução de AOT. Mesmo porque, “burlar” uma maquina virtual não seria uma tarefa muito difícil.