É possível usar o Lazarus em alternativa ao Delphi para desenvolver aplicações comerciais?

O Lazarus é um ambiente de desenvolvimento integrado que tem como objetivo ser compatível com a sintaxe Delphi, além de suportar diversas arquiteturas e sistemas operacionais diferentes. Porém, é comum existir a dúvida se o software livre, nesse caso o Lazarus, é capaz de substituir inteiramente o proprietário, Delphi, na tarefa de construir um sistema.

[ Hits: 75.460 ]

Por: Evaldo Avelar Marques em 15/07/2010 | Blog: http://evaldoavelar.blogspot.com/


Implementação no Lazarus e limitações encontradas



O objetivo maior desse experimento é fazer o levantamento das limitações da IDE do Lazarus e o impacto de uma migração de projetos para que seja possível analisar a possibilidade de seu real uso em desenvolvimentos de aplicações comercias.

O primeiro passo foi preparar o ambiente do Lazarus para o desenvolvimento como no Delphi instalando a ZEOS Library. Tentou se instalar a versão disponibilizada no site sourceforge.net, porém está versão apresentou uma serie de problemas e não conseguia conectar se ao banco de dados.

Foi preciso pedir ajuda em uma lista de discussão especializada em Lazarus. Um membro da lista sugeriu uma versão que ainda está em fase de desenvolvimento mas que acabou funcionando. Após a instalação da ZEOS Library deu se inicio a instalação do Lazarus Report para a criação dos relatórios, este não apresentou nenhum problema.

Preparado o ambiente, iniciou-se a criação do projeto para a aplicação e ao criar um novo projeto no Lazarus apareceu um bug que não permite que se faça uma compilação sem antes salvar o projeto, fato que não causou problemas para o desenvolvimento, mas que foi custoso encontrar o motivo. Com a criação do projeto deu se início a criação dos formulários seguindo as mesmas etapas que no Delphi iniciando-se pelos formulários padrões.

Na criação do formulário de cadastro/edição e do formulário do visualização que fazem uso dos componentes de acesso a dados foram encontrado mais algumas dificuldades. Houve problemas para associar o Datasource a um Dataset que estava situado em um DataModulo. O componente Query que faz consultas ao banco de dados, na versão para o Lazarus, não possui mascara para edição de campos o que obrigou a instalação de um componente DBMaskedit para conseguir colocar mascara nos campos de edição.

O componente DBGrid do Lazarus é mais avançado do que o Delphi tanto em aparência quanto em funcionalidades, apesar de não possuir alguns eventos como o "DefaultDrawDataCell". Mas a grande vantagem é que o desenvolvedor não precisa escrever código para pintar as zebras nas linhas do DBGrid, pois o componente já possui esta funcionalidade.

Herança visual é muito importante para reduzir o número de telas em uma aplicação e para reaproveitar o código. Nesse ponto uma limitação do Lazarus está em não adicionar a palavra-chave "inherited" automaticamente aos métodos herdados o que provoca erro nas rotinas que acabam não executando o código do pai.

No desenvolvimento do formulário principal, houve dificuldades para manipular o componente MainMenu, responsável por criar o menu de navegação na tela, devido a sua forma de "trabalhar" ser diferente a do Delphi. Também houve dificuldades para se "visualizar" um componente do tipo "Panel", que faz o papel de contêiner, ocorrendo que é muito fácil confundi-lo com o próprio formulário.

Foram encontradas algumas limitações quanto ao uso de imagens no projeto: como a da IDE não suportar ícones de tamanho 24x24, obrigando a se fazer um redimensionamento dos ícones que foram usados no Delphi. Também não é possível visualizar as imagens contidas uma ImageList ao fazer um relacionamento de um objeto com um ícone. E ao alterar um ícone em actionlist, o objeto que está vinculado a esta ActionList não atualiza o ícone sozinho, é preciso fazê-lo manualmente.

Na codificação do formulário foi usado o mesmo código que do Delphi e foi encontrada a falta da função LockWindowUpdate que faz referência a API do Windows, fato que é justificado pelo Lazarus ser multi-plataforma. Também não foi possível fazer com que a aplicação se comportasse como MDI, onde os formulários são aberto dentro de outros formulários. Outro problema é que quando não se faz mais uso de procedures que são declaradas automaticamente pela IDE, como é o caso de um clique de botão, a IDE não remove o código da procedure como ocorre no Delphi e é necessário remover manualmente.

