Inicio.
Este texto é voltado para quem esta iniciando no Linux e/ou no mundo Open Source, pretende ser um guia de iniciação na programação Open Source/Linux, mais especificamente para que vem do mundo Windows® e esta se iniciando na programação no Linux ou mesmo quem esta começando a usar ferramentas Open Source no Windows® mesmo.
Se você já conhece o Linux e a filosofia Open Source este texto sera redundante para você.
Falarei um pouco da transformação por que passei após muitos anos programando em Delphi no Windows® e passar a desenvolver para Linux em Qt.
Antes de entrar nas diferenças técnicas entre a filosofia proprietária e a filosofia Open Source, vou falar um pouco sobre as diferentes visões de mundo, que quer sim quer não, acabam afetando nossa própria visão do mundo sobre conhecimento, como lidar com ele, compartilha-lo ou não?
No mundo Windows®, no mundo do software proprietário, que não é so a Microsoft, obviamente, mas todas as grandes empresas de desenvolvimento de software proprietário, fechado, a filosofia é de segredo industrial e patentes, onde as empresas competem no mercado, numa situação ideal, com seus produtos pagos competindo pela clientela, procurando superar a concorrência através da qualidade e/ou preço de seu produto.
Veremos que esta situação “ideal” de livre concorrência nem sempre acontece no mercado. Nós, programadores, somos então, “clientes” destas empresas que criam as ferramentas de programação no mundo Windows®, como compiladores, IDE's, etc.
Geralmente estas ferramentas custam muito caro, alguns fabricantes disponibilizam versões básicas e limitadas das ferramentas para uso em faculdades ou download para usuários iniciantes.
Outra característica destas ferramentas é virem num pacote completo, compilador, depurador, IDE, gerador de relatórios, drives de acesso a bancos de dados etc, tudo nos famosos “CD's” de instalação e providos por um único fabricante.
Obviamente este modelo não se restringe a ferramentas de programação, mas a todo o software criado e produzido para o mundo Windows®, onde a própria Microsoft domina amplamente o mercado, não só com o sistema operacional em si, mas como na ampla maioria dos softwares básico, como suítes de escritório, navegadores de internet, clientes de e-mail, players de musica etc.
As raras exceções ao domínio da Microsoft são o navegador Firefox, que vem crescendo mesmo entre usuários Windows®, e as próprias ferramentas de programação no Windows®, onde o Delphi teve e ainda tem algum destaque.
Esta situação de monopólio extremo descaracteriza completamente a existência de livre concorrência ou competição no mercado, e levou a ocorrência do que o pesquisador da IBM e autor e escritor de informática, Cezar Taurion,chama de comoditização do software, onde ele passa a se comportar como commodity.
Cezar Taurion - IBM,
Blog "Nas Nuvens" - Cezar Taurion
Artigo sobre comoditização do software.
Commodities são aqueles produtos geralmente básicos ou pré industrializados, como minerais ou produtos agrícolas, que tem cotação em bolsas de mercadoria e futuros, portanto seu valor é mais ou menos o mesmo no mundo inteiro, como minério de ferro, café, petróleo etc.
No caso do software, ele se torna tão básico e tão difundido, que não mais compensa ao fabricante adicionar recursos adicionais ao software e cobrar por eles, o usuário já tem o que precisa na versão atual (o exemplo mais ilustrativo são as suítes de escritório), então o fabricante, usufruindo de uma situação de monopólio, onde o mercado se vê obrigado a usar aquele produto( embora aja também um componente subjetivo, cultural, neste condicionamento, tai o OpenOffice que pode perfeitamente substituir o software dominante no mercado), o fabricante estão usa do recurso da obsolescência programada, tirando de linha a versão atual, introduzindo a nova versão com novos recursos e incompatibilizando-a com a versão anterior, podendo assim cobrar pelos novos recursos, já que a principal fonte de lucro do modelo proprietário é a venda de licenças.
Portanto, este modelo e esta situação de monopólio e comoditização, ao invés de produzirem inovação no mercado, produzem um ciclo de obsolescência programada que só introduz características redundantes ao software.
Este modelo acaba se refletindo no comportamento dos usuários, estimulando a pirataria, e a idéia de que conhecimento é algo fechado, pago e para poucos estimula o excesso de competição na sociedade, algo visível nos nossos dias, sempre a competição em detrimento da colaboração, a falsa noção de que não a o “suficiente” para todos causa até guerras, e por mais que a tecnologia avance, isto parece não se refletir na qualidade de vida das pessoas e no seu senso de felicidade.
Uma realidade corriqueira neste ambiente de trabalho, mas que muitas vezes não se restringe a empresas de desenvolvimento que usam software proprietário, podendo acontecer também no processo de desenvolvimento de sistemas mesmo em empresas que se utilizam de Software Livre, é a incidência ou encadeamento de vários fatores que causam profundo estresse , esgotamento e uma alienação em relação ao objetivo de ser feliz realizando o que se gosta, de ser um programador criativo, estes fatores são os famigerados “tudo para ontem”, ou seja, os prazos de entrega inviáveis a que muitas empresas e programadores se submetem sem questionamento algum, a indisciplina e falta de metodologia no desenvolvimento do código, na escrita do código, quando o código aumenta de tamanho e conseqüentemente aumenta sua complexidade, começam a aparecer os inevitáveis “remendos”, principalmente quando há mais de um programador envolvido.
Tudo isso foi muito bem definido e conceituado pelo Professor da Universidade de São Paulo, Valdemar W.Setzer, como MiCo (Miséria da Computação), numa série de brilhantes artigos, alias neste aspecto o Professor Setzer vai alem do que muitos expoentes do Software Livre foram em suas criticas ao establishment, demonstrando uma coragem impar de remar contra a maré da propaganda que quer nos convencer de que os computadores trarão o paraíso para a terra. Suas idéias estão condensadas neste resumo dos artigos em sua pagina pessoal:
Aqui, um pequeno trecho do texto do Professor Setzer:
...É daí que advém toda a MiCo. Por exemplo, é possível desenvolver-se um programa sem nenhuma disciplina e planejamento, simplesmente colocando-se nele instruções da linguagem de programação sem muito pensar. Obviamente, tal programa não vai funcionar. Não há problema, é só ir introduzindo nele remendos sem qualquer disciplina, testando-o consecutivamente até que passe a funcionar. Se são dois ou mais programadores, nesse momento ouve-se um grito: "não mexa mais!". Sim, pois a verdade é que ninguém sabe qual o funcionamento de praticamente qualquer programa de porte razoável ativo hoje em dia, pois quase todos os programas foram elaborados, testados e remendados sem disciplina. Assim, qualquer alteração em um deles pode faze-lo deixar de funcionar...
Porem, a favor do Software Livre nesta questão cito o conceito de “A Catedral e o Bazar”, a comparação entre dois modelos de desenvolvimento de código, sendo o modelo “bazar” amplamente utilizado pelo Software Livre e minimizando muitos dos aspectos negativos citados pelo Professor Setzer.
Ao chegar ao mundo Open Source, no caso mais especifico do Linux., você se depara com uma realidade oposta, de cooperação, colaboração em detrimento da competição, compartilhamento do conhecimento, existe uma abundancia de fóruns e listas sobre os mais variados temas referentes a Software Livre, e o desenvolvimento de sistemas e/ou programação é uma área privilegiada neste aspecto, existe uma enorme quantidade de apostilas e tutoriais que você pode baixar da internet sobre programação com Software Livre, o que já não ocorre no mundo das ferramentas proprietárias, onde é mais difícil obter apostilas e tutoriais pela internet, o que obriga o iniciante a comprar livros ou pagar por cursos, o que de forma alguma é desaconselhável, apenas ressalto que muitas vezes um primeiro contato com o assunto é necessário de uma forma menos onerosa, a possibilidade de textos livres sobre o assunto antes de você prosseguir e se aprofundar é fundamental antes de se gastar dinheiro comprando livros ou pagando cursos, depois sim, você pode até pagar por uma certificação que tenha valor no mercado.
O espirito de colaboração se reflete nas listas e fóruns de programação das linguagens e ferramentas Open Source, suavizando e diminuindo a curva de aprendizado do iniciante, e mesmo dos profissionais mais experientes, já que muitas vezes as lista e fóruns são o lugar onde se tiram duvidas e se resolvem problemas mais complexos das ferramentas que por serem Open Source não tem “suporte” de fabricante, o suporte é a própria comunidade de usuários que orbita em torno do software.
Aqui mesmo no site eu listo varias lista e fóruns de C++, Qt, PHP e Javascript.
Este aspecto de colaboração dificilmente é visto no mundo do software proprietário, sendo comum a necessidade de se pagar por suporte técnico.
O primeiro passo para você, programador que esta vindo do mundo do software proprietário, é escolher uma distribuição Linux e se familiarizar com ela, todas as distribuições tem listas e fóruns específicos para aquela distribuição, alem de existirem listas genéricas sobre Linux em geral:
Eu pessoalmente uso o Debian, que é uma distribuição que tem como foco a estabilidade, por isso mesmo ela é conservadora no quesito “novas versões” de software, ela espera que qualquer software esteja estável para ser incluído na distribuição, por isso versões beta e de teste não entram, o que faz com que o Debian geralmente tenha versões mais antigas dos softwares em relação a outras distribuições. Mas isto é largamente compensado com a abundancia de software disponível no Debian, mais de oito mil (8.000) pacotes de software, ferramentas de programação e desenvolvimento são o forte destes pacotes. De qualquer forma, não quero influenciar na sua escolha, com qualquer distribuição você terá todos os softwares necessários para começar a programar.
Depois de escolher e se familiarizar com a maneira de trabalhar da sua distribuição, você deve pensar na escolha da linguagem de programação, é claro que se você chegou até a minha pagina, é porque você tem algum interesse em C++ e Qt e acesso a bancos de dados, ou desenvolvimento Web, que é do que trata esta pagina , é possivel desenvolver aplicativos no Linux que acessam bancos de dados com Lazarus/Free Pascal, com GTK+/GNOME-DB ou também Java ou Websites em PHP/HTML/Javascript.
O que determinou essencialmente a minha escolha foi que no tempo em que eu ainda programava em Delphi/Windows® e comecei a me interessar por Linux, eu comprava a antiga “Revista do Linux” ,editada pela Conectiva, e na revista saiu uma série de artigos sobre programação em Qt, inclusive acessando bancos de dados, outro fator determinante na minha escolha por Qt foi a vontade de aprender C++ e ampliar o horizonte de meus conhecimentos, algo que o Lazarus, por exemplo, por melhor que seja, não proporciona a um programador Delphi, porque ele é um clone do Delphi, claro que isto facilita, e muito, a curva de aprendizado de um programador Delphi que queira desenvolver para Linux, mas no meu caso aprender C++ pesou mais na balança, e no caso de Java, aprendendo C++ você diminui a curva de aprendizado para aprender Java depois, isto aconteceu no meu caso não com Java, mas com PHP, que tem, assim como Java, uma sintaxe muito próxima a C++.
Veremos agora as principais diferenças nas filosofias das ferramentas Open Source de desenvolvimento em relação as ferramentas proprietárias.
A diferença mais significativa, que você vai notar logo de inicio, é a modularizarão das ferramentas Open Source, onde o compilador é separado da IDE, que é separada da ferramenta de depuração ou debug e assim por diante, tendo inclusive, na maioria das vezes, desenvolvedores independentes.
Esta filosofia reflete o próprio desenvolvimento do Linux, onde o desenvolvimento do Kernel é coordenado por Linus Torvalds, os desenvolvedores do Kernel só se ocupam do Kernel, não sabem do desenvolvimento de outras partes do sistema, como interfaces gráficas, por exemplo, que são desenvolvidas por outro grupo.
É claro que eventualmente algum desenvolvedor do Kernel, por exemplo, pode participar de outros projetos de Software Livre.
Mesmo entre o Kernel e as interfaces gráficas existe ainda o servidor gráfico, ou servidor X, que é desenvolvido por outro grupo, sem esquecer a linha de comando, o Bash, que nos permite, junto com as interfaces gráficas, “usar” o sistema.
Portanto, um “sistema Linux” não é monolítico como o Windows®, sendo composto de módulos separados, desenvolvidos de forma e por grupos independentes entre si, é claro que o Kernel determina grande parte do que o resto pode ou não fazer.
Então, é comum por exemplo dois computadores com Linus com KDE terem a mesma versão do Kernel mas versões diferentes do KDE ou do Gnome, por exemplo.
Estes módulos ficam disponíveis na internet para as distribuições, que juntam as partes conforme a proposta da distribuição e suas conveniências, o Kernel, por exemplo, esta disponível em código fonte no site Kernel.org , a distribuição pega então a versão do Kernel que lhe convém e compila este código fonte, gerando assim o Kernel que pode ser instalado e usado pelo seu computador, depois a distribuição vai juntando os demais componentes, como o servidor X, que pode ser da X.Org, uma ou mais interfaces gráficas, sendo as mais conhecidas o KDE e o Gnome, a linha de comando ou console, sendo o mais usado o Bash e depois uma infinidade de outros softwares que estão disponíveis.
Normalmente a distribuição disponibiliza em seu site uma imagem ISO para baixar e gravar um CD, esta imagem contem o Kernel, o Bash e o KDE ou Gnome, ela é capas de iniciar o computador e instalar a distribuição com este conjunto minimo de softwares, o suficiente para você, uma vez instalada a distribuição, acessar a internet e ter acesso aos demais softwares oferecidos pela distribuição.
Normalmente todas as distribuições tem um repositório ou espelho(mirror) onde esta o conjunto de softwares disponíveis para aquela distribuição, aqueles que a própria distribuição organizou para seus usuários, então, uma vez instalada a distribuição, é possível atualiza-la constantemente pela internet e adicionar novos softwares a seu computador.
Todas as distribuições possuem mecanismos de atualização automática dos softwares instalados, inclusive o Kernel, mas você pode instalar um software que esteja no repositório da sua distribuição ou não, indo até o site do desenvolvedor, o software pode estar pronto para ser instalado, ou seja, já compilado, ou disponível em formato de arquivos fontes, necessitando ser compilado.
Então, as ferramentas de desenvolvimento e programação seguem todas esta mesma filosofia,mas você não precisa se preocupar, todas as distribuições tem uma enorme variedade de compiladores e IDE's, prontas para instalar.
Para C e C++, o compilador padrão da distribuições Linux é o GCC e o G++, que costumam ser instalados por padrão na maioria das distribuições, o G++ é parte do GCC, necessário para compilar C++.
Verifique se sua distribuição instalou o GCC/G++ e também suas dependências.
O Debian utiliza o sistema APT (Advanced Packaging Tool, em português Ferramenta de Empacotamento Avançada) para instalar pacotes, ele pode ser usado por linha de comando, mas o Debian tem uma excelente ferramenta de interface gráfica para o APT, um software chamado Synaptic, que lhe permite pesquisar se um determinado software esta instalado ou não, e instala-lo.
O Synaptic fornece um recurso interessante, que são os pacotes “recomendados” e os “sugeridos” para serem instalados junto com o pacote principal.
Um engano comum é instalar uma IDE, Kdevelop, por exemplo, antes de instalar o compilador, e ao tentar compilar seu programa obviamente nada acontece, certifique-se então de que o compilador e os utilitários GNU estejam instalados:
GCC/G++
Make
GNU build system conhecido também como Autotools:
Autoconf
Automake
Libtool
Gnulib
Debug ou depuração:
gdb
kdbg
Estes pacotes estão presentes em todas as distribuições.
Inclusive, se você vai desenvolver em Qt e optar por baixar somente o Framework ao invés da opção SDK, você terá de compilar a biblioteca, então já terá de ter o compilador instalado.
Faço aqui um parenteses sobre a Free Software Foundation, organização criada por Richard Matthew Stallman, sem a qual não teriamos estes softwares nem a liberdade de usalos.
Abaixo, a definição obtida na Wikipédia:
A Free Software Foundation (FSF, Fundação para o Software Livre) é uma organização sem fins lucrativos, fundada em 1985 por Richard Stallman e que se dedica à eliminação de restrições sobre a cópia, redistribuição, estudo e modificação de programas de computadores – bandeiras do movimento do software livre, em essência.
Faz isso promovendo o desenvolvimento e o uso de software livre em todas as áreas da computação mas, particularmente, ajudando a desenvolver o sistema operacional GNU e suas ferramentas.
Até meados da década de 1990 a fundação dedicava-se mais à escrita do software. Como hoje existem muitos projetos independentes de software livre, a FSF dedica-se mais aos aspectos legais e estruturais da comunidade do software livre.
Entre suas atribuições atuais, encarrega-se de aperfeiçoar licenças de software e de documentação (como a GNU General Public License, GPL ou a GNU Free Documentation License, GFDL), de desenvolver um aparato legal acerca dos direitos autorais dos programas criados sob essas licenças, de catalogar e disponibilizar um serviço com os softwares livres desenvolvidos (o Free Software Directory), e de discutir e aperfeiçoar a própria definição de software livre.
Associado a Free Software Foundation está o projeto GNU que é o responsavel por criar o GCC e os demais utilitários.
Uma das teste de Richard Stallman, exaustivamente discutida, é o perigo que as patentes representam para a sociedade. Clique aqui para ir à pagina pessoal de Richard Stallman.
Observe que instalado o GCC/G++ e os utilitários, você já pode começar a desenvolver em C ou C++ para linha de comando, a STL já esta disponível também.
Mesmo que você opte por usar o Lazarus/Free Pascal ou Java, você deve seguir o procedimento acima, pois muitos softwares dependem disto para serem instalados.
Para desenvolvimento Web, comece instalando o PHP e o Apache e um navegador, Firefox, por exemplo, que interprete Javascript.
Daqui para frente, vou partir do principio de que você optou por desenvolver em Qt ou desenvolvimento Web com PHP, que é o objetivo desta pagina, as demais linguagens de programação você deve procurar ajuda especifica:
Voltando ao aspecto modularizando das ferramentas, você já percebeu então que a modularizarão é vantajosa por nos dar flexibilidade e mais opções de escolha de IDE's, mas exige mais atenção no quesito dependências.
Comparando com as ferramentas monolíticas do mundo Windows®, que fornecem tudo, compilador, IDE, depurador, make, mas justamente por serem monolítica escondem do programador o que se passa nos bastidores, raramente você sabe como os arquivos fontes são compilados e linkados, por exemplo, muitas vezes os arquivos que cuidam disso estão em formato binario, impedindo sua analise e compreensão.
Outro aspecto é que no mundo proprietário não interessa compatibilidade entre softwares de fabricantes diferentes, muitas vezes o compilador de um fabricante inclui bibliotecas especificas ao fonte , o que impede que ele seja compilado por um compilador de outro fabricante, desenvolver em C++ Buider®, por exemplo, e tentar compilar no Visual C++® é impossível.
Então, com a nossa base de compiladores e utilitários instalados, você pode fazer o download da Qt no site da Qt-Nokia®.
Quando eu comecei a desenvolver em Qt, só estava disponível a versão Framework, ou seja, os fontes da biblioteca para serem compilados, e não havia ainda a IDE Qt Creator, então eu baixava os fontes, compilava e usava como IDE o Kdevelop, hoje esta disponível também a versão SDK, pronta para uso e com o Qt Creator como IDE, eu continuo fiel a primeira opção, mas esteja a vontade para escolher.
No caso de resolver compilar a biblioteca, é só descompactar num diretório de sua preferencia, ele ira criar um sub diretório com o nome da biblioteca, por exemplo, qt-x11-opensource-src-4.5.3, dentro deste diretório você acha um arquivo texto chamado install, com as instruções de compilação, normalmente é só a seqüencia :
./configure
make
make install
Veja aqui algumas dicas:Compilar a Qt no Debian lenny.
Após a compilação, adicione a variavel de ambiente PATH o caminho onde estão os binarios da Qt, normalmente em /usr/local/Trolltech/Qt-4.5.3/bin, observe que a versão da biblioteca pode ser outra, não necessariamente a 4.5.3, hoje já esta na 4.6, então ficaria /usr/local/Trolltech/Qt-4.6.0/bin, crie também a variavel de ambiente QTDIR, no Debian eu costumo alterar os arquivos:
/etc/profile
/root/.bashrc
/home/seunome/.bashrc
Então, faça nos três arquivos:
Não copie literalmente o PATH do exemplo, adicione ao PATH do seu computador o caminho da Qt, respeitando o que já estava lá, se não você corre o risco de paralisar o funcionamento do seu sistema.
A partir de agora, se tudo estiver certo, é só escolher uma IDE e começar a trabalhar, geralmente as IDE's exigem alguma pequena configuração, geralmente é só informar o caminho do QMAKE, o resto são configurações de preferencias pessoais.
IDE's:
Kdevelop
Qt Creator
Code::Blocks com plugin Qt
NetBeans com plugin C++/Qt
Eclipse com plugin Qt
Monkey Studio
QDevelop
Para desenvolvimento Web:
Quanta Plus
Bluefish Editor
Para este ultimo, o Bluefish, instale também o pacote SciTE para realce de sintaxe em PHP.
Tudo que foi dito aqui serve não só para Linux, mas também para Open Sorce no Windows®, o Software Livre disponivel para Windows® segue os mesmos principios do Software Livre no Linux, o mesmo principio de modularizarão esta presente, veja meus tutoriais de Open Source no Windows®:
Tutorial: Compilando a Qt no Windows®
Enriquecendo o ambiente de programação no Windows® com software Open Source
Se você já conhece o Linux e a filosofia Open Source este texto sera redundante para você.
Falarei um pouco da transformação por que passei após muitos anos programando em Delphi no Windows® e passar a desenvolver para Linux em Qt.
Antes de entrar nas diferenças técnicas entre a filosofia proprietária e a filosofia Open Source, vou falar um pouco sobre as diferentes visões de mundo, que quer sim quer não, acabam afetando nossa própria visão do mundo sobre conhecimento, como lidar com ele, compartilha-lo ou não?
No mundo Windows®, no mundo do software proprietário, que não é so a Microsoft, obviamente, mas todas as grandes empresas de desenvolvimento de software proprietário, fechado, a filosofia é de segredo industrial e patentes, onde as empresas competem no mercado, numa situação ideal, com seus produtos pagos competindo pela clientela, procurando superar a concorrência através da qualidade e/ou preço de seu produto.
Veremos que esta situação “ideal” de livre concorrência nem sempre acontece no mercado. Nós, programadores, somos então, “clientes” destas empresas que criam as ferramentas de programação no mundo Windows®, como compiladores, IDE's, etc.
Geralmente estas ferramentas custam muito caro, alguns fabricantes disponibilizam versões básicas e limitadas das ferramentas para uso em faculdades ou download para usuários iniciantes.
Outra característica destas ferramentas é virem num pacote completo, compilador, depurador, IDE, gerador de relatórios, drives de acesso a bancos de dados etc, tudo nos famosos “CD's” de instalação e providos por um único fabricante.
Obviamente este modelo não se restringe a ferramentas de programação, mas a todo o software criado e produzido para o mundo Windows®, onde a própria Microsoft domina amplamente o mercado, não só com o sistema operacional em si, mas como na ampla maioria dos softwares básico, como suítes de escritório, navegadores de internet, clientes de e-mail, players de musica etc.
As raras exceções ao domínio da Microsoft são o navegador Firefox, que vem crescendo mesmo entre usuários Windows®, e as próprias ferramentas de programação no Windows®, onde o Delphi teve e ainda tem algum destaque.
Esta situação de monopólio extremo descaracteriza completamente a existência de livre concorrência ou competição no mercado, e levou a ocorrência do que o pesquisador da IBM e autor e escritor de informática, Cezar Taurion,chama de comoditização do software, onde ele passa a se comportar como commodity.
Cezar Taurion - IBM,
Blog "Nas Nuvens" - Cezar Taurion
Artigo sobre comoditização do software.
Commodities são aqueles produtos geralmente básicos ou pré industrializados, como minerais ou produtos agrícolas, que tem cotação em bolsas de mercadoria e futuros, portanto seu valor é mais ou menos o mesmo no mundo inteiro, como minério de ferro, café, petróleo etc.
No caso do software, ele se torna tão básico e tão difundido, que não mais compensa ao fabricante adicionar recursos adicionais ao software e cobrar por eles, o usuário já tem o que precisa na versão atual (o exemplo mais ilustrativo são as suítes de escritório), então o fabricante, usufruindo de uma situação de monopólio, onde o mercado se vê obrigado a usar aquele produto( embora aja também um componente subjetivo, cultural, neste condicionamento, tai o OpenOffice que pode perfeitamente substituir o software dominante no mercado), o fabricante estão usa do recurso da obsolescência programada, tirando de linha a versão atual, introduzindo a nova versão com novos recursos e incompatibilizando-a com a versão anterior, podendo assim cobrar pelos novos recursos, já que a principal fonte de lucro do modelo proprietário é a venda de licenças.
Portanto, este modelo e esta situação de monopólio e comoditização, ao invés de produzirem inovação no mercado, produzem um ciclo de obsolescência programada que só introduz características redundantes ao software.
Este modelo acaba se refletindo no comportamento dos usuários, estimulando a pirataria, e a idéia de que conhecimento é algo fechado, pago e para poucos estimula o excesso de competição na sociedade, algo visível nos nossos dias, sempre a competição em detrimento da colaboração, a falsa noção de que não a o “suficiente” para todos causa até guerras, e por mais que a tecnologia avance, isto parece não se refletir na qualidade de vida das pessoas e no seu senso de felicidade.
Uma realidade corriqueira neste ambiente de trabalho, mas que muitas vezes não se restringe a empresas de desenvolvimento que usam software proprietário, podendo acontecer também no processo de desenvolvimento de sistemas mesmo em empresas que se utilizam de Software Livre, é a incidência ou encadeamento de vários fatores que causam profundo estresse , esgotamento e uma alienação em relação ao objetivo de ser feliz realizando o que se gosta, de ser um programador criativo, estes fatores são os famigerados “tudo para ontem”, ou seja, os prazos de entrega inviáveis a que muitas empresas e programadores se submetem sem questionamento algum, a indisciplina e falta de metodologia no desenvolvimento do código, na escrita do código, quando o código aumenta de tamanho e conseqüentemente aumenta sua complexidade, começam a aparecer os inevitáveis “remendos”, principalmente quando há mais de um programador envolvido.
Tudo isso foi muito bem definido e conceituado pelo Professor da Universidade de São Paulo, Valdemar W.Setzer, como MiCo (Miséria da Computação), numa série de brilhantes artigos, alias neste aspecto o Professor Setzer vai alem do que muitos expoentes do Software Livre foram em suas criticas ao establishment, demonstrando uma coragem impar de remar contra a maré da propaganda que quer nos convencer de que os computadores trarão o paraíso para a terra. Suas idéias estão condensadas neste resumo dos artigos em sua pagina pessoal:
Aqui, um pequeno trecho do texto do Professor Setzer:
...É daí que advém toda a MiCo. Por exemplo, é possível desenvolver-se um programa sem nenhuma disciplina e planejamento, simplesmente colocando-se nele instruções da linguagem de programação sem muito pensar. Obviamente, tal programa não vai funcionar. Não há problema, é só ir introduzindo nele remendos sem qualquer disciplina, testando-o consecutivamente até que passe a funcionar. Se são dois ou mais programadores, nesse momento ouve-se um grito: "não mexa mais!". Sim, pois a verdade é que ninguém sabe qual o funcionamento de praticamente qualquer programa de porte razoável ativo hoje em dia, pois quase todos os programas foram elaborados, testados e remendados sem disciplina. Assim, qualquer alteração em um deles pode faze-lo deixar de funcionar...
Porem, a favor do Software Livre nesta questão cito o conceito de “A Catedral e o Bazar”, a comparação entre dois modelos de desenvolvimento de código, sendo o modelo “bazar” amplamente utilizado pelo Software Livre e minimizando muitos dos aspectos negativos citados pelo Professor Setzer.
Ao chegar ao mundo Open Source, no caso mais especifico do Linux., você se depara com uma realidade oposta, de cooperação, colaboração em detrimento da competição, compartilhamento do conhecimento, existe uma abundancia de fóruns e listas sobre os mais variados temas referentes a Software Livre, e o desenvolvimento de sistemas e/ou programação é uma área privilegiada neste aspecto, existe uma enorme quantidade de apostilas e tutoriais que você pode baixar da internet sobre programação com Software Livre, o que já não ocorre no mundo das ferramentas proprietárias, onde é mais difícil obter apostilas e tutoriais pela internet, o que obriga o iniciante a comprar livros ou pagar por cursos, o que de forma alguma é desaconselhável, apenas ressalto que muitas vezes um primeiro contato com o assunto é necessário de uma forma menos onerosa, a possibilidade de textos livres sobre o assunto antes de você prosseguir e se aprofundar é fundamental antes de se gastar dinheiro comprando livros ou pagando cursos, depois sim, você pode até pagar por uma certificação que tenha valor no mercado.
O espirito de colaboração se reflete nas listas e fóruns de programação das linguagens e ferramentas Open Source, suavizando e diminuindo a curva de aprendizado do iniciante, e mesmo dos profissionais mais experientes, já que muitas vezes as lista e fóruns são o lugar onde se tiram duvidas e se resolvem problemas mais complexos das ferramentas que por serem Open Source não tem “suporte” de fabricante, o suporte é a própria comunidade de usuários que orbita em torno do software.
Aqui mesmo no site eu listo varias lista e fóruns de C++, Qt, PHP e Javascript.
Este aspecto de colaboração dificilmente é visto no mundo do software proprietário, sendo comum a necessidade de se pagar por suporte técnico.
O primeiro passo para você, programador que esta vindo do mundo do software proprietário, é escolher uma distribuição Linux e se familiarizar com ela, todas as distribuições tem listas e fóruns específicos para aquela distribuição, alem de existirem listas genéricas sobre Linux em geral:
| Distribuiçao | Ajuda |
| Debian | Forum Debian |
| Mandriva | Forum Mandriva |
| Ubuntu | Forum Ubuntu |
| Kubuntu | Forum Kubuntu |
| Fedora | Forum Fedora |
| Open Suse | Forum Open Suse |
| Slackware | Forum SlackBR |
| Linux em geral | Linux-BR |
Eu pessoalmente uso o Debian, que é uma distribuição que tem como foco a estabilidade, por isso mesmo ela é conservadora no quesito “novas versões” de software, ela espera que qualquer software esteja estável para ser incluído na distribuição, por isso versões beta e de teste não entram, o que faz com que o Debian geralmente tenha versões mais antigas dos softwares em relação a outras distribuições. Mas isto é largamente compensado com a abundancia de software disponível no Debian, mais de oito mil (8.000) pacotes de software, ferramentas de programação e desenvolvimento são o forte destes pacotes. De qualquer forma, não quero influenciar na sua escolha, com qualquer distribuição você terá todos os softwares necessários para começar a programar.
Depois de escolher e se familiarizar com a maneira de trabalhar da sua distribuição, você deve pensar na escolha da linguagem de programação, é claro que se você chegou até a minha pagina, é porque você tem algum interesse em C++ e Qt e acesso a bancos de dados, ou desenvolvimento Web, que é do que trata esta pagina , é possivel desenvolver aplicativos no Linux que acessam bancos de dados com Lazarus/Free Pascal, com GTK+/GNOME-DB ou também Java ou Websites em PHP/HTML/Javascript.
O que determinou essencialmente a minha escolha foi que no tempo em que eu ainda programava em Delphi/Windows® e comecei a me interessar por Linux, eu comprava a antiga “Revista do Linux” ,editada pela Conectiva, e na revista saiu uma série de artigos sobre programação em Qt, inclusive acessando bancos de dados, outro fator determinante na minha escolha por Qt foi a vontade de aprender C++ e ampliar o horizonte de meus conhecimentos, algo que o Lazarus, por exemplo, por melhor que seja, não proporciona a um programador Delphi, porque ele é um clone do Delphi, claro que isto facilita, e muito, a curva de aprendizado de um programador Delphi que queira desenvolver para Linux, mas no meu caso aprender C++ pesou mais na balança, e no caso de Java, aprendendo C++ você diminui a curva de aprendizado para aprender Java depois, isto aconteceu no meu caso não com Java, mas com PHP, que tem, assim como Java, uma sintaxe muito próxima a C++.
Veremos agora as principais diferenças nas filosofias das ferramentas Open Source de desenvolvimento em relação as ferramentas proprietárias.
A diferença mais significativa, que você vai notar logo de inicio, é a modularizarão das ferramentas Open Source, onde o compilador é separado da IDE, que é separada da ferramenta de depuração ou debug e assim por diante, tendo inclusive, na maioria das vezes, desenvolvedores independentes.
Esta filosofia reflete o próprio desenvolvimento do Linux, onde o desenvolvimento do Kernel é coordenado por Linus Torvalds, os desenvolvedores do Kernel só se ocupam do Kernel, não sabem do desenvolvimento de outras partes do sistema, como interfaces gráficas, por exemplo, que são desenvolvidas por outro grupo.
É claro que eventualmente algum desenvolvedor do Kernel, por exemplo, pode participar de outros projetos de Software Livre.
Mesmo entre o Kernel e as interfaces gráficas existe ainda o servidor gráfico, ou servidor X, que é desenvolvido por outro grupo, sem esquecer a linha de comando, o Bash, que nos permite, junto com as interfaces gráficas, “usar” o sistema.
Portanto, um “sistema Linux” não é monolítico como o Windows®, sendo composto de módulos separados, desenvolvidos de forma e por grupos independentes entre si, é claro que o Kernel determina grande parte do que o resto pode ou não fazer.
Então, é comum por exemplo dois computadores com Linus com KDE terem a mesma versão do Kernel mas versões diferentes do KDE ou do Gnome, por exemplo.
Estes módulos ficam disponíveis na internet para as distribuições, que juntam as partes conforme a proposta da distribuição e suas conveniências, o Kernel, por exemplo, esta disponível em código fonte no site Kernel.org , a distribuição pega então a versão do Kernel que lhe convém e compila este código fonte, gerando assim o Kernel que pode ser instalado e usado pelo seu computador, depois a distribuição vai juntando os demais componentes, como o servidor X, que pode ser da X.Org, uma ou mais interfaces gráficas, sendo as mais conhecidas o KDE e o Gnome, a linha de comando ou console, sendo o mais usado o Bash e depois uma infinidade de outros softwares que estão disponíveis.
Normalmente a distribuição disponibiliza em seu site uma imagem ISO para baixar e gravar um CD, esta imagem contem o Kernel, o Bash e o KDE ou Gnome, ela é capas de iniciar o computador e instalar a distribuição com este conjunto minimo de softwares, o suficiente para você, uma vez instalada a distribuição, acessar a internet e ter acesso aos demais softwares oferecidos pela distribuição.
Normalmente todas as distribuições tem um repositório ou espelho(mirror) onde esta o conjunto de softwares disponíveis para aquela distribuição, aqueles que a própria distribuição organizou para seus usuários, então, uma vez instalada a distribuição, é possível atualiza-la constantemente pela internet e adicionar novos softwares a seu computador.
Todas as distribuições possuem mecanismos de atualização automática dos softwares instalados, inclusive o Kernel, mas você pode instalar um software que esteja no repositório da sua distribuição ou não, indo até o site do desenvolvedor, o software pode estar pronto para ser instalado, ou seja, já compilado, ou disponível em formato de arquivos fontes, necessitando ser compilado.
Então, as ferramentas de desenvolvimento e programação seguem todas esta mesma filosofia,mas você não precisa se preocupar, todas as distribuições tem uma enorme variedade de compiladores e IDE's, prontas para instalar.
Para C e C++, o compilador padrão da distribuições Linux é o GCC e o G++, que costumam ser instalados por padrão na maioria das distribuições, o G++ é parte do GCC, necessário para compilar C++.
Verifique se sua distribuição instalou o GCC/G++ e também suas dependências.
O Debian utiliza o sistema APT (Advanced Packaging Tool, em português Ferramenta de Empacotamento Avançada) para instalar pacotes, ele pode ser usado por linha de comando, mas o Debian tem uma excelente ferramenta de interface gráfica para o APT, um software chamado Synaptic, que lhe permite pesquisar se um determinado software esta instalado ou não, e instala-lo.
O Synaptic fornece um recurso interessante, que são os pacotes “recomendados” e os “sugeridos” para serem instalados junto com o pacote principal.
Um engano comum é instalar uma IDE, Kdevelop, por exemplo, antes de instalar o compilador, e ao tentar compilar seu programa obviamente nada acontece, certifique-se então de que o compilador e os utilitários GNU estejam instalados:
GCC/G++
Make
GNU build system conhecido também como Autotools:
Autoconf
Automake
Libtool
Gnulib
Debug ou depuração:
gdb
kdbg
Estes pacotes estão presentes em todas as distribuições.
Inclusive, se você vai desenvolver em Qt e optar por baixar somente o Framework ao invés da opção SDK, você terá de compilar a biblioteca, então já terá de ter o compilador instalado.
Faço aqui um parenteses sobre a Free Software Foundation, organização criada por Richard Matthew Stallman, sem a qual não teriamos estes softwares nem a liberdade de usalos.
Abaixo, a definição obtida na Wikipédia:
A Free Software Foundation (FSF, Fundação para o Software Livre) é uma organização sem fins lucrativos, fundada em 1985 por Richard Stallman e que se dedica à eliminação de restrições sobre a cópia, redistribuição, estudo e modificação de programas de computadores – bandeiras do movimento do software livre, em essência.
Faz isso promovendo o desenvolvimento e o uso de software livre em todas as áreas da computação mas, particularmente, ajudando a desenvolver o sistema operacional GNU e suas ferramentas.
Até meados da década de 1990 a fundação dedicava-se mais à escrita do software. Como hoje existem muitos projetos independentes de software livre, a FSF dedica-se mais aos aspectos legais e estruturais da comunidade do software livre.
Entre suas atribuições atuais, encarrega-se de aperfeiçoar licenças de software e de documentação (como a GNU General Public License, GPL ou a GNU Free Documentation License, GFDL), de desenvolver um aparato legal acerca dos direitos autorais dos programas criados sob essas licenças, de catalogar e disponibilizar um serviço com os softwares livres desenvolvidos (o Free Software Directory), e de discutir e aperfeiçoar a própria definição de software livre.
Associado a Free Software Foundation está o projeto GNU que é o responsavel por criar o GCC e os demais utilitários.
Uma das teste de Richard Stallman, exaustivamente discutida, é o perigo que as patentes representam para a sociedade. Clique aqui para ir à pagina pessoal de Richard Stallman.
Observe que instalado o GCC/G++ e os utilitários, você já pode começar a desenvolver em C ou C++ para linha de comando, a STL já esta disponível também.
Mesmo que você opte por usar o Lazarus/Free Pascal ou Java, você deve seguir o procedimento acima, pois muitos softwares dependem disto para serem instalados.
Para desenvolvimento Web, comece instalando o PHP e o Apache e um navegador, Firefox, por exemplo, que interprete Javascript.
Daqui para frente, vou partir do principio de que você optou por desenvolver em Qt ou desenvolvimento Web com PHP, que é o objetivo desta pagina, as demais linguagens de programação você deve procurar ajuda especifica:
Voltando ao aspecto modularizando das ferramentas, você já percebeu então que a modularizarão é vantajosa por nos dar flexibilidade e mais opções de escolha de IDE's, mas exige mais atenção no quesito dependências.
Comparando com as ferramentas monolíticas do mundo Windows®, que fornecem tudo, compilador, IDE, depurador, make, mas justamente por serem monolítica escondem do programador o que se passa nos bastidores, raramente você sabe como os arquivos fontes são compilados e linkados, por exemplo, muitas vezes os arquivos que cuidam disso estão em formato binario, impedindo sua analise e compreensão.
Outro aspecto é que no mundo proprietário não interessa compatibilidade entre softwares de fabricantes diferentes, muitas vezes o compilador de um fabricante inclui bibliotecas especificas ao fonte , o que impede que ele seja compilado por um compilador de outro fabricante, desenvolver em C++ Buider®, por exemplo, e tentar compilar no Visual C++® é impossível.
Então, com a nossa base de compiladores e utilitários instalados, você pode fazer o download da Qt no site da Qt-Nokia®.
Quando eu comecei a desenvolver em Qt, só estava disponível a versão Framework, ou seja, os fontes da biblioteca para serem compilados, e não havia ainda a IDE Qt Creator, então eu baixava os fontes, compilava e usava como IDE o Kdevelop, hoje esta disponível também a versão SDK, pronta para uso e com o Qt Creator como IDE, eu continuo fiel a primeira opção, mas esteja a vontade para escolher.
No caso de resolver compilar a biblioteca, é só descompactar num diretório de sua preferencia, ele ira criar um sub diretório com o nome da biblioteca, por exemplo, qt-x11-opensource-src-4.5.3, dentro deste diretório você acha um arquivo texto chamado install, com as instruções de compilação, normalmente é só a seqüencia :
./configure
make
make install
Veja aqui algumas dicas:Compilar a Qt no Debian lenny.
Após a compilação, adicione a variavel de ambiente PATH o caminho onde estão os binarios da Qt, normalmente em /usr/local/Trolltech/Qt-4.5.3/bin, observe que a versão da biblioteca pode ser outra, não necessariamente a 4.5.3, hoje já esta na 4.6, então ficaria /usr/local/Trolltech/Qt-4.6.0/bin, crie também a variavel de ambiente QTDIR, no Debian eu costumo alterar os arquivos:
/etc/profile
/root/.bashrc
/home/seunome/.bashrc
Então, faça nos três arquivos:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/Trolltech/Qt-4.5.3/bin:/usr/local/lib:/usr/games/:/usr/lib" export PATH QTDIR="/usr/local/Trolltech/Qt-4.5.3" export QTDIR
Não copie literalmente o PATH do exemplo, adicione ao PATH do seu computador o caminho da Qt, respeitando o que já estava lá, se não você corre o risco de paralisar o funcionamento do seu sistema.
A partir de agora, se tudo estiver certo, é só escolher uma IDE e começar a trabalhar, geralmente as IDE's exigem alguma pequena configuração, geralmente é só informar o caminho do QMAKE, o resto são configurações de preferencias pessoais.
IDE's:
Kdevelop
Qt Creator
Code::Blocks com plugin Qt
NetBeans com plugin C++/Qt
Eclipse com plugin Qt
Monkey Studio
QDevelop
Para desenvolvimento Web:
Quanta Plus
Bluefish Editor
Para este ultimo, o Bluefish, instale também o pacote SciTE para realce de sintaxe em PHP.
Tudo que foi dito aqui serve não só para Linux, mas também para Open Sorce no Windows®, o Software Livre disponivel para Windows® segue os mesmos principios do Software Livre no Linux, o mesmo principio de modularizarão esta presente, veja meus tutoriais de Open Source no Windows®:
Tutorial: Compilando a Qt no Windows®
Enriquecendo o ambiente de programação no Windows® com software Open Source