… (WIP)

Diretrizes de Empacotamento

As Diretrizes de Empacotamento do projeto Hyperbola e o compromisso que nós, Hyperbola, fizemos com à comunidade de software livre em geral e aos nossos usuários em particular. É por isso que as nossas diretrizes de empacotamento seguirão sempre a filosofia de liberdade, privacidade, estabilidade e segurança.

  1. Liberdade: Todos os pacotes distribuidos pela Hyperbola seguem as Diretrizes para Distribuições de Sistemas Livres. Portanto, não incluimos ou recomendamos software ou documentação não-livre e não fornecemos nenhum tipo de suporte para a instalação ou execução de software não-livre. Isso inclui:
  2. Privacidade: O projeto Hyperbola tem como objetivo apoiar a privacidade de sua comunidade. Isso inclui:
    • a) Software empacotado com correções para garantir a segurança e impedir a vigilância global de dados revelada nos documentos da NSA de Snowden
    • b) Pacotes com correções adicionais que removem protocolos de nível inferior que podem causar vazamentos de privacidade, metadados/impressões digitais e vulnerabilidades.
  3. FHS: Todos os pacotes seguem o Filesystem Hierarchy Standard (FHS) que definem os principas diretorios e ficheiros em GNU/Linux ou qualquer outro sistema operativo Unix como por exemplo GNU/Hurd. Portanto, todos os pacotes deveriao ser fixados utilizando este estandarte, sem qualquer exepcoes.
  4. Projetos de software Livre: Se existir software com versao estavel disponivel , entao essa deveria ser escolhida em vez da versao currente, existem exemplos como:
    • a) O suporte de/a longo prazo (LTS) do kernel Linux-libre em vez da versao currente.
    • b) A versao de software livre Iceweasel de suporte extendido (ESR) em vez da versao currente.
    • c) A versao estavel de Nginx em vez da versao principal.
    • d) A versao permanente de LibreOffice em vez da versao mais recente.
    • e) A versao estavel de GnuPG em vez da versao mais moderna.