As ferramentas de depuração de código não conseguiram ser tão eficientes quanto as do Delphi, como é o caso do dialogo de visualização de variáveis que não consegue visualizar o conteúdo de uma variável que está em outro módulo, obrigando o programador a usar recursos antigos como dar um showmessage na variável para ver seu conteúdo. O compilador também gasta um pouco mais de tempo para gerar os binários da aplicação.

Quando o aplicativo está em execução e por alguma razão gera alguma exceção, é exibida uma mensagem genérica na tela, sem muita informação da origem do erro, isto pode ser um grande problema para o programador encontrar o que está gerando o erro.

O executável gerado possui um tamanho 23 vezes maior do que o criado no Delphi que estava com 2,67MB e no Lazarus com 45 MB. Mais tarde descobriu-se que uma configuração na IDE que reduziu o tamanho para 3,02MB. Ao usar esta configuração as opções de depuração não funcionaram mais.

A interface do editor de relatório dificultou um pouco para encontrar o componente label, e em alguns momentos a IDE fechou abruptamente perdendo todo o trabalho que foi feito e que não havia sido salvo. Também não foi encontrada uma "régua" para auxiliar no posicionamento dos componentes na tela. Por outro lado, foram feitos testes com o aplicativo em execução onde foram gerados relatórios de 100 páginas e não houve nenhum problema.

Apesar de dar suporte ao código escrito no Delphi, o Lazarus não permite portar componentes feitos para Delphi, o que pode dificultar a migração de aplicações que usam componentes mais específicos, ou proprietários como impressoras fiscais, controle de portas seriais dentre outros.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Ambientes de desenvolvimento
   3. Desenvolvimento
   4. Ambiente Delphi
   5. Implementação no Lazarus e limitações encontradas
   6. Conclusões
Outros artigos deste autor

Software envelhece?

Quando é que eu vou usar isso na minha vida?

Firebird, fazendo valer o lado do servidor

Leitura recomendada

Como instalar o compilador Free Pascal

Instalando o Kink - Monitoração de tinta de impressoras HP e Epson

Configurando o aMSN para Lan House e/ou Cyber Café

Instalação do Debian 3.1r2 Sarge como servidor

Aplicando relevo em símbolos com o Gimp

  
Comentários
[1] Comentário enviado por brian_ch em 15/07/2010 - 21:58h

Nossa, parabéns, essa foi uma avaliação muito completa, além dos problemas citados uma das coisas que eu achei problemática foi o som, o lazarus não vem com uma ferramenta que possibilite colocar sons na aplicação, eu testei um componente chamado ACS que só consequi instalar usando uma resposta postada no forúm do lazarus e ainda não obtive resultados com ele (nem com o openAL outra opção para usar aúdio nas aplicações), seria possivel usar recursos do SO para isso, mas ai a aplicação não seria multi-plataforma.

O debugger realmente precisa melhorar já que é algo essêncial no desenvolvimento, outro problema que eu encontrei foi não conseguir conectar com o mysql5.1 o que eu não sei se tem solução.

Mas justamente por não ser ainda uma ferramenta completa é que precisamos tentar ajudar, sempre vejo muitas criticas ao lazarus por aí mas não gosto dessa atitude de querer tudo na mão, tudo pronto, a coloboração é que faz a beleza do open source.

[2] Comentário enviado por ParadoxDK em 16/07/2010 - 09:54h

Evaldo, você está de parabéns!

Sou programador Delphi e já utilizei o Lazarus para trabalhar no Linux, e, acompanhando seu crescimento, o Lazarus tem uma ótima compatibilidade com programadores Object Pascal migrados do Delphi, apesar de alguns incovenientes como a questão do áudio em aplicações, como o Brian comentou, se torna muito mais viável e rápido do que desenvolver com fpc na unha.

Muito bom este artigo!

[3] Comentário enviado por erlantz em 17/07/2010 - 03:57h

