Por que um código escrito em Java pode rodar em qualquer plataforma?
Bom dia, boa tarde e boa noite. Ao discutir sobre Java você provavelmente já ouviu falar que a linguagem pode ser executada em qualquer plataforma. Esse é o famoso slogan dessa linguagem de programação de alto nível “Escreva uma vez, execute em qualquer lugar”.
Mas, você já parou para se perguntar como é feita essa proeza? É exatamente isso que veremos no decorrer desse artigo.
Entendendo o conceito de WORA
WORA é o acrônimo de “Write once, run anywhere” ou “Escreva uma vez, execute em qualquer lugar” em português. Esse slogan, criado pela Sun MicroSystems – empresa fabricante de computadores e desenvolvedora de linguagem – explica exatamente o que estamos falando aqui: você pode escrever um código Java em qualquer sistema e ele funcionará em qualquer um que esteja habilitado para a linguagem.
Esse é um dos motivos pelo qual a linguagem teve e ainda tem tanto sucesso. De acordo com o TIOBE index, atualmente, Java é a segunda linguagem mais utilizada por programadores no mundo.
Uma linguagem independente de plataforma
Vamos do começo, para entender o que é uma linguagem independente de plataforma é preciso saber primeiramente o que, de fato, é uma plataforma.
Uma plataforma, nesse contexto, é a combinação de um sistema operacional com um processador. Por exemplo, o sistema operacional Windows utiliza o processador Intel. Essa junção é o que chamamos de plataforma. Outro exemplo, o sistema operacional Linux pode utilizar o processador AMD. Novamente, essa combinação é o que chamamos de plataforma.
É necessário lembrar também que as máquinas apenas entendem machine code (código de máquina):
A linguagem de máquina inclui dígitos binários (0s e 1s), decimais hexadecimais e octal. O que não é nada conveniente para nós, seres humanos, e por isso, não escrevemos código diretamente em linguagem de máquina.
Antigamente, na maioria das linguagens de programação, como por exemplo C++, é feito o uso de um compilador ou intérprete para gerar um código em linguagem de máquina que será apenas utilizado em uma plataforma específica. Isso acontece por inúmeros fatores e tem muito a ver com o hardware e os componentes internos da máquina, por exemplo; o código de máquina para um processador de 32 bits geralmente não é executado em um processador de 64 bits, mesmo que seja do mesmo fabricante.
O fato de os conjuntos de instruções dos processadores serem tão diferentes e as chamadas de sistema também serem tão diferentes é uma das razões pelas quais as linguagens independentes de plataforma são tão predominantes, já que estamos no assunto, por exemplo, Java.
Então, ao compilar um programa escrito em C++ em uma máquina com sistema operacional Windows, um arquivo com código-fonte (source code) será gerado, traduzindo o código “humano” para o código de máquina (0s e 1s) mas ele só vai rodar em outras máquinas cuja plataforma é a mesma.
Ou seja, se você tentar executar em outra plataforma, que, é claro, tem um hardware diferente e que por consequência entende o código máquina de forma diferente, você receberá uma mensagem de erro e terá de recompilar o código para que ele seja compreendido pelo novo hardware. Essencialmente, você teria que criar várias versões do seu código-fonte para cada plataforma.
Java Virtual Machine
Você deve lembrar que para começar a programar em Java precisou fazer o download do JDK, JRE e JVM. Esse JVM é o acrônimo de Java Virtual Machine (Máquina Virtual Java). Ela é a responsável pela independência da plataforma da linguagem.
Com a JVM, o código “humano” não é convertido diretamente para um código que o hardware consiga entender. Na verdade, ele será convertido para uma forma intermediária de código chamada bytecode.
O bytecode é uma ponte entre o texto que o programador consegue manipular, e o código de máquina, que o computador consegue executar. O arquivo bytecode que é gerado é interpretado pela JVM (Máquinas Virtuais Java).
Dessa forma, uma vez que o arquivo bytecode for gerado, ele poderá ser executado em qualquer lugar, ou seja, qualquer máquina, que também tenha a JVM. Daí vem o princípio “Escreva uma vez, execute em qualquer lugar”.
Em outras palavras, se você escreveu um código Java em um sistema operacional Windows, sem que precise reescrevê-lo, ele poderá ser executado por uma máquina com sistema operacional Mac, por exemplo. Já que, quem está interpretando o código não é a máquina com sistema Windows ou Mac diretamente, e sim passado pela Máquina Virtual Java (JVM).
O bytecode acabou ficando popular com o Java, mais tarde esse mesmo bytecode também foi aderido por outras “linguagens JVM”, como por exemplo, Kotlin, que também tem essa vantagem de poder ser transmitido em plataformas diferentes.
Conclusão e resumo
Nesse artigo, vimos que Java é independente de plataforma porque usa uma máquina virtual (JVM). O código escrito usando a linguagem de programação Java será compilado em bytecode, que são independentes de plataforma. A JVM (Máquina Virtual Java) cuida das diferenças entre os bytecodes para as diferentes plataformas.
Fonte: Cod3r