O Legado do DJB Dando Frutos
Rec 08-mar-2007 23:00
O
Daniel Bernstein (também conhecido como "DJB") inaugurou um novo estilo na programação para Unix: cirar programas muito pequenos e simples
que realizam apenas uma tarefa simples, com atenção particular quanto à confiabilidade, condições de falhas e em não criar
buffer overflows que possam ser usados para subverter o programa. Encadeando vários desses programas, tem-se sistemas confiáveis, rápidos e muito seguros -- muito mais do que quando usamos abordagens monolíticas.
Os exemplos mais proeminentes dessa filosofia são o
qmail e o
tinydns -- eles nos livraram de
centenas de vulnerabilidades advindo do
sendmail e do
bind. Esses programas trouxeram considerável paz de espírito para muitos administradores de sistemas: eles têm garantias fortes de que seus servidores publicamente acessíveis não serão invadidos através desses programas.
Mais importante ainda, o DJB refutou a idéia que "programação segura é difícil demais", que o nível de atenção aos detalhes que ela requer "não é prática", bem como argumentos espúrios similares. Parodiando o estilo um tanto rude do DJB, as vulnerabilidades são em grande medida uma expressão da incompetência dos programadores.
Ainda assim, muito das idéias e técnicas do DJB ainda são desconhecidas. Eu não vejo muitos cursos de programação em Unix usando a abordagem do DJB; a maioria deles apenas repetem os mesmos métodos arcaicos e se baiseiam em livros de mais de uma década atrás. Apesar do
qmail
já ser o segundo mais popular servidor de correio na Internet, ele ainda não é o número um -- segurança, ao que parece, não está muito alto na lista de prioridades de muita gente.
Entretanto, é com alegria que eu noto que tudo isso está finalmente mudando. Agora temos vários outros programadores seguindo o estilo DJB:
- Laurent Bercot organizou e melhorou várias das bibliotecas do DJB, criando a skalibs, além de vários outros utilitários. Suas páginas inclsuivem seguem o estilo HTML classico minimalista do DJB.
- O pessoal do site SuperScript criaram clientes e servidores SSL aderentes à especificação UCSPI criada pelo DJB. Coisa semelhante também foi feita para o caso de IPC. Há muitas outras coisas interessantes no site deles.
- Paul Jarc também oferece vários programas interessantes, tal como utilitários para manipulação de descritores de arquivos, o runwhen como alternativa para o
cron
, várias ferramentas para gerenciamento de pacotes usando a convenção /package
e muito mais.
- Felix von Leitner é famoso pelos seus embutils, substitutos para os utilitários
ls
, mv
, cp
, dd
, etc., clássicos do Unix, mas usando a muitíssimo mais leve e não menos famosa diet libc. Na página do seu projeto libowfat (visando a reimplementar as bibliotecas do DJB sob a GPL), ele sumariza o trabalho do DJB de forma bem legal:
Uma das melhores maneiras de aprender boas práticas de programação é ler o código dos outros. Eu li o código fonte de um monte de gente. Um dos momentos mais inspiradores da minha carreira enquanto programador em C foi olhar o código do Dan Bernstein. Enquanto a maioria dos programadores tropeça em APIs ruins durante suas vidas, Dan não apenas começou a questioná-las, mas também definiu novas e melhroes APIs e as implementou.
- Há um site chamado thedjbway.org que mostra como criar o "servidor perfeito" usando exclusivamente software do DJB e similares.
O trabalho desse e muitos outros programadores nos permite sonhar com um futuro onde os sistemas computacionais serão muito mais confiáveis e difíceis de invadir do que o software nojento de hoje em dia. O futuro começa agora: se você é um administrador de sistemas, recomendo fortemente que teste esses utilitários, leia suas documentações a fundo e passe a usá-los nos seus sitema -- eles se tornarão melhores, rápidos e mais seguros. Se você for um programador, eu recomendo fortemente estudar o código que esses caras escreveram -- você se tornará um programador muitíssimo melhor.
Mas se você é um desses programadores que só sabe Java e que acredita que pode continuar vivendo sem esse conhecimento -- é por sua causa que esse futuro ainda está tão distante. Lembre-se: Java é escrita em C. Faça um favor a si mesmo: aprenda C e estude esse material.
topo