Cross-Platform – “A soma de todas as mudanças”

Cada vez mais ouvimos falar em cross-platform! Não é algo novo, é algo já antigo em verdade se diga! Se nos referirmos ao cross-platform como a capacidade de compilar e correr o mesmo código em múltiplas plataformas de hardware poderemos recuar tanto quanto a criação da linguagem C, por Dennis Ritchie e Ken Thompson em 1972, quando trabalhavam nos Bell Labs. De forma brilhante, estes senhores decidiram escrever uma linguagem que permitisse compilar o código e executá-lo independentemente do hardware. Inicialmente era um DEC PDP-7, posteriormente um DEC PDP-11, tendo a linguagem sido utilizada para escrever maior parte do kernel do sistema operativo UNIX.

Já nessa altura se falava e pensava em cross-platform, a um nível mais de hardware do que de sistema operativo, tendo como objectivo a redução do tempo consumido na portabilidade do código para novas plataformas de hardware e / ou software.

Durante anos, pouco se falou sobre este conceito. Esta mudança foi principalmente da forma de pensar, havendo claramente quem pensasse e defendesse de forma convicta que o código escrito para uma plataforma não deveria correr noutra plataforma diferente, quer fosse hardware ou software (sistema operativo), diferente. De um lado os PC-compatíveis com software escrito para arquitectura x86. De outro os computadores a Apple que corriam software escrito para uma arquitectura de hardware diferente baseada em processadores da Motorola, desde o 68000 até aos PowerPC, várias gerações de processadores e sistemas operativos que não corriam em PC-compatíveis, formando ecossistemas fechados e isolados. Corria o pensamento não propriamente coincidente com o “cross-platform”, onde o código escrito para uma plataforma, apenas correria naquela plataforma e caso tivesse de ser portado, seria reescrito na íntegra, consumindo tempo e recursos, nem sempre disponíveis, limitando tanto os utilizadores, como os criadores de software.

Apesar de ter começado a soprar o “vento da mudança” do cross-platform em 1972, o “platform-specific”, manteve a “supremacia” desde então, tendo soprado de novo com mais alguma “força” em meados de 1995. A esta altura a Sun Microsystems disponibilizou a primeira implementação da linguagem de programação Java, o Java 1.0, sob o lema “Write Once, Run Anywhere” (WORA), traduzido “Escreve uma vez, corre em qualquer parte”.

Sem custos de execução, permitia correr o código nas plataformas mais populares da altura. Relativamente segura (ao que era conhecido à data de publicação da linguagem), permitia entre outras funcionalidades restrições de acesso a redes e a ficheiros. Na época uma esmagadora maioria dos navegadores web, incorporaram a capacidade de executar applets Java dentro de paginas web, dando assim uma ainda maior popularidade a esta linguagem e ao “movimento cross-platform”, que não sendo um movimento formal, era uma ideia, um conceito, um objectivo, uma filosofia, que se mantinha viva, ainda que discretamente.

No entanto, esta linguagem veio “perder algum ímpeto” no caminho do cross-platform em 1997, aquando de uma disputa legal entre a Sun Microsystems e a Microsoft Corporation, em que a Sun Microsystems, detentora da linguagem, reclamava que a implementação da Microsoft não suportava RMI ou JNI e continha código “platform-specific”, (específico a plataformas) contendo funcionalidades das quais a Microsoft era proprietária. Esta disputa levou a um acordo em 2001 e ao facto do sistema operativo Windows deixar de trazer as ferramentas de execução de aplicações feitas em Java no seu pacote “package”. Este poderá ser considerado um dos revezes do cross-platform, uma vez que com esta tomada de posição, o Java, apesar de continuar a correr nas plataformas Microsoft, deixou de vir pré-instalado, o que leva a mais tarefas por parte do utilizador e como tal, menos adesão a esta linguagem e toda a filosofia subjacente.

Mas os tempos mudam, os ventos mudam, tudo muda, a indústria avança, a tecnologia melhora e o que outrora era ficção científica, passa a ser uma realidade. Por exemplo os smartphones! Certamente alguns se recordam do “Communicator” da série Star Trek. Um dispositivo que permitia comunicar de forma idêntica ao que agora conhecemos como telemóvel e até “smartphone”, mas que à data da transmissão televisiva da série, não era mais do que ficção científica. Ora bem, o advento dos dispositivos móveis, da computação móvel, dos chamados “smart devices”, trouxe mais plataformas de hardware e sistemas operativos para aquilo que já era um “mundo pouco cross-platform” com poucas plataformas! A grande variedade de sistemas operativos e arquitecturas de hardware destes dispositivos, cada um com os seus SDKs, linguagens e APIs, dificultava ainda mais o conceito do cross-platform do “write once, run anywhere”, o conceito de Ritchie e Thompson, de 1972: escrever o código uma vez, compilar e correr em qualquer plataforma. No entanto esta ideia, este “movimento”, não tinha “falecido”. Apenas tinha encontrado os seus revezes, ganhando fôlego e balanço, fazendo “avanços à retaguarda” e avanços em frente, conforme o mundo evoluía.

Poderia citar aqui, uma série de ferramentas e players do desenvolvimento cross-platform, mas como se trata de um artigo de opinião e não de algo publicitário, nem de uma resenha histórica, damos um “salto”, para uns anos mais há frente e para umas quantas tecnologias “depois”, deixando apenas aqui a menção a um projecto que me cativou a atenção desde o seu início: o Mono. Um projecto “singular”, de código aberto, software livre, que pretendeu criar uma implementação livre e cross-platform da linguagem C# e da framework .NET da Microsoft, para que corresse em todas as plataformas de hardware e software, desde computadores x86 / IA64 com sistema operativo Windows, até outros dispositivos e sistemas operativos como GNU/Linux, BSD Mac OS X da Apple, Solaris e até nas consolas de jogos como o caso da PlayStation 3, Nintendo Wii e Xbox 360. Apesar de controverso dentro da própria comunidade open-source, conseguiu avançar, manter-se, existir e dar origem ao que agora muitos poderão conhecer como Xamarin, fornecendo ferramentas de desenvolvimento cross-platform para dispositivos móveis, que executem os sistemas operativos Windows Phone, Android e iOS.

Este foi um projecto que cativou a minha atenção desde o seu início, por permitir desenvolver para diversas plataformas e ser um projecto de código aberto, livre, deixando a liberdade criativa para os programadores fazerem o que fazem bem: Criar novos mundos, melhores mundos, no código que escrevem! Esta ideia, esta filosofia, cativou-me pelo que recomendo o leitor a explorar o projecto Mono e a filosofia do desenvolvi- mento cross-platform, como ela se encontra descrita em diversos artigos, sendo a parte mobile bem focada no artigo de Stephen Fluin, no artigo de Henning Heitkötte, entre outros.

Não sendo o objectivo deste artigo falar de ferramentas e dando o salto em frente, neste momento vivemos numa altura em que o desenvolvimento cross-platform parece estar num ritmo de aceleração quase vertiginoso, em que cada vez aparecem mais dispositivos e plataformas de hardware, mas todas elas já suportando os sistemas operativos existentes e de “main stream”, como o caso do GNU/Linux, UNIX, Windows, Android. Poucos são os fabricantes que ainda mantêm os seus sistemas operativos a correr apenas no hardware por si produzido, como o caso do iOS e do Mac OS. Estes sistemas já permitem execução de aplicações cross-platfrom, sendo que todos os sistemas operativos acima referidos, promovem uma cada vez maior abstracção entre o programador de aplicações e o hardware em que estas aplicações são executadas a um nível substancialmente mais baixo.

As mudanças, decorridas ao longo de décadas de avanços e recuos, de pontos altos e pontos baixos, de ideias contraditórias e personalidades divergentes, foram todas elas contribuindo e somando para que o desenvolvimento cross-platform fosse uma realidade! O desenvolvimento em que o programador, o “criador” de software, não tem de se preocupar com o hardware onde o seu programa vai ser executado, tão pouco com o sistema operativo onde este será executado, é de longe a maior vantagem desta “nova” realidade. Basta escolher uma boa ferramenta de desenvolvimento cross-platform, e tudo será resolvido! Não haverá necessidade de recompilar e reescrever código, para correr na plataforma A ou B, ou ter de fazer opções entre que plataformas suportar e não suportar, limitando tanto o programador, como o utilizador que por querer usar uma determinada aplicação teria de adquirir hardware e sistema operativo que a executasse em concreto.

A evolução da tecnologia, das ideias e do pensamento, levou a este somatório de acontecimentos que nos trouxe até aqui e é provável que num futuro próximo, nos leve bastante mais além, a um nível ainda mais simples desenvolvimento cross-platform, onde todas as aplicações serão “universais”, executadas em todo o lado, sem uma dependência quase cega de um sistema operativo nem uma arquitectura de hardware. Tal como em 1972, em que dois carismáticos e brilhantes cientistas idealizaram e escreveram toda uma linguagem que permitia esse desenvolvimento e que de seguida os levou à reescrita de todo um sistema operativo, nessa mesma linguagem, para que ”fossemos libertados” assim da dependência de um determinado hardware para executarem o seu software.

Até lá, programemos e façamos do mundo um lugar melhor, mais especial, escrevendo código!

Referências

  • Evaluating Cross-Platform Development Approaches for Cross-Platform Development in C++ (Syd Logan)

Publicado na edição 51 (PDF) da Revista PROGRAMAR.