Recupere sua liberdade, com Linux-2.6.33-libre

Ciberespaço, 1º de março de 2010—Linux não é Software Livre desde 1996, quando o Sr Torvalds aceitou as primeiras peças de Software não-Livre na distribuição de Linux que publica desde 1991. Em todos esses anos, enquanto esse kernel cresceu por um fator de 14, a quantidade de firmware não-Livre exigida por drivers do Linux cresceu por um alarmante fator de 83. Nós, usuários de Software Livre, precisamos unir forças para reverter essa ameaça, e parte da solução é o Linux-libre, cuja versão 2.6.33-libre foi recentemente publicada pela FSFLA, trazendo consigo liberdade, grandes melhorias e planos para o futuro.

História

Todo o firmware no Linux-1.3.0 era Software Livre. A pouca relevância que o sistema operacional GNU/Linux tinha em 1995 foi suficiente para que alguns distribuidores de hardware revelassem os detalhes de seu hardware, ou mesmo oferecessem todo o software necessário para fazê-lo funcionar, sob termos que respeitavam as liberdades essenciais dos usuários. Eles sabiam que Linux, já licenciado sob a GNU GPLv2, não teria drivers para seus componentes de outra forma.

Ao longo do ano seguinte, Sr Torvalds mudou sua política e começou a aceitar no Linux firmware só disponível em forma binária. Por causa dessa decisão, GNU/Linux deixou de ser um incentivo para fornecedores de hardware respeitarem as liberdades essenciais dos usuários. Desde que desenvolvedores do Linux abriram mão das defesas oferecidas pela GPL, quase todos os fornecedores decidiram manter apenas para si mesmos o controle sobre os sempre crescentes computadores que se passam por periféricos.

Uns 143KB de código objeto disfarçados de código fonte estavam presentes no tarball comprimido de 4.7MB do Linux-2.0, publicado em junho de 1996. Uns 6 anos depois, havia 1.3MB de firmware não-Livre se escondendo no tarball comprimido de 26MB do Linux-2.4.19. No Linux-2.6.33, todas essas peças e outras mais, somando mais de 2MB, estão num subdiretório criado há uns 2 anos para conter firmware no Linux. Outros 650KB ainda disfarçados de fontes foram recentemente agregados ao subdiretório “staging”, e outros 9.2MB (duplicatas removidas) vivem num repositório separado, criado para futuramente substituir o subdiretório de firmware no Linux.

Perspectiva

A maior peça única de firmware não-Livre no repositório linux-firmware hoje tem 1.25MB. Nos anos 1980, a metade desses bytes era considerada memória suficiente para qualquer aplicação num computador pessoal. Foi então que Richard Stallman começou a trabalhar no GNU, quando sistemas operacionais inteiros eram menores que isso. Ele se deu conta de que usuários deveriam ter direito às quatro liberdades essenciais sobre todo o software que executavam nos computadores, mesmo quando eram muito menos poderosos que os periféricos de hoje.

Alcançamos isso, um sistema operacional Livre para computadores de propósito geral, mas durou apenas alguns anos. O kernel que ofereceu a peça que faltava no sistema operacional GNU não é mais Software Livre há mais de uma década e pede aos usuários que instalem um número crescente de programas não-Livres não incluídos nele.

Progresso

Damos as boas vindas, aplaudimos e agradecemos aos vários esforços recentes que resultaram em firmware Livre para vários dispositivos: Atheros contribuiu firmware Livre para seus cartões de rede sem fio ar5k e ar9k; especialistas em engenharia reversa desenvolveram firmware Livre para alguns cartões de rede sem fio b43 da Broadcom; outros desenvolveram o driver Livre nouveau para cartões de vídeo da nVidia e, mais recentemente, completaram a tarefa com firmware Livre para eles, infelizmente um pouquinho tarde demais para que as últimas peças entrassem no Linux-2.6.33.

Porém, assim como RMS, percebemos que desenvolver Software Livre não é suficiente para estabelecer liberdade para os usuários de GNU/Linux. Também precisamos ensiná-los a valorizar sua liberdade e a reconhecer e rejeitar Software não-Livre. De outro modo, produtos que exijam que usuários cedam sua liberdade continuariam a encontrar compradores interessados.