Também parabenizo pela ótima iniciativa. Este é um tipo de trabalho que ajuda muito a comunidade e divulga cada vez mais o software livre.
Sobre a questão do tamanho dos executáveis, se não me engano há um utilitário na instalação do lazarus chamado strip que ajuda a reduzir o tamanho do programa após compilado.
Uma sugestão é fazer o mesmo tipo de avaliação para uma aplicação em Visual C# que tem como opção o Mono.

[4] Comentário enviado por zendrael em 17/07/2010 - 11:04h

Olá!

O Lazarus é muito bom e, fora o som, supre perfeitamente as necessidades do Delphi. Para comandos específicos de Windows, declarar a lib "windows" no uses do arquivo principal do projeto. Para diminuir o tamanho do executável, não precisa desabilitar o debug; só utilizar o strip e o upx que vem junto com o lazarus (tanto no linux quanto no windows ou mac....)
É legal comentar também que o Lazarus pode ser útil para aplicativos WinCE e compila também projetos para gameboy e está já compilando alguns projetos simples para iPhone. Além de possibilitar a escolha da biblioteca gráfica que você deseja (GTK, QT...).
T+

[5] Comentário enviado por daigo em 17/07/2010 - 11:06h

Gostei da matéria. A avaliação, principalmente dos pontos negativos, serve para prevenir quem pretende migrar, independente de ser no Linux ou no concorrente. Infelizmente, o Lazarus não encontra-se no repositório do Lenny e quando tento instalar a versão disponível no site, faltam muitas dependências; engraçado que no Ubuntu, ele está disponível, então, quando quero fuçar, uso a source-list dele e faço a instalação sem muitos problemas.
Um incomodo que acho com relação ao Lazarus no concorrente do Linux é com relação ao tamanho ocupado do HD (não lembro o tamanho certo agora). A interface é feita em que? Como poderíamos colaborar seja financeiramente ou com código para acelerar o desenvolvimento?

