Clique e receba as novidades quentinhas no Telegram

É sempre um prazer voltar a dialogar aqui.

Realmente fiquei muito surpreso com a repercussão do post original e não imaginava que estimularia tanto a curiosidade dos leitores. Como foram muitas perguntas às selecionei e fiz esse post resposta. Agradeço os elogios e também as críticas, afinal estamos sempre em evolução. Está aberto o debate respeitoso.

Elton França: Cara pra que complicar as coisas? Basta dizer que o Win 10 Mobile possui uma “máquina virtual Java” embutida.

Márcio: Elton, porque aplicativos Android não rodam em Java, no interior de uma máquina virtual Java. Apks têm sua interface gráfica formada a partir das tecnologias XMAL da Microsoft e Java da Oracle, daí a origem do pagamento de licenças tanto à Microsoft quanto à Oracle, mas necessitam de sua compatibilidade e interpretação. Essa característica foi introduzida no O Windows Mobile, tornando a execução desses programas nativa.

Leo Koster a Elton França: Não é bem assim. Pouco tem Java a ver com a coisa toda.

Elton França: “O Windows Runtime em sua versão para telefones traz consigo um tradutor de códigos Java e C++”. Java é uma linguagem pré-compilada, ou seja, seu código não é transformado em código binário, no caso do Java é bytecodes. Nesse caso, o arquivo pré-compilado precisa de um ‘tradutor’, cujo nome dispensa explicações. O que o W10 fez foi inserir o tradutor (Máquina Virtual Java).

Márcio: Elton, belíssima síntese quanto aos pormenores da tecnologia Java. Parabéns. Entretanto, Elton, sim foi aplicado esse princípio, mas não via máquina virtual, senão ela estaria sobre o sistema operacional, e não diretamente sobre o kernel.

Geraldo Figueiredo: Sou leigo no assunto, mas pelo que li e entendi, os aplicativos Android rodarão de forma nativa no Win 10 Mobile. É isso !?

Márcio: Isso, da mesma forma que rodam no Android. Contudo, apenas na plataforma Mobile não se estendendo à plataforma Desktop, Xbox e demais.

Wallace: Se fosse uma emulação, o SO rodaria um software para rodar o app, no caso do Windows 10 Mobile tem um tradutor (não existe maneira mais simples de se dizer) diretamente sobre o Kernel. O que deu pra entender é que o SO tem um tradutor de linguagens rodando paralelamente com ele. Certo?

Márcio: Wallace, você compreendeu corretamente a diferença. A emulação pressupõe um software que roda sobre o OS e que recebe o popular nome de Máquina Virtual. Em emulação temos: kernel >> OS >> Software Emulador >> Software de outra plataforma.

Mark Wellington: Entendi bem a explicação do Matheus de Souza Bernardo no artigo anterior e apesar de ter comentado não tinha entendido muito bem sobre emulação e virtualização, então pelo o que disse é mesma coisa? Achei que fossem coisas diferentes emulação – caminho longo | virtualização – caminho curto. O Android está executado é por intermédio do Hyper-V (máquina virtual), e lendo o artigo não sei porque alguns disseram que isso seria uma “gambiara” se já é bem usado como disse nos exemplos dos navegadores. No android ou em outros sistemas não há algo parecido? Na sua opinião haveria um jeito melhor de se ter feito isso?

Márcio: Matheus de Souza Bernardo? Então ele está certo…rs. Brincadeira à parte Wellington, Matheus é um rapaz muito estudioso e suas declarações sempre advém de prévio estudo. Muito embora, nunca devemos tomar como verdade uma declaração de outrem, sempre devemos ter espírito crítico e buscar esclarecimento. A diferença entre emulação e virtualização não é quanto à distância de caminho, mas à forma de comunicação entre software e hardware.

O Android, em minha remota opinião, está sendo executado de forma paralela, segundo a patente requerida pela Microsoft meses atrás a qual foi dado o nome de Multi-OS, em versão Android 4.4 Kitkat, mesmo que ela esconda essa propriedade através dos slides que divulgou na Build 2015, fazendo a todos crer que há um subsistema dentro do Windows. Ambos fazem a comunicação direta com o Assembler otimizando o uso do hardware.

Se há um jeito de fazer isso? Claro, ele já existe, é amplamente divulgado e utilizado através da plataforma cruzada Marmalade e Xamarin. Já fazem uso dessas plataformas ActiVision, DropBox, EA Sports e outros players.
Em minha opinião, as Pontes resumem uma tentativa da Microsoft em tentar resolver um problema grave de mercado de programação profissional com ferramentas que possam manter um modelo econômico obsoleto. Escreverei sobre esse tema futuramente.