Há alguns anos, a comunidade de Software Livre percebeu que Linux não era mais Software Livre e iniciou vários esforços para resolver esse problema. Um deles, nascido sem nome no gNewSense, foi chamado Linux-libre no BLAG. Depois que assumimos a responsabilidade por ele, além de remover os componentes não-Livres do Linux, trocamos requisições de firmware não-Livre por mensagens que informam usuários de que o hardware em questão é uma armadilha.

Nossa esperança é que mais usuários usarão essa versão Livre de Linux, presente em várias distribuições de GNU/Linux-libre, para descobrir sobre componentes de hardware que não respeitam sua liberdade, dizer aos fornecedores como estão insatisfeitos com isso, e usar sua liberdade e poder de escolha para apoiar fornecedores que respeitem seus clientes.

Grandes empresas, governos ou muitos usuários trabalhando juntos, aplicando uma pequena pressão no ponto certo dos bolsos dos fornecedores, frequentemente conseguem que mudem de ideia e voluntariamente respeitem a liberdade dos clientes. Quando não funciona, ainda podemos ajudar, participando em ou doando fundos para esforços de engenharia reversa. Fabricantes que voluntariamente respeitam nossa liberdade merecem maior apreço, mas um produto que funciona em liberdade, apesar dos esforços do fabricante, é muito melhor que nada.

Que há de novo no Linux-2.6.33-libre

Não mantemos os fontes do Linux-libre diretamente. Em vez disso, mantemos scripts de “deblobbing” que limpam os “fontes” do Linux, assim produzindo os fontes do Linux-libre. A maior melhoria nessa geração do Linux-libre, a quarta desde que nos envolvemos, consistiu em tornar os scripts de deblobbing mais eficientes.

Como acumulamos milhares de padrões para reconhecer blobs, sequências que parecem blobs mas não são, requisições de firmware não-Livre e documentação que induz usuários a instalá-lo, rodar o script em GNU sed gerado para localizar e remover blobs ficou custoso demais para alguns usuários: em versões recentes do Linux-libre, o GNU sed demorava uns 15 minutos e tomava mais de 2GB de RAM para compilar todos os padrões no script.

A solução foi reescrever o script principal numa linguagem de script de algo nível. GNU awk reduziu o tempo de início a cerca de 3 segundos, e as exigências de memória foram reduzidas de uma ordem de magnitude, porém 3 segundos multiplicados pelos 260 arquivos limpos por esse script para formar Linux-2.6.33-libre é muito tempo para desperdiçar. Python e PERL compilam nossa enorme coleção de padrões em décimos de segundo, enquanto reduzem o uso de memória em quase outra ordem de magnitude. Porém, limites internos do algoritmo de busca de padrões no PERL produzem resultados incorretos no deblob-check, então usá-lo com PERL não é recomendado por enquanto.

Para a limpeza, pelo deblob-main, de pequenos arquivos do Linux, determinou-se que Python era o mais rápido, razão pela qual agora o usamos por default. Para verificar que um tarball grande está limpo, o tempo de execução de Python e PERL salta a mais de 90 minutos, bem mais que os 5 minutos com GNU awk e que os pouquíssimos 3 minutos com GNU sed. GNU awk vem na frente quando se listam todos os blobs num tarball do Linux, agora com uma característica desejada faz tempo: imprime, antes de cada blob, o nome do arquivo dentro do tarball que o contém.

Futuras versões podem ser mais espertas e escolher o componente mais adequado dependendo da tarefa e da entrada. Por enquanto, usuários do deblob-check devem conhecer os novos parâmetros: –use-python, –use-awk, –use-perl e –use-sed, as variáveis de ambiente correspondentes PYTHON, AWK, PERL e SED.

O menor uso de memória e CPU para verificar e limpar arquivos individuais significa que é novamente possível limpar árvores do Linux na hora de compilar, algo que vários usuários consideravam valioso.

Nos próximos dias, publicaremos Linux-libre, quarta geração, também para versões anteriores do Linux, corrigindo alguns erros de limpeza em drivers em “staging” e pegando mais algumas ocorrências de nomes de blobs não-Livres em documentação e mensagens de erro.

Pedido de comentários

Vários de nossos usuários expressaram insatisfação legítima com uma consequência do método que usamos para que o kernel não induzisse usuários a instalar firmware não-Livre. Não é nosso objetivo impedir que usuários carreguem ou executem firmware não-Livre, mas a única maneira que encontramos para evitar induzir usuários a executar firmware não-Livre tinha o efeito colateral de tornar impossível o uso de firmware não-Livre simplesmente instalando-o.