Para quem não conhece, existe um projeto nacional muito bom desenvolvido em Lazarus, chama-se Jubarte (http://sites.google.com/site/jubartecalc/).

[6] Comentário enviado por vinyanalista em 18/07/2010 - 07:58h

Isso aí, excelente artigo. Favoritei.

Tenho pesquisado sobre o Lazarus por esses dias, pensei em utilizá-lo no meu TCC, mas diante de problemas como os citados aqui decidi usar Delphi: não consegui conectar com as versões mais recentes do Firebird e do MySQL (tentei inclusive a Zeos Library, sem sucesso), a depuração não é muito eficiente e algumas funções que fazem chamada direta à API do Windows não estão disponíveis.

Mesmo assim, estarei publicando aqui no Viva o Linux este mês o que consegui achar sobre o Lazarus, os artigos já estão em produção.

A maior vantagem do Lazarus sobre o Delphi, na minha opinião, é a possibilidade de gerar executáveis para diversas plataformas a partir do mesmo código (o slogan do Lazarus ilustra essa idéia: "write once, compile everywhere"). Consegui nas minhas experiências gerar programas com threads que funcionassem tanto em Windows quanto em Linux. É bem verdade que você tem que fazer alguns poucos ajustes para um sistema ou outro, mas acho que em pelo menos 90% não foi necessário realizar nenhum tipo de ajuste ou adaptação.

Com relação à ferramenta strip, utilizada para reduzir o tamanho dos executáveis gerados pelo Lazarus, citada pelo amigo Fernando (erlantz), já existe uma dica aqui mesmo no VOL ensinando a utilizá-la:

http://www.vivaolinux.com.br/dica/Lazarus-Reduzindo-o-tamanho-dos-executaveis/

E com relação à configuração na IDE que reduz o tamanho dos executáveis, citada pelo autor do artigo na página 5, estarei publicando uma dica em breve e assim que publicá-la posso compartilhar aqui o link. Quem já precisar dela pode encontrar mais informações a respeito nesta página (em inglês):

http://wiki.lazarus.freepascal.org/Lazarus_Faq

Um abraço a todos e até a próxima.

[7] Comentário enviado por janunesdemor em 19/07/2010 - 11:29h

Excelente o seu artigo, eu utilizo o Lazarus para fazer os meus testes, e sei dos problemas que você citou, mas o diferencial do Lazarus está em ser código aberto e grátis. Eu sugiro aos demais colegas repassarem estas informações preciosas que você repassou, para os desenvolvedores do projeto para melhorar e adpatar o projeto Lazarus.

Pois, como você disse é uma ferramenta promissora.

Acho que ele não precisa ser igual ao Delphi, mas em geral precisa ser melhorado, acho ainda, que a saída é melhorar os conversores de código delphi, pois o Lazarus deve ter vida própria e não ser uma cópia do Delphi, na verdade, na minha visão é eles que tem que andar atrás do Lazarus e não o inverso.


Eu, utilizei o Windows por decadas "Windows 3.x, Windows 95, Windows 98, Windows ME, Windows XP, etc." e desde 1999 venho utilizando o Linux, gosto mais do Linux do que do Windows, embora quem usa o Linux sabe tem vezes que você é obrigado a utilizar o Windows para utilizar Alguns prerifericos... como exemplo placas wireless, para internet via Radio, uma marca que o fabricante disponibiliza drivers é a Ralink, na verdade o Site é o ralinktech.com.

Placas de Som profissional não encontrei nenhuma que utilize Linux. Precisamos fazer o que for possivel para preencher esta lacuna.

Amigo... seu artigo é simplesmente sensacional, parabéns.

[8] Comentário enviado por vinyanalista em 21/07/2010 - 10:13h

Como prometido, dica publicada:

http://www.vivaolinux.com.br/dica/Reduzindo-o-tamanho-dos-executaveis-gerados-pelo-Lazarus-(via-IDE)

Um abraço a todos e até a próxima

[9] Comentário enviado por vinyanalista em 25/08/2010 - 10:08h

Algo interessante que achei na Internet e que tem tudo a ver com esse artigo:

http://wiki.freepascal.org/Lazarus_Components

Essa página é uma comparação entre os componentes disponíveis no Turbo Delphi (da Borland) e os disponíveis no Lazarus.

[10] Comentário enviado por jepafi em 15/06/2011 - 09:12h

Foi lançado o livro Desenvolvendo Aplicativos com Lazarus em Português

O livro tem 346 páginas divididas em 14 capítulos e 5 Apêndices.

Veja imagens dos projetos desenvolvidos no Livro Desenvolvendo Aplicativos com Lazarus aqui:

http://www.jpsoft.com.br/index.php/ide-lazarus/8-noticias/59-imagens-dos-projetos-do-livro-desenvolv....

Comprar no Brasil:

http://www.agbook.com.br/book/46758--Desenvolvendo_Aplicativos_com_Lazarus

http://www.clubedeautores.com.br/book/33568--Desenvolvendo_Aplicativos_com_Lazarus

Compras Internacionais (International Shopping):

http://www.lulu.com/product/paperback/desenvolvendo-aplicativos-com-lazarus/16028947

Leia o sumário, a introdução e o primeiro capítulo aqui:

http://www.jpsoft.com.br/Desenvolvendo_Aplicativos_com_Lazarus_Amostra.pdf

[11] Comentário enviado por mmarcaro em 25/01/2012 - 09:22h

Ótimo artigo !...
Obrigado !

[12] Comentário enviado por losmorgados em 17/02/2012 - 18:54h

Muito bom esse artigo!!! Parabéns esclareceu minhas dúvidas.

A única coisa que gostaria de saber e qual banco de dados que o lazarus vem como padrão é o InterBase tbm???
Abraço.

[13] Comentário enviado por evaldoavelar em 17/02/2012 - 18:58h

Na verdade o Lazarus não vem com banco de dados. Ele traz componentes para conectar a alguns bancos, entre eles o interbase.

[14] Comentário enviado por [email protected] em 18/08/2014 - 17:43h

eu uso Lazarus desde 2004 (versão 0.9.24) e ele nunca me deixou na mão.
O fato de você saber usar o Tmenu de uma forma no Delphi e não saber como usar no Lazarus não significa que ele é ruim.
Em todoas as aplicações ele me serviu com ZEOS, etc. Podem criadas aplicações comerciais nele.Basta mais empenho dos profissionais.


Contribuir com comentário