Setup Filename Patterns

Recentemente, precisei criar um pacote de instalação do tipo executável auto-extrator com tudo embutido. Coisa que todo mundo já deve ter feito um dia. Esse pacote pode ser distribuído tanto pela Internet (download ou email), como também pode ser copiado em mídia removível (CD, DVD ou Pendrive). Há também um repositório na rede interna onde pacotes de versões históricas ficam disponíveis para testes. Aí, surgiram várias dúvidas quanto ao nome do pacote.
Fiz uma pesquisa por conta própria, analisando mais de 100 pacotes de instalação. Constatei que não existe um padrão no mercado para os nomes desses pacotes. Cada fabricante resolveu criar seu próprio formato. Nesse artigo, tento analisar esses formatos e identificar padrões para nomes de pacotes de instalação e o emprego adequado a cada situação.

Componentes do nome do pacote
Os elementos que geralmente podemos encontrar em nomes de pacotes são: Função, Fabricante, Produto, Versão e Plataforma. Precisamos definir uma ordem para esses elementos e discutir razões para sua inclusão. Muitos dos pacotes estudados iniciam com o nome do produto, seguido da função, versão e plataforma. A função e versão também podem ser encontradas no final do nome. A plataforma também ocorre, com menor freqüência, no meio.
Ex.: jre-1_5_0_15-windows-i586-p.exe, CruiseControl.NET-CCTray-1.4-Setup.exe, easyeclipse-ruby-rails-1.2.1.1.exe, BrOOo_3.1.0_Win32Intel_install_pt-BR.exe

Nomes simples, curtos, longos ou complexos
Intuitivamente, ao explorar o conteúdo de um CD/DVD de instalação, procuramos arquivos executáveis cujo nome contenha palavras chaves como Setup ou Install. Executáveis com nomes rudimentares como esses não geram dúvida quanto à sua função, especialmente quando estamos contextualizados, quando temos em mãos um CD de um fabricante conhecido e cujo produto queremos instalar. A menos que existam outros produtos e pastas no mesmo CD, nomes simples assim são bastante intuitivos. Esperamos também, que esse tipo de pacote, já que seu nome não diz mais nada, nos guie por todo o processo com uma interface interativa, deixando claros seu número de versão, fabricante e adequação ao ambiente.
Ex.: Setup.exe, Install.exe

Nomes curtos, abreviações, acrônimos e códigos são maneiras de diferenciar os pacotes indicando sua função ou algum tipo de variante. Há abreviações que são fortes e conhecidas, como: MS ou IRPF, outras podem não ser reconhecidas tão facilmente.
Ex.: bab_updt.exe, ib_install.exe, SF_523.exe, bab_ttsm.exe, GXD7-132.exe, d7_ent_upd1_1.exe

Nomes longos podem incluir o fabricante, nome, versão, plataforma e maturidade do produto a ser instalado. Não é preciso sequer executar o pacote para saber algo sobre seu objetivo. Pacotes assim são ideais para distribuição online. Devemos observar nesse caso, padrões para formação desses nomes para que olhos treinados possam identificar as informações mais rapidamente e percebam certo grau de qualidade e organização dos nossos produtos.
Ex.: FortesPATRIOInstalador1.11.48.exe, ia-codegear-express-special-edition.exe, Combined-Community-Codec-Pack-2009-09-09.exe

Muitos pacotes de instalação incluem informações abundantes nos nomes, mas que os tornam, além de longos, muito complexos. Boa parte destes pacotes é destinada a usuários avançados, como programadores e pessoal de suporte. Nesses casos, o uso de nomes complexos parece bem aceitável. Mas não podemos tomar isso como padrão para qualquer tipo de pacote e usuário.
Ex.: BrOOo_3.1.0_Win32Intel_install_pt-BR.exe, httpd-2.2.15-win32-x86-openssl-0.9.8m-r2.msi

Nome do produto e do fornecedor
Poucos pacotes incluem o nome do fornecedor/fabricante do produto. Porém, alguns produtos já são conhecidos pelo nome de seu fabricante.
Ex.: WindowsInstaller-KB893803-v2-x86.exe, FortesAGInstalador 2.149.168.exe.
A notação camelo é utilizada especialmente em pacotes para Windows. No mundo Linux e das VMs, predominam as letras minúsculas com separador underscore “_”. É raro encontrar nomes de pacotes com espaços, e isso pode criar alguns complicadores para quem usa linha de comando. Nada de insuperável, mas inconveniente.
Ex.: “InWise Softphone 1.4.510.0 Setup.exe”, UltiDevCassiniWS_SetupPrereq_VS2008.exe

Informações sobre Plataforma
Produtos multiplataforma baseados em máquina virtual ou multicompilados, indicam no nome do pacote a plataforma para a qual eles foram preparados. Mesmo que os produtos sejam multiplataforma, seus instaladores geralmente não o são, pois devem conhecer detalhes da plataforma destino a fundo. Não há necessidade de indicar a plataforma do pacote se o produto não é multiplataforma. Isso é uma característica do produto.
Os sufixos para identificação de plataforma mais utilizados são: x86, x64, win32, Win, windows, Win32Intel, i386, i486, i586 etc., e se referem à arquitetura do processador, tamanho de palavra ou versão do SO.