Santos: VMware, Paralels, Hyper-V, KVM e Xen não rodam sobre um OS, eles rodam abaixo e por isso precisam ter suporte do hardware (feature VT habilitada na BIOS e processador compatível). Quando você habilita um hypervisor desse, o próprio sistema operacional da máquina física passa a rodar dentro de uma máquina virtual (monitor, teclado, mouse são direcionados para ela através do hypervisor), daí você pode criar outras máquinas virtuais, com outros sistemas operacionais, que vão interagir com o hardware através do hypervisor e não vão estar dentro de outro OS, por isso que é rápido.

O conceito que você explicou, virtualização dentro de um OS, também existe mas tá caindo em desuso, pois é mais lento (o que, dependendo do contexto, não significa que não serve). Não depende de suporte no hardware.

Márcio: Santos, VMware, Paralels, Hyper-V, KVM e XEN não rodam abaixo do OS, mas paralelamente ao OS. Eles não realizam a chama de API da plataforma de programação à qual estão sendo executados (Unix, Linux ou Windows NT), mas às mesmas API que sustentam tanto o Kernel quanto o OS. Tecnicamente, na estrutura clássica de programação, à camada abstrata denominada de Assembler, daí a necessidade de serem compatíveis diretamente com o hardware pouco importando sua compatibilidade com o OS em execução, resultando num desempenho excelente.

Aliás, Santos, esse é o mesmo princípio aplicado tanto pela Apple quanto pela Microsoft em suas novas tecnologias de base para a programação de games, respectivamente, Metal e DirectX 12, acesso em paralelo à Assembly resultando em ganho de desempenho. Esse ano a Apple ampliou o uso do Metal também para o OSX, impulsionando consideravelmente os softwares de edição de vídeos.

Wallace: Outra coisa Marcio, sei que estou apressado demais, pois até agora não vazou nada sobre o Project Astoria conseguir fazer o mesmo com os apps do iOS que são de linguagem Objective C (se não estou falando besteira), mas você acha que rodará da mesma forma que está sendo como nos apps Android? E isso não irá ter uma perda de desempenho num modo geral no sistema, já que além de ter um sistema operacional o Kernel terá dois tradutores de linguagens, ou até mais?

Márcio: Wallace, entre as Pontes há uma diferença abissal. As Pontes para iOS, Windows e Web são completamente diferentes da Android. Naquelas o código fonte é trazido para o Visual Studio e compilado nativamente, originando um programa tão executável quanto fosse escrito em C#, C++, Visual Basic ou qualquer outra linguagem com suporte no VS. Quanto ao desempenho do sistema… Vou te dever essa, pois apenas na prática para saber.

USantos: Não quero faltar com respeito a ninguém, a intenção é acrescentar. Assim, me permitam fazer comentários sobre dois pontos no texto que o Marcio escreveu, o princípio dos subsistemas está nos programas navegadores de internet. Subsistemas surgiram antes dos navegadores de Internet. Os navegadores internet (e outros programas) rodam dentro de um subsistema, eles não falam diretamente com o Kernel. Quando um navegador roda aplicações de linguagens diferentes, ele não está traduzindo os comandos para o Kernel, está traduzindo para o subsistema para qual ele foi programado para rodar. O subsistema recebe os comandos do navegador e passa ao Kernel, e o Kernel passa ao Hardware através dos drivers.

Márcio: Santos, tenha em mente que essa postagem não foi uma aula de programação, mas um esclarecimento àqueles que não entendem de linguagem de programação, então muito dos conceitos tiveram de ser adaptados a um linguajar popular, cometendo até certos deslizes técnicos em prol da pública compreensão.

Você não me falta com respeito de forma alguma quanto contesta alguma informação. Pelo contrário seríamos um país muito melhor se as pessoas tivessem espírito crítico mais aguçado com relação à política, e não apenas aceitando falsas pesquisas de opinião ou pareceres técnicos televisivos que retratam uma realidade inexistente.
O princípio dos subsistemas, tecnicamente, encontra-se nas linguagens de script, apenas os relacionei diretamente aos navegadores de internet para que fosse de compreensão popular.

Olha, essa definição de subsistemas é sim clássica e válida com relação às plataformas Unix, Linux, Macintosh (OSX e iOS), mas tenho severas dúvidas que continue a ser aplicado com relação à plataforma Windows NT. Em 2011 houve a concessão de uma patente à Microsoft de transcompilação de Códigos fonte à linguagem nativa do Kernel que não recebeu nome, mas desconfio que seja a Compile In The Cloud.

O Windows Runtime começou a ser desenvolvido a partir de 2010 e foi apresentado em 2012 através do Windows 8.0. Não há nessa patente qualquer menção mais específica quanto à compilação, contudo trata-se de recompilação de códigos à mesma linguagem de programação utilizada para a composição do Kernel.