No Linux, vários drivers chamam request_firmware com o nome de um blob. Essa requisição é registrada, incluindo o nome do blob, e passada a um programa em nível usuário, que deve localizar um arquivo de firmware com esse nome e fornecê-lo ao kernel. Dados os registros, além do comportamento existente e potencial do programa em nível usuário, isso equivale ao Linux dizer ao usuário que instale um programa não-Livre específico, o que não é aceitável.

Versões do Linux-libre desde a geração 2 substituem o nome do blob por um nome que o carregador de firmware provavelmente não encontrará, e que pode ser reconhecido em nível usuário para informar o usuário sobre a falta de firmware Livre para algum componente de hardware do sistema. Também rejeitamos quaisquer respostas que o carregador de firmware produza para essas requisições, para minimizar riscos de coincidências acidentais e dano ao hardware.

Pensamos que qualquer um determinado a usar o firmware ainda poderia compilar um módulo, ou o kernel completo, que faça a solicitação e use a resposta. Essa possibilidade foi considerada incômoda demais por alguns.

Recentemente nos ocorreu outra forma de atingir a meta de impedir o kernel de convidar usuários a cair na armadilha do Software não-Livre: onde Linux solicita arquivos sabidamente não-Livres, poderíamos anonimizar o nome do blob com um hash unidirecional de seu nome e um identificador da compilação e/ou da sessão do kernel, e fazer a solicitação por um arquivo nomeado pelo hash calculado.

Dada uma implementação adequada do carregador de firmware em nível usuário, qualquer peça de firmware que o usuário tenha decidido instalar continuaria sendo localizada facilmente e disponibilizada para o kernel. Porém, por causa da natureza unidirecional do hash, um pedido de firmware que não esteja instalado não induziria a sua instalação: o código de hash não os identificaria imediatamente. Assim, se o usuário insiste em instalar o firmware, Linux-libre poderá usá-lo, mas é muito pouco provável que alguém instale o firmware por influência do Linux-libre.

Soma-se a nós em linux-libre@fsfla.org e conte-nos sua sugestões, outras formas de resolver essa questão, ou sua opinião sobre esse plano e se ele poderia ser aceito “rio acima”. Retorno e ajuda são bem-vindos!

Enquanto isso, “Sê Livre!” com Linux-2.6.33-libre, e ajuda-nos a reverter a crescente dependência do Linux em firmware não-Livre.

Sobre o Linux-libre

Linux-libre é um projeto mantido pela FSFLA, que publica versões limpas de Linux, adequadas para uso em distribuições que cumpram as Diretivas para Distribuições de Software Livre publicadas pelo projeto GNU, e por usuários que queiram rodar versões Livres do Linux em seus sistemas GNU. O projeto oferece scripts para limpar, fontes Livres, binários para algumas distribuições de GNU/Linux-libre, binários Livres para substituir com diferenças mínimas os kernels de distribuições não-Livres de GNU/Linux: Freed-ebian e Freed-ora, e artes gráficas com GNU e a mascote do Linux-libre: Freedo, o pinguim azul claro, limpo, Livre e amigável ao usuário.
http://linux-libre.fsfla.org/
http://www.gnu.org/distros/

Sobre a FSFLA

A Fundação Software Livre América Latina se uniu em 2005 à rede internacional de FSFs, anteriormente formada pelas Free Software Foundations dos Estados Unidos, da Europa e da Índia. Essas organizações irmãs atuam em suas respectivas áreas geográficas no sentido de promover os mesmos ideais de Software Livre e defender as mesmas Liberdades para usuários e desenvolvedores de software, trabalhando localmente mas cooperando globalmente.
http://www.fsfla.org/


Copyright 2010 FSFLA

Permite-se distribuição, publicação e cópia literal da íntegra deste documento, em qualquer meio, em todo o mundo, sem pagamento de royalties, desde que sejam preservadas a nota de copyright, a URL oficial do documento e esta nota de permissão.

Permite-se também distribuição, publicação e cópia literal de seções individuais deste documento, em qualquer meio, em todo o mundo, sem pagamento de royalties, desde que sejam preservadas a nota de copyright e a nota de permissão acima, e que a URL oficial do documento seja preservada ou substituída pela URL oficial da seção individual.

http://www.fsfla.org/anuncio/2010-03-Linux-2.6.33-libre

Last update: 2010-03-01 (Rev 6671)

svnwiki $Rev: 15576 $