Componentes da Versão
Para simplificar o escopo deste documento, as versões serão restritas ao modelo de quatro elementos Minor.Major.Release.Build. Particularmente, gosto de chamar esses elementos de Comercial.Funcionalidades.Maturidade.Compilação. Seria necessário outro artigo só para discutir padrões para números de versão. Muitos pacotes incluem dois, três ou os quatros elementos da versão no nome, outros adicionam letras para indicar revisões e grau de estabilidade. Algumas distribuições utilizam datas e códigos.
Ex.: easyeclipse-ruby-rails-1.2.1.1.exe, ffdshow_beta6_rev2527_20081219.exe, FortesPATRIOInstalador1.11.48.exe

Caracteres separadores
O emprego de separadores entre os elementos do nome é muito confuso. Nesse ponto, não existe qualquer padrão entre os pacotes. Os caracteres mais utilizados são o ponto, o traço e o underscore (“.”, “-” e “_”), e às vezes também o espaço. Em alguns casos, dentro do mesmo elemento são utilizados caracteres separadores diferentes.
Ex.: FireWay_Slave_3_2.exe, KDiff3Setup_0.9.92-2.exe

Pacote único para instalador e atualizador
Os processos de instalação e atualização podem ser muito parecidos, tornando muito cômodo e tentador a união das duas funções no mesmo pacote. Porém, as dependências do instalador podem ser diferentes (maiores) comparadas às dependências do atualizador. Fazer downloads periodicamente de pacotes de atualização que incluam também dependências de instalação pode ser bastante dispendioso. Em mídia removível, isso não seria um problema. Uma solução seria fazer com que o pacote baixasse suas dependências apenas quando fosse necessário. Pacotes que reúnam as duas funções normalmente incluem a palavra Setup no nome.

Heurística do Windows Vista
A partir do Vista, o sistema da Microsoft introduziu o conceito de UAC, que impede que processos acessem regiões protegidas do SO mesmo com login de administrador. Para que um programa possa rodar com direitos de administrador, o usuário deve autorizá-lo explicitamente (elevação) através de uma tela de confirmação, caso contrário, mensagens de falha de acesso aparecerão na tela. Esse comportamento não é adequado a ferramentas de setup. Creio que, por isso, a Microsoft escreveu uma heurística para determinar se um programa precisa ou não de elevação com base no seu nome. Nomes de arquivos que incluam palavras chaves, ou que sigam determinado padrão (expressão regular) são tratados de forma especial. Por isso é importante incluir nome do pacote palavras como Setup, Install ou até Instalador, em português mesmo.

Indicador de idioma
Alguns pacotes incluem no nome um indicador de idioma do produto. Em pequenas aplicações a mudança de idioma pode ser simplesmente um chaveamento interno, e a escolha pode ser feita na tela inicial, usando ícones ou palavras escritas com caracteres originais. Já grandes aplicações, como por exemplo o Office, exigem uma compilação específica para cada língua, uma vez que a adaptação pode incluir fatores culturais ou mesmo arquiteturais, não se limitando à simples tradução direta de frases. Como no caso da plataforma, se o produto não foi feito para âmbito internacional, não é necessário informar seu idioma.
Ex.: AdbeRdr80_pt_BR.exe, BrOOo_3.1.0_Win32Intel_install_pt-BR.exe, so-6_0-beta-bin-windows-en.exe

Indicador Beta
Esse é um ponto pacífico. Pacotes para instalação de versões experimentais “alpha”, ou em de testes “beta”, devem incluir um indicativo desse estado. Versões em produção não trazem qualquer indicação especial. Número de versões iniciadas por 0.* (zero) popularmente indicam uma versão beta. Embora também existam versões beta de novos releases.
Ex.: ffdshow_beta6_rev2527_20081219.exe, GXD7-120Beta5.exe, netbeans-6.0beta2-windows.exe

Minha escolha
Meu objetivo aqui era analisar os diversos padrões existentes e discutir razões para adoção de um ou outro formato. Cada um deve analisar as suas necessidades para definir seu padrão. Para o número de versão, adotei o formato de quatro elementos separados por “.” e “-”. Ex.: 9.9.9-9. O traço é interessante pois identifica o build. Não incluí o nome do fornecedor. Utilizei o padrão camelo para o nome do produto e incluí a palavra setup. Separei o nome da versão com underscore “_”. Não houve razão para indicar plataforma ou idioma.
Formato: ProdutoFunção_Comercial.Funcionalidades.Maturidade-Compilação.exe
Ex.: EletronSetup_1.2.13-6.exe

Referências

http://en.wikipedia.org/wiki/Software_versioning

http://www.everything2.com/index.pl?node_id=1128644

http://www.guiadohardware.net/artigos/uac-windows-vista/

http://pt.wikipedia.org/wiki/Vers%C3%A3o_beta