Que tal ter aplicações do tipo Java escritas diretas em binários para Linux?
É o que promete a Máquina Virtual Lina. Escreva o código em C/C++ ou até mesmo em Perl e Python, compile os binários especificamente para o Lina, assim como você compilaria para qualquer distro, e rode este executável no Linux, Windows e Mac usando a VM Lina.
Parece cópia do Java? Não, o projeto OpenLina tem a intenção de fazer com o que o OpenSource esteja mais presente em todas as arquiteturas. O código original é escrito para Linux, então pode também ser compilado direto para o Linux além de compilado para o Lina. Na verdade o Lina aumenta a portabilidade de um software do Linux para o Windows e Mac.
Como isso funciona? O Lina funciona usando um Kernel modificado que é responsável por “entender” o código que pode usar bibliotecas Qt e GTK, além de outras. Isso cria uma camada de compatibilidade com o código originalmente escrito para o Linux, com o SO em que o código compilado para o Lina está sendo executado. O responsável pela compatibilidade é a VM Lina para aquele SO em específico. Tudo é explicado nesse diagrama de funcionamento do Lina, mostrado abaixo:
Encare o Lina como um “tchan” a suas aplicações para o Linux, que agora pode não ficar mais restritas a eles, e atingir outras plataformas.
Vaporware. Você pode garantir, de alguma forma, que as aplicações compiladas para linux rodem em windows e mac, desde que tenham sido compiladas para a mesma arquitetura em que roda o cliente (não pense que você compilará um sistema LINA em x86_64 e vai executá-lo em i386 ou PPC sem emulação).
Uma VM desse tipo (baseada num kernel linux) lembra http://www.colinux.org, só que provavelmente com bindings dos principais toolkits (GTK, QT, talvez XLib) para a plataforma em questão.
– GTK e QT pra Windows existem há anos, e também, a maioria dos projetos FOSS já possuem versão para Windows: Pidgim, Xchat, Openoffice, Firefox, só para citar alguns.
– Mac OS X é um BSD modificado. Qualquer aplicação compila sem problemas nele. Existe um port alpha do GTK em cima do Quartz (camada de apresentação do mac) e o QT4 já a suporta nativamente. Mesmo se sua aplicação utilizar algum toolkit obscuro, basta executá-la sob o X11, presente em qquer instalação do OS X.
Se você está iniciando um projeto multiplataforma, a primeira decisão sana é escolher uma linguagem suportada em várias plataformas, e não depender de uma gambiarra para que ela funcione.
– Python está presente nos principais sistemas, e aliado às libs mencionadas acima, garante interoperabilidade sem alterar uma linha de código.
– A máquina virtual Java, agora GPL, está em desenvolvimento há mais de 10 anos e tem performance comparável a aplicações nativas graças a seu compilador JIT, garantindo compatibilidade não só entre sistemas operacionais, como também entre tipos de processador , ou seja, escreva seu código em um i386, e ao rodar em um micro 32, 64 ou 128bits ele vai aproveitar todos os recursos disponíveis.
Pelo visto o Lina faz o oposto do Wine. Porque ninguém pensou nisso antes?
Pode até no final das contas ser um Vaporware, mas pareceu muito interessante.
Na verdade qualquer programa rodado no Linux, tendo-se o código-fonte do mesmo, é possível gerar um “bytecode” para a VM Lina, o que não atrapalha em nada no desenvolvimento nem causa dependência da mesma. Adiciona uma liberdade.
Compilar para outros sistemas é complicado exatamente por causa de bibliotecas. Cada uma dessas aplicações está usando GTK ou alguma outra lib. Seria interessante ter a VM e não ficar se preocupando em mandar o usuário baixar isso.
Pra mim, Java é uma ótima linguagem multi-plataforma, mas pode ser que o cara desenvolva para C/C++ e queria manter esse mesmo programa funcionando no Linux, Unix, Windows, sem ter que ficar preocupando com GTK, Qt pro Windows, fora outras bibliotecas. Então ele simplesmente compila pra essa VM e implanta nos clientes que não são Linux.
O problema que eu vejo no JIT é a compilação a todo momento de execução, e só quando ela compensa em termos de carga de sistema. Ela só ocorre depois de X threads de execução e quando ela ocorre leva-se alguns segundos para compilar. Seria legal que o Java fizesse isso na primeira vez que o programa executa no SO e depois nunca mais, ai sim eu diria que o Java é um substituto para C++.
Em todo caso, o Lina é uma alternativa interessante, coisa a ser olhada, pois pode ser algo muito usado (como também pode nunca ser muito usado).
Paulo,
pois é. Mas como o guigouz disse já existia algo do tipo. Na verdade acho que a vantagem do Lina é a integração e praticiadade, pois isto tudo já existia de alguma forma.
A vantagem que vejo nisso tudo, é a compatibilização dos sistemas. Tem muita gente que acha isso ruim, mas como o mercado é do adversário, a compatibilização é boa para nós que temos a menor fatia [geral]. Também vejo com bom olhos por que tudo que compatibiliza várias coisas tende a priorizar o melhor, o mais barato e o que suporta todos (no caso, o Linux). Por isso vejo com bom olhos também o Wine.
Além disso, tira produtos ruins do mercado, ajudando o OpenSource se fixar, e ajudando assim o Linux.
Só um comentário, Lucas…
Você disse que parece Java? Isso dá a entender que apenas Java usa máquina virtual. =P
Java (1993) não é nem a única nem a primeira linguagem a rodar sobre uma máquina virtual.
Outros exemplos de linguagens que rodam em máquina virtual: Lua (1993), Python (1991) e Smalltalk (1971).
Portanto, isso acrescido aos comentantários anteriores, só podemos concluir que o Lina é mais uma enrolação.
[]’s
Rodrigo,
destes que você falou não sabia que SmallTalk rodava em Máquina Virtual. Usei o Java por ser o maior exemplo de VM, pelo menos no popular, desculpe se pareceu generalizado, mas não foi essa a intenção.
Bom, pode ate ser um enrolação, mas ela vem padronizar uma coisa que já vem sendo feita, que é portar aplicações do Linux para outros sistemas.
É claro que a mídia exagera na notícia, mas isso não quer dizer que o Lina não possa ser bom.
[]s