##??a Hyperbola é uma distribuição de Suporte a Longo Prazo, Long Term Support (LTS) em inglês??*

  1. Anti-abandonware: O projeto Hyperbola considera projetos orfaos, aqueles que se encontram sem manutencao ou sem qualquer atividade no que diz respeito ao lancamento de remendos, pois estas criam um problema de seguranca. Excepcoes sao consideradas:
    • a) Se o pacote e necessario na esfera da funcionalidade, e nao existe nenhuma alternativa.
    • b) Se o pacote for uma dependencia importante para algum projeto ativo ,e em que nao existe alternativa.
    • c) Se o pacote for um driver, firmware ou emulador de hardware nao existe nenhuma alternativa disponivel.
  2. Versoes Snapshot: Visto que o projeto Hyperbola e uma distribuicao de Suporte de Longo Prazo (LTS); todos os pacotes sao baseados !??snapshots=what??! Arch atraves das datas acima mencionadas, quer seja nas mailing lists do projecto hyperbola, ou a pagina principal e desenhadas para serem suportadas por um periodo maior do que o normal ate proxima publicacao estavel. As seguintes exepcoes sao consideradas:
    • a) Se a versao de um pacote e 1.1.0, e caso exista um !!!*bugfix*!!! 1.1.1, esta podera ser actualizada, visto que e uma revisao, e nao uma mudanca drasticacomo seria uma actualizao !!!*por completo!!!.
    • b) Se a versao de um pacote na *!!snapshot!!* e 1.1.0.a, e existe um !!bugfix!! na versao 1.1.0.b, esta podera ser actualizada, visto que e uma revisao, e nao uma mudanca drasticacomo seria uma actualizao !!!*por completo!!!.
    • c) Se a versao de um pacote pacote na *!!snapshot!!* 1.1.0-beta, e se houver uma versao final 1.1.0, esta podera ser actualizada.
    • d) Se a versao de um pacote pacote na *!!snapshot!!* 1.1.0-beta, e sem haver planos para uma versao final, se existir 2.0.0-rc, esta podera ser actualizada como uma exepcao.
    • e) Se a versao de um pacote na *!!snapshot!!* 1.1.0 depende de um projecto em abandonware (ex. OpenRC 0.25.x depende de SysVinit), e se houver uma versao 1.2.0 como alternativa, esta podera ser como versao de upgrade.(ex. SysVinit que foi substituido por openrc-init na versao 0.28.x de OpenRC)
    • f) Se a versao de um pacote na *!!snapshot!!* em suporte de longo-prazo (LTS), todos os lancamentos, mesmo as subversoes sao aceites como excepcao, como por exemplo a publicacao de ESR 52 na versao livre de Iceweasel (ex. 52.x.x).
    • g) Se a versao de um pacote necessite de substituir algumas partes relativas a seguranca, por uma versao mais recente, mas nao e pratico de fazer backport, uma nova versao poderaser considerada como excepcao (veja retificacao de Backports para mais detalhes).
  3. Publicacao de pacotes: Todos os pacotes com versao especifica no pkgrel, para os empacotadores fazerem atualizacoes aos flags de configuracao no PKGBUILD. Este e por padrao definido em 1, para cada versao, do software upstream publicada, que seja estavel, e incrementado de acordo com as actualizacoes atraves do PKGBUILD, contudo se este pacote provenir do projecto Arch ou o seu AUR, com modificacoes para o projecto Hyperbola, entao deveria ser defenido em “$archreleasenumber.hyperbola$hyperbolareleasenumber” (ex. pkgrel=1.hyperbola1). As seguintes exepcoes sao consideradas:
    • a) Se nao foi modificado nos pacote(s) oficiais do projecto Arch ou o seu AUR.
    • b) Se um pacote e proveninete de um projecto substituto livre (ex. kernel Linux-libre) ou outro projecto substituto livre nao incluido no projecto Arch ou o seu AUR.
  4. Backporting: O projecto Hyperbola utiliza o termo backporting para descrever um pacote proviniente de uma versao mais recente, ajustada e adaptada para o uso da versao currente estavel. Necessitando o rempacotamento como a versao aproprieada “backports$backportsreleasenumber” oficial do projecto for official Arch, AUR or Hyperbola packages (eg. pkgrel=1.backports1) and Arch or AUR packages modified by Hyperbola (eg. pkgrel=1.hyperbola1.backports1) until the next stable release. Backporting is accepted in Hyperbola as exception, but under the following conditions:
    • a) Se o pacote atual utilizo na versao estavel necessita de algumas modificacoes, espalhadas por ficheiros multiplos de codigo fonte, para resolver algum problema especifico (ex. problema de seguranca) e nao e pratico ou eficiente ser reparado.
    • b) Todas as novas versoes, e todas as librarias e pacotes de dependencia deverao ser rempacotados com a versao aproprada, visto que este sera recompilado num sistema estavel pra que este corra sem a estas estarem presentes. Este sufixo e aplicado ate a proxima versao estavel ser publicada.
    • c) Todas as novas versoes deverao seguir as indicacoes do Guia de empacotamento do projecto Hyperbola, utilizando a sua data de publicacao como a versao snapshot, isto significa o projecto Hyperbola nao ira aceitar mudancas drasticas de versoes recurrentes, quando reparo e possivel.
  5. Licensa Pacotes: Todos os pacotes que contem um campo especificando a licensa(s) fontes que se aplica ao pacote utilizando licences usados usualmente em /usr/share/licenses/common. significando que se o codigo fonte esta compreendido por uma licenca que esta disponivel em /usr/share/licenses/common (ex. GPLv3), simplesmente devera ser referenciado no campo da licensa do pacote (ex. license=('GPLv3')). Se nao for o caso, entao esta devera ser incluida no pacote e defenida como ('custom:LicenseName'). O ficheiro da Licenca devera ser colocados em /usr/share/licenses/$pkgname aquando compilamento do pacote. Se mais que uma licenca seja aplicavel, sigua as segintes comndicoes:
    • a) Se o cofigo fonte do projecto upstream fornece preferencia na escolha da licensa, adicione apenas essa mesma licensa no campo respectivo do pacote. Esta necessita de ser compativel com a licensa de todas as librarias ligadas a que esse pacote depende. (ex. Se a licensa escolhida, por exemplo, do pacote ffmpeg for a versao 3 de LGPL, entao o parametro de configuracao `–enable-version3` tem de ser adicionado ao PKGBUILD de ffmpeg para activar esta opcao de licensiamento, para utilizar as librarias com licensa compativel a LGPLv3).
    • b) Se o codigo fonte upstream contiver ficheiros com variadas licensa, adicione somente as mais relevantes no campo de licensa do pacote.
    • c) Todas as licensas mais relevantes escolhidas, e ficheiros compativeis do codigo fonte a upstream, deveram ser colocadas em /usr/share/licenses/$pkgname.
  6. remendos Debian: Todos os pacotes contaem, remendos de seguranca/estabilidade do projecto Debian, de forma a seguir o Contracto Soial e o programa de automacao de a aplicacao de remendos. O PKGBUILD de o pacote mdadm's, e utilizado como exemplo para todos os outros pacotes. As seguintes exepcoes sao consideradas:
    • a) Se o projecto Debian nao manteve os pacotes necessarios. Neste caso, deveriamos usar os remendos dp projecto Devuan ou Gentoo.
    • b) Se nao existirem remendos disponiveis para os pacotes necessarios.
    • c) Para os kernel(s) Linux-libre
  7. HTTPS e tarballs: Todos os pacotes precisam de ser construidos atraves de codigo fonte atraves da tarball oficial e nao atravez do sistema de controlo de versao (VCS). Portanto, todo o empacotamento deve ser proveniente das mesmastrballs atraves do seu site HTTPS. As seguintes exepcoes sao consideradas:
    • a) Se nao existir site HTTPS. Nesse caso, HTTP e a opcao alternativa.
    • b) Se nao existir site HTTP. Nesse caso, FTP e a opcao alternativa.
    • c) Se nao existir quaisquer tarball oficial. Neste caso, tarballs dos repositorios oficiais, do projecto Debian e a opcao alternativa.
    • d) Se existir uma tarball official, contudo tarballs dos repositorios oficiais, do projecto Debian however tarballs from the official Debian repositories contain bugfixes. In this case, the official tarballs from Debian should be used by default. (eg. Mutt+NeoMutt bugfixes)
    • e) Se existir uma tarball official, contudo requere o download de submodulos git, para o compilamento desde do codigo fonte. Neste caso, as tarballs oficiais dos repositories do projecto Debian e a opcao alternativa.
    • f) Se nao existir tarball disponiveis. Neste caso, este deve utilizar um tag ou branch especifico de o sistema de controlo de versao (VCS) e rempacotar com o sufixo aproprieado (ex. -bzr para Bazaar, -git para Git, -hg para Mercurial e -svn para Subversion) ate que a versao final seja publicada.
    • g) Se nao existir tarballs com suporte para GNU/Linux, tags ou branchs. Neste caso, este deve utilizar a branch principal de o sistema de controlo de versao (VCS) e rempacotar com o sufixo aproprieado (ex. -bzr para Bazaar, -git para Git, -hg para Mercurial e -svn para Subversion) ate que a versao com suporte para GNU/Linux seja publicada.
  8. SHA-512: Todos os pacotes deveram sempre e somente usar funcoes criptograficas SHA-512. Outras funcoes de hashing criptograficas como MD5 and SHA-1 nao deverao ser usadas pois estes protocolos estao seriamente comprometidos, no que diz respeito. As seguintes exepcoes sao consideradas:
    • a) Se o pacoteemquestao utiliza um sistema de controlo de versao (VCS) pois este nao suporta GNU/Linux e/ou tarballs.
  9. GPG: Todos os pacotes na Hyperbola devem usar a verificação de assinatura. As exceções são consideradas se:
    • a) Tarballs não contenham tais assinaturas.
  10. Anti-ofuscação: A ofuscação é o ato deliberado de criar código ofuscado, ou seja, código fonte que é difícil para os seres humanos entenderem. Todo código ofuscado será rejeitado na Hyperbola sem exceções.