Então, acho que ao submeter seu código à Windows Store a Microsoft recebe o seu código, seja em qual linguagem com suporte à compilação nativa do Visual Studio, e o transcompila à linguagem C++. Estabelecendo um ecossistema integralmente sobre a mesma linguagem os recursos de hardware estão tão otimizados que são necessários muito pouco para executar códigos que antes, em win32, seriam necessários muitos recursos. Isso explica a execução fluída dos Windows Phone com pouquíssimos recursos de hardware. Confesso que não sei se isso procede, mas das poucas vezes que participei de algum evento oficial da Microsoft e os questionei a respeito nunca obtive um resposta convincente sempre tendo ouvido respostas evasivas.

Andriw: Márcio, interessante seu post, mas uma duvida, isso de rodar aplicações Java, não implica no mesmo problema do Android no passado? Ter que encarar um processo judicial contra a Oracle?

Márcio: Andriw, obrigado pelo elogio. Sendo franco? Estou esperando a mesma atitude da Oracle. Por mais que os leigos insistam na tese de “O Google não pode fazer nada”, confundindo os conceitos de Open Source com Freeware, a Oracle não só pode como deve, pois sua tecnologia Java é proprietária e um Apk é formado a partir da interface gráfica que possui elementos tanto em Java quanto em XMAL da Microsoft.

Sinceramente? Não sei quem foi o responsável pela aprovação desse projeto dentro da Microsoft. Uma atitude completamente sem sentido, estapafúrdia, sem embasamento legal e que beira a irracionalidade. Praticamente um ato de desespero. Eu não esperava uma atitude dessas de uma das empresas líderes em TI globalmente.

É possível realizar essa mesma ação? Óbvio, basta dar suporte apenas aos códigos para Android escritos em C++, obrigando ao programador excluir sua interface gráfica para Android, ou seja, retirando toda e qualquer reminiscência de tecnologia Java, compondo uma nova interface gráfica totalmente em XMAL dentro do Visual Studio e recompilando-o nativamente, originando um programa universal para Windows. A mesma técnica que está sendo aplicada na Ponte para iOS. Sinceramente, onde você foi parar Microsoft?

Williams Pereira e Jucileudo Lima: Quais as vantagens e desvantagens trará para a plataforma? E de que forma isso afetara a comunidade de desenvolvedores? Tenho um App com código pronto do android/IOs, pra ele executar no W10M tenho que coloca-lo na loja, Logo se o DEV não estiver afim de mudar nada nem interface, Não teria que cobrar que fosse mudado pelo menos a Interface para um padrão do SO?

Márcio: Sendo muito franco, com relação às Pontes para iOS, Web e Windows, só vislumbro vantagens. Aliás, grandes vantagens. O público alvo desses programadores é exponencialmente ampliado, pois você aumenta o marketshare de seu código.

A ferramenta de trabalho de um programador não é a IDE, o SDK, a API tampouco a plataforma. Suas ferramentas são a criatividade e a linguagem de programação. Então, você não é um programador “Android”, “iOS”, “Windows”, você é um programador C++, C#, Objective-C, HTML/JavaScript e demais e com base nesse conhecimento é que estuda a API dos sistemas, seu SDK e faz uso da sua IDE para dar vida à sua criação.

Quanto aos códigos Android em Java, além de eventuais processos judiciais da Oracle pelo uso de tecnologia proprietária não licenciada, códigos em Java não podem ser otimizados por serem previamente compilados, não formam binários, sendo questionáveis com relação ao desempenho. Mas, não entrem em pânico, vamos ver como as coisas na prática se saem.

Quanto à interface. Os códigos em Objective-C têm sua interface, os arquivos de extensão storyboard, excluídos e será necessária a composição de uma nova interface gráfica. A composição de uma interface gráfica não leva mais de 2 horas de trabalho de programação, difícil é o designer cria-la originalmente o que pode levar meses para conciliar o desejo do programador à experiência do usuário, beleza, elegância, intuitividade…

Os códigos Android, como serão executados nativamente no sistema, sequer necessitarão alterar sua interface gráfica, podendo ser portados tal como se encontram. Uma crítica pessoal. A Microsoft, no vã desejo de trazer os aplicativos Android para sua plataforma, está pagando caro com essa experiência, pois alterou os preceitos de sua interface gráfica para alinhá-la ao Android. A consequência disso é que os usuários desktop estão tendo dificuldade de uso dos programas modernos para o Windows, pois as barras de janela e comandos foram substituídas pelo menu de contexto, popular menu hambúrguer, dificultando o fluxo de trabalho e a experiência do usuário. Ela tampouco conseguiu compor uma interface universal, pois o programador tem trabalho exaustivo, compor uma interface gráfica para cada dispositivo Windows, perdendo qualquer sentido na afirmação da programação de um código universal. Escreverei uma postagem sobre esse tema futuramente.

Agradeço mais uma vez o espaço e informo que não publicarei essa semana a continuação da última postagem demonstrando a essência do Windows, pois amanhã realizo a operação de correção de miopia e astigmatismo e assim que eu estiver com minha visão plena, retomaremos nossa conversa.

Um abraço.