Caso algum cliente tente fechar um negócio com seus fornecedores, você como empresário deixaria de firmar a parceria por causa de uma ideologia? Será que os Clientes entendem essa rivalidade existente entre os usuários de produtos livres e proprietários? Será que essa rivalidade é válida? Traz resultados positivos para crescimento e evolução de todas as partes ou é apenas uma estratégia de atingir alguém ou alguma idéia?
Precisamos ser profissionais sérios. Reconhecer o valor de cada plataforma e explorar o que de melhor cada uma tem. A escolha precisa ser baseada em custo/beneficio de qual tecnologia vai trazer mais valor agregado à solução, empresa, cliente. Nunca devemos ser egoístas para escolher ou sugerir uma solução baseada no “achar”, ou pior baseada em alguma informação distorcida publicada na Internet em Fóruns, onde algum usuário inexperiente publicou algum texto ofensivo ou até criminoso.
Outra situação atual é grande diversidade de parques de tecnologia existentes, assim precisamos como administradores colocar diversos legados de sistemas de informação existentes para comunicarem entre si. A busca dessa comunicação entre diversas tecnologias hoje é conhecida como uma nova onda: Interoperabilidade.
O objetivo deste artigo não é discutir, argumentar, mostrar ao mundo a necessidade de cada um rever seus próprios conceitos e ideologias. O objetivo é mostrar a tecnologia como ela é: Um conjunto de produtos e serviços disponíveis para os profissionais sérios buscarem melhores soluções e resultados para os clientes. O exemplo a ser demonstrado é uma aplicação desenvolvida em VB.NET na sua interface e o negócio do sistema ser desenvolvido com C#. A aplicação final será executada em um cliente rodando GNU/Linux.
O projeto é bastante simples ele recebe dois valores em texto (Nome, Email) e então são adicionados em uma lista de objetos do tipo Pessoa (Nome, Email) e conseqüentemente utilizar a lista como fonte de dados em uma combobox. O código de exemplo pode ser baixado clicando no link logo abaixo:
A imagem 01 a seguir ilustra a execução do aplicativo em um cliente Windows Vista. Observem o Visual Studio aberto com o código fonte ao fundo e a janela inicial do sistema sendo executado.

Figura 01: Execução do aplicativo no cliente Windows Vista
Existe um aplicativo The Mono Migration Analyzer (MoMA) utilizado para analisar as dll’s criadas e assim trazer um resultado ilustrando a capacidade de se migrar ou não um aplicativo de um sistema operacional para outro. A ferramenta faz uma análise para verificar se o código criado pelo desenvolvedor é compatível com o MONO. O mono para quem não conhece é um framework capaz de executar aplicativo .Net em diversos tipos de sistemas operacionais.
A figura 02 ilustra a janela inicial do aplicativo MoMa:

Figura 02: Janela Inicial da MoMa
O próximo passo é justamente incluir as dll’s criadas pelo projeto inclusive o executável com extensão .EXE para a ferramenta analisar e confirmar a compatibilidade ou não. A Figura 03 a seguir ilustra a inclusão das namespaces desenvolvidas pelo nosso projeto.

Figura 03: Inclusão das Dll’s na ferramenta de análise.
Ao se concluir a análise a ferramenta não irá encontrar erros ou métodos não compatíveis com o mono, caso isso aconteça é necessário rever o código do desenvolvedor ou aguardar a evolução do projeto MONO. O passo seguinte da ferramenta é um feedback a ser enviado a equipe do projeto. A figura 04 ilustra a conclusão da análise da ferramenta MoMa:

Figura 04: Resultado da Ferramenta de análise.
O processo de configuração de um ambiente Linux com possibilidade de se executar projetos .Net sobre o MONO não é objetivo desse artigo, logo sugerimos o download de máquinas virtuais já pré-configuradas onde nenhuma configuração é necessária. Para se executar o aplicativo basta um clique duplo no executável. Os links para download das máquinas virtuais estarão disponíveis no final deste artigo.
Ao se executar a máquina virtual o sistema operacional instalado é o OpenSuse 10.3 já com o mono configurado. A figura 05 a seguir ilustra a execução do aplicativo de exemplo no ambiente Linux, sem nenhuma configuração extra, para a execução ocorrer bastou um clique duplo sobre o executável. Com esse exemplo demonstramos a portabilidade do .Net.

Figura 05: Interoperabilidade e Portabilidade com .NET
FAQ:
Por que o .NET é portável e como ele funciona em diversos Sistemas Operacionais?
A portabilidade do .Net só é possível devido a sua arquitetura. Quando o desenvolvedor gera um código em C#, VB.NET ou qualquer outra linguagem suportada o compilador especifico de cada linguagem gera uma linguagem intermediária (IL). Ou seja, o código desenvolvido em C# (linguagem de alto nível) é compilado e gerado um novo código agora em uma linguagem intermediária (IL). Esse novo código é então portado aos diversos tipos de Sistemas Operacionais.
Mas como a linguagem intermediaria faz o programa ser executado em qualquer SO?
Nos diversos Sistemas Operacionais é instalado um Framework específico para aquele modelo de SO. Por exemplo, no caso do OpenSuse 10.3 utilizamos o Mono. No Windows utilizamos o .NET Framework 2.0. Quando este compilador específico de cada SO recebe a linguagem intermediaria é novamente compilado esse código pelo Framework, por um de seus componentes conhecido como Just-in-Time Compiler. Esse compilador então pega a linguagem intermediária e a compila novamente só que dessa vez gerando uma linguagem de máquina. (baixo nível) específica do Sistema Operacional o qual executa a aplicação.
Referências: