Posts como Mercado + Linux + Mono do Ricardo Figueira e o meu último post em que me questionava sobre alternativas para implementar o meu site mais alto nível, fizeram nascer uma avalanche de perguntas sobre o Mono, e sobre a capacidade do Mono como ambiente de desenvolvimento. É muito interessante toda esta curiosidade no Mono por parte de pessoas que não estão por dentro do mundo do Linux. Porque haverá esta curiosidade?
Primeiro, é preciso saber o que o Mono nos oferece hoje. O que se pode fazer, o que não se pode fazer, que limitações tem o projecto, etc. As ASP .NET estão bem e aconselham-se. O meu trabalho final (que já está bem grandito) corre praticamente sem tirar bem por tanto em Windows, como em Linux. Tal é que temos só um módulo no CVS que é partilhado por mim, e pelo meu colega que usa Windows. E para além das ASP .NET? Nós usamos ferramentas como o nant, como o NUnit, como o NDoc, ferramentas que se usam no mundo Windows, e que estão disponíveis também para o Mono. Cada vez mais se vê os projectos a suportarem o Mono, porque a plataforma já tem capacidade para isso.
Mas não há as System.Windows.Forms... que é algo que muita gente procura. Mas porque é que as System.Windows.Forms ainda não estão disponíveis? Porque elas não foram pensadas para serem multiplataforma. Há coisas nas System.Windows.Forms que só existem no Windows, como por exemplo, o WndProc. Coisas destas são complicadas de emular noutras plataformas, por isso é que tem sido tão complicado para o pessoal do Mono ter uma implementação das System.Windows.Forms pronto. É também por isto que eles estavam a usar o WINE, porque de outra forma seria muito complicado implementar as System.Windows.Forms. O problema é que o WINE está em constante mutação, e trazia muita complexidade às System.Windows.Forms. Por isso, eles decidiram largar o WINE e implementar as System.Windows.Forms totalmente com código managed, usando o WINE somente para quem quer usar as partes das System.Windows.Forms que são específicas do Windows. Para esse caso, há um componente adicional. Eles decidiram isto à pouco tempo e recomeçaram a implementação das System.Windows.Forms, por isso não sei quando estarão prontas.
Por outro lado, existe o GTK# que é suportado pelo Mono e se anda a portar muito bem, tal como várias outras biliotecas que foram portadas para o mundo managed, como o wx.NET, Qt#, entre outros. Contudo é minha opinião, que nem o GTK#, nem as System.Windows.Forms, são as opções adequadas para aplicações Rich Client multiplataforma.
E em termos de ambiente de desenvolvimento? Temos o MonoDevelop que está a evoluir muito bem. Não é um Visual Studio .NET, não tem toda aquela capacidade de debug, tal como não tem alguns dos seus problemas. Ainda não suporta projectos ASP .NET directamente, pelo que é necessário dar-lhe umas voltas. Isto tudo para dizer que, na minha opinião, ainda não está pronto para desenvolvimento mais sério, mas que caminha para essa meta muito rapidamente. Será que o Mono, hoje, é uma opção para as PMEs? Duvido. Ainda tem muitos pormenores muito verdes para isso.
Porque é que eu prefiro o Mono? Bem, eu não prefiro o Mono. No trabalho estou num ambiente completamente Windows, em casa completamente Linux/Mono. A verdade é que tou tão habituado aos dois mundos, que mal lhes noto diferença. Quando começámos o nosso trabalho achámos que seria uma mais valia o projecto correr tanto no Windos como no Linux. Aliás, eu acho que hoje em dia, convém saber um pouco de tudo. Mesmo que o meu futuro profissional passe somente por tecnologias Microsoft, não me faz mal nenhum conhecer outras plataformas como o Linux. Abre-nos os horizontes! E isso é algo muito importante. Mais importante que dizer que se põe de parte uma solução Linux porque uma solução Microsoft é melhor, é dizer que tanto me faz e terei um rendimento equiparável em ambas as plataformas. E que se amanhã tiver de porventura usar outra plataforma, estarei mais calejado e preparado para novos desafios. Foi por isto que eu me esforcei por aprender um pouco de Linux.
Eu nunca digo que o A é melhor que o B, e ataco fortemente quem se põe a dizer coisas dessas. Agora, digo que prefiro o A para determinadas tarefas, e prefiro o B para outras. E falo com conhecimento de causa. Eu aprecio muito o .NET, por isso quero trabalhar com o .NET em qualquer sitio. Para mim é uma espécie de orgulho poder dizer que o meu trabalho final corre no Windows e no Linux e espero, no futuro, poder dizer que o trabalho corre em .NET, ponto final. E o que é correr em .NET? É correr em todas as plataformas suportadas, quer pelo Mono, quer pela própria Microsoft (quem sabe um dia...).
Muita gente receia pelo Mono, com medo que a Microsoft puche do seu poder para o prejudicar. Eu espero que isso não aconteça, mas espero que a Microsoft lute com lealdade. Hoje a Microsoft pode dizer: «Nós temos o melhor ambiente/plataforma para desenvolvimento em .NET/WebServices/Aplicações Web/etc». Eles ganham a guerra pela qualidade do seu software e por todo o trabalho que tiveram para alcançar o nível a que chegaram. Eles não são qualificados como melhores por terem esmagado a concorrência com o poder do seu monopólio, mas simplesmente porque oferecem as melhores opções para desenvolvimento em .NET -- tou só a falar de .NET aqui! E é somente a minha opinião! ;-)
E com isto nós, os developers, é que ganhamos. Temos várias partes a aumentar continuamente a sua qualidade para abafarem os concorrentes. Isto tá-se agora a ver bem é com o Java, que estava completamente adormecido, e agora com o .NET, a Sun acordou para a vida e está a tentar evoluir a sua plataforma. Como o Jose Antonio Silva disse uma vez, no futuro as pessoas não vão ficar presas à plataforma, mas sim às suas facilidades inerentes. O que interessa que haja .NET em todo o lado, se só a Microsoft dispõe de um Indigo e de um Avalon como deve ser? E se o Mono responder à letra? Quem beneficia de haver várias implementações do .NET/Java a lutarem por produzir as melhores ferramentas para os developers?
Voltando ao Mono, quem estiver com um bichinho de curiosidade, nada como dar-lhe uma volta para lhe sentir o sabor. Ou vão achar graça e investigar mais, ou não vão achar graça. Mas pelo menos vão conhecer a alternativa. Aconselho a instalarem uma distribuição de Linux mais alto nível numa máquina virtual e brincarem à vontade. Aconselho o Fedora Core que é mais alto nível e já tem pacotes compilados para o Mono. Depois é investigar um bocadinho e se surgirem dúvidas é falar comigo, ou passar no #mono onde há cada vez mais gente pronta a ajudar.
Resumindo, já dá para fazer umas coisas valentes com o Mono. Qual a melhor opção de desenvolvimento? Isso depende de preferências pessoais e há argumentos válidos em várias direcções. Só espero ter marcado a minha posição de agnóstico relativamente a plataformas. Só quero é que todas sejam amigas, se dêm bem, e corram as minhas aplicações!
Espero ter tirado algumas dúvias, e quem quiser pode por perguntas em comentário. Nota que eu sou novo e sou inexperiente no mercado de trabalho, por isso é natural não ter o know how para poder falar de coisas mais a sério. Tudo o que digo é com base na minha, ainda curta, experiência.
Parto mais daqui a pouco para passar o fim de semana fora, numa LAN com pessoal amigo, por isso não estranhem que eu ande caladinho! Vai ser bom para desanuviar do trabalho e me divertir um pouco com o pessoal.
posted on Friday, August 20, 2004 5:19 PM