Como de costume a informática tende a evoluir para a compatibilização de dados entre as plataformas, de modo a permitir a co-existência de diversas plataformas sem muitos entraves para os utilizadores dos sistemas. No início da era de computadores pessoais era frequente encontrar uma fraca compatibilidade entre o software gravado pelas máquinas, às vezes, mesmo, impedindo que o software corresse em máquinas da mesma marca.
Com a evolução dos sistemas operativos, possibilitou-se a portabilidade do software entre as máquinas, mesmo de marcas diferentes, conseguindo assim criar um ambiente que funcionasse em todos os ambientes com o mesmo sistema.
Com o aparecimento da Internet, mostrou ser necessária a existência de uma compatibilização da informação que era transferida entre os computadores de plataformas diferentes e de protocolos que permitissem a comunicação inter-plataformas.
Os sistemas UNIX e Linux mostraram ser possível a existencia de código portável entre arquitecturas de computadores completamente distinta.
A necessidade de existirem os mesmos programas para múltiplas plataformas começou a mostrar-se cada vez mais obrigatória para os sistemas não detentores da grande maioria do mercado.
O Java que permite que uma máquina virtual corra os programas em todas as máquinas sem necessidade de recompilação. Ambientes como o X11 e o OpenStep que permitem que o mesmo software feito para estes ambientes possa executar em qualquer plataforma. No entanto, todas estas soluções têm problemas em comum: limitam a performance dos programas e necessitam que componentes especiais sejam instalados nos sistemas.
Numa primeira tentativa de correr programas de outros sistemas, apareceu a emulação. No entanto, esta solução apenas se mostrava viável para máquinas com grande poder de computação que corriam o software de emulação de máquinas com poder muitíssimo inferior. A performance era extremamente baixa, sendo mesmo mais baixa que a máquina de Java. A emulação evoluíu muitíssimo desde as primeiras gerações conseguindo hoje muito mais performance, mas não perto daquilo que é desejado.
A Apple inventou um mecanismo que permitiu facilitar a transição dos utilizadores para uma nova arquitectura por duas vezes (aquilo a que se chama de binários FAT, que consistem em programas que contêm o código para ambas as arquitecturas). O esquema funciona, mas não é viável criar aplicações com código para centenas de arquitecturas diferentes.
Passando outros esquemas que foram criados com este fim, mais recentemente apareceram dois concorrentes à posição com grande peso: a Virtualização e o Wine (e derivados). Ambos permitem que se execute o software num outro sistema operativo (estando a virtualização em desvantagem devido ao facto de ser obrigada a executar o outro sistema operativo em simultâneo com o SO host). O Wine tem a vantagem óbvia de executar o software dentro do próprio sistema operativo, sem a necessidade de ter um outro sistema a correr em paralelo.
No entanto, mais recentemente, um projecto com um esquema semelhante ao Wine tem vindo ganhar consideração. O projecto consiste em transformar as aplicações de um outro sistema em versões compatíveis com o sistema operativo desejado. Chama-se Alky Project, e pode ser visto em
http://www.alkyproject.com/.
Num momento em que a virtualização e a \\'wineização\\' pareciam estar a ganhar asas para voar, eis que aparece um projecto com grandes possibilidades de se tornar realmente no método óptimo quando em conjunto com outros métodos, obtendo a performance real face aos novos \\'reis\\' neste campo.