O que é um Hacker?

Por Eric Steven Raymond.

Tradução parcial (10/12/2012). O original pode ser lido aqui.

Existe uma comunidade, uma cultura compartilhada, de programadores e especialistas de rede que traça a sua história através de décadas, até aos primeiros mini-computadores de tempo partilhado e às primeiras experiências na ARPAnet. Os membros dessa cultura deram origem ao termo "hacker". Hackers construíram a Internet. Hackers fizeram do sistema operacional Unix o que ele é hoje. Hackers gerem a Usenet. Hackers fazem a World Wide Web funcionar. Se fazes parte desta cultura, se contribuiste para ela e outras pessoas sabem quem és e chamam-te hacker, és um hacker.

A mentalidade hacker não é confinada a esta cultura de software-hacker. Há pessoas que aplicam a atitude hacker em outras coisas, como eletrônica ou música - na verdade, podes encontrá-la nos níveis mais altos de qualquer ciência ou arte. Hackers de software reconhecem esses espíritos aparentados de outros lugares e podem chamá-los de "hackers" também - e alguns alegam que a natureza hacker é realmente independente do meio particular em que o hacker trabalha. Mas no resto deste documento, concentrar-nos-emos nas habilidades e atitudes dos hackers de software, e nas tradições da cultura partilhada que deu origem ao termo "hacker".

Há um outro grupo de pessoas que se dizem hackers, mas não são. Estas são as pessoas (principalmente adolescentes) que se divertem a invadir computadores. Os Hackers chamam-lhes 'crackers' e não querem nada com eles. Hackers consideram os crackers preguiçosos, irresponsáveis, não muito brilhantes, e afirmam que, tal como ser capaz de fazer uma ligação direta não torna ninguém num engenheiro mecânico, seres capaz de quebrar a segurança não faz de ti um hacker. Infelizmente, muitos jornalistas e escritores foram levados a usar a palavra "hacker" para descrever crackers; isso irrita os verdadeiros hackers.

A diferença básica é esta: hackers constroem, crackers destroem.

Se queres ser um hacker, continua a ler. Se quiseres ser um cracker, vai ler o newsgroup alt.2600 e prepara-te para passar 5 a 10 anos na prisão depois de descobrires que não és tão esperto quanto pensas. E isso é tudo que vou dizer sobre crackers.

A Atitude Hacker

  1. O mundo está cheio de problemas fascinantes à espera de serem resolvidos.
  2. Nenhum problema deve ter que ser resolvido duas vezes.
  3. Tédio e trabalho repetitivo são maus.
  4. A liberdade é boa.
  5. Atitude não substitui competência.

Os hackers resolvem problemas e constroem coisas, e acreditam na liberdade e na ajuda mútua voluntária. Para seres aceite como um hacker, tens que te comportar como se tivesses este tipo de atitude. E para te comportares como se tivesses esta atitude, tens que realmente acreditar nela.

Mas se achares que cultivar a atitude hacker é somente um meio para ganhar aceitação na cultura, vais perder o essencial. É importante tornares-te o tipo de pessoa que acredita nessas coisas - para ajudar-te a aprender e manter-te motivado. Como em todas as artes criativas, o modo mais efetivo para nos tornarmos um mestre é imitar a mentalidade dos mestres - não só intelectualmente como também emocionalmente. Ou, como o seguinte poema Zen moderno, tens de:

Para seguir o caminho:

olhar para o mestre,

seguir o mestre,

andar com o mestre,

ver através do mestre,

tornar-se o mestre.

Então, se queres ser um hacker, repete as seguinte frases até que acredites nelas:

1. O mundo está cheio de problemas fascinantes à espera de serem resolvidos.

Ser hacker é muito divertido, mas é um tipo de diversão que necessita de muito esforço. O esforço precisa de motivação. Atletas de sucesso retiram a sua motivação de uma espécie de prazer físico em trabalhar os seus corpos, em tentar ultrapassar os seus próprios limites físicos. Da mesma forma, para ser um hacker precisas de sentir prazer em resolver problemas, melhorar as tuas habilidades e exercitar a inteligência.

Se não és o tipo de pessoa que se sente assim naturalmente, vais precisar de te tornar numa, a fim de chegares a hacker. Caso contrário, verás que a tua energia de “hacking” é desperdiçada em distrações como sexo, dinheiro e aprovação social.

(Também tens que desenvolver uma espécie de fé na tua própria capacidade de aprendizagem - crer que, mesmo que possas não saber tudo o que precisas para resolver um problema, se enfrentares apenas uma parte dele e aprenderes com isso, vais aprender o suficiente para resolver a próxima parte - e assim por diante, até o teres resolvido).

2. Nenhum problema deve ter que ser resolvido duas vezes.

Mentes criativas são um recurso valioso e limitado. Elas não devem ser desperdiçadas a reinventar a roda quando há tantos problemas novos e fascinantes.

Para te comportares como um hacker, tens de acreditar que o tempo de pensamento dos outros hackers é precioso - tanto que é quase um dever moral partilhar informação, resolver problemas e dar as soluções, para que outros hackers possam resolver novos problemas, em vez de se preocuparem com os antigos.

Nota, entretanto, que "Nenhum problema deve ter que ser resolvido duas vezes." não implica que tens que considerar todas as soluções existentes sagradas, ou que só há uma solução correta para um dado problema. Muitas vezes, aprendemos muito sobre um problema estudando uma solução. Está correto, e é muitas vezes necessário, decidir que podemos fazer melhor. O que não é correto são as barreiras técnicas artificiais, legais ou institucionais (como o código fonte fechado) que impedem a reutilização de uma boa solução e forçam as pessoas a reinventar a roda.

(Não penses que estás obrigado a dar toda a tua produção criativa, ainda que hackers que o fazem sejam os mais respeitados pelos outros hackers. É coerente com os valores do hacker vender o seu trabalho para pagar a renda, alimentos e computadores. É bom usar as habilidades de hacker para sustentar a família ou mesmo ficar rico, contanto que ao fazê-lo não esqueças a tua lealdade para com a tua arte e os teus companheiros hackers).

3. Tédio e trabalho repetitivo são maus.

Hackers (e pessoas criativas em geral) não devem ficar aborrecidas ou ter que fazer trabalho repetitivo, porque isso significa que eles não estão a fazer o que apenas eles podem fazer - resolver novos problemas. Esse desperdício prejudica todos. Portanto, tédio e trabalho repetitivo não são apenas desagradáveis, mas maus.

Para te comportares como um hacker, tens que acreditar nisso de modo a automatizar as partes chatas tanto quanto possível, não apenas para ti mesmo, mas para todos os outros (principalmente outros hackers).

(Há uma exceção aparente a isso. Às vezes, hackers fazem coisas que podem parecer repetitivas ou tediosas para um observador, como um exercício de limpeza mental, ou para adquirir uma habilidade ou ter uma espécie particular de experiência que não podem ter outra forma . Mas isso é por opção - ninguém que consiga pensar deve ser forçado a uma situação que os aborrece).

4. A liberdade é boa.

O hacker é naturalmente anti-autoritários. Qualquer pessoa que lhe pode dar ordens pode impedi-lo de resolver qualquer problema em que esteja fascinado - e, dado o modo de trabalho das mentes autoritárias, geralmente arranjará alguma desculpa espantosamente idiota para fazer isso. Então, a atitude autoritária deve ser combatida onde quer que a encontres, para que não te sufoque a ti e a outros hackers.

(Esta não é a mesma coisa que combater toda a autoridade. Crianças precisam de ser orientadas, e criminosos detidos. Um hacker pode aceitar alguns tipos de autoridade a fim de obter algo que ele quer mais do que o tempo que gasta a seguir ordens. Mas isso é uma negociação restrita e consciente. O tipo de sujeição pessoal que os autoritários querem não é aceitável).

Autoritários prosperam na censura e no segredo. E desconfiam da cooperação voluntária e partilha de informação - só gostam da "cooperação" que eles possam controlar. Então, para te comportares como um hacker, tens que desenvolver uma hostilidade instintiva à censura, ao segredo, e ao uso da força ou mentira para forçar adultos responsáveis. E tens que estar disposto a agir de acordo com essa crença.

5. A atitude não substitui competência.

Para ser um hacker, tens que desenvolver algumas dessas atitudes. Mas apenas ter uma atitude não fará de ti um hacker, assim como não te fará um atleta campeão ou uma estrela de rock. Para te tornares um hacker é preciso inteligência prática, dedicação, e trabalho duro.

Portanto, tens que aprender a desconfiar da atitude e a respeitar a competência de todo o tipo. Hackers não deixam que “posers” gastem o seu tempo, mas admiram competência - especialmente competência em hacking, mas competência em qualquer coisa é valorizada. A competência em habilidades que poucos conseguem dominar é especialmente apreciada, e competência em habilidades que involvem agudeza mental, perícia e concentração é a melhor.

Se aprecias competência, vais gostar de desenvolvê-la em ti mesmo - o trabalho duro e dedicação tornar-se-ão uma espécie de jogo, em vês de trabalho repetitivo. Essa atitude é vital para te tornares um hacker.

Habilidades básicas de Hacking

A atitude hacker é vital, mas as habilidades são ainda mais vitais. Atitude não substitui competência, e há uma certo conjunto de habilidades que precisas de ter antes que um hacker sonhe em te chamar de um.

Este conjunto de ferramentas muda lentamente com o tempo, a tecnologia cria novas habilidades e torna obsoletas as antigas. Por exemplo, costumava incluir programação em linguagem de máquina, e até recentemente não incluía HTML. Hoje em dia, claramente inclui o seguinte:

1. Aprender a programar.

Isto, naturalmente, é a habilidade fundamental de hacking. Se não sabes nenhuma linguagem de programação, recomendo começar com Python. É projetado de forma limpa, bem documentado, e relativamente bom para iniciantes. Apesar de ser uma boa linguagem primeira, não é apenas um brinquedo, é muito poderosa e flexível e bem adequada para grandes projetos. Bons tutoriais estão disponíveis no web site do Python.

Há aqui talvez um ponto mais geral. Se uma linguagem faz demasiadas coisas por ti, pode ser uma boa ferramenta para produzir mas má para aprender. Não são apenas as linguagens que têm este problema; frameworks de aplicação Web como RubyOnRails, CakePHP, Django pode tornar muito fácil chegar a um tipo superficial de entendimento que te vai deixar sem recursos quando tiveres que enfrentar um problema difícil, ou mesmo apenas depurar a solução de um fácil.

Se entrares na programação séria, vais ter que aprender C, a linguagem principal do Unix. C++ é muito intimamente relacionada com C. Se conheces uma, aprender a outra não vai ser difícil. No entanto, nenhuma delas é uma boa primeira linguagem para tentar aprender. E, na verdade, quanto mais poderes evitar programação em C, mais produtivo serás.

C é muito eficiente, e utiliza muitos poucos de recursos da tua máquina. Infelizmente, C consegue essa eficiência exigindo que faças uma gestão de recursos de baixo nível (como memória) manualmente. Todo o código de baixo nível é complexo e propenso a erro, e irá absorver enormes quantidades de tempo na depuração. Com máquinas tão poderosas como as de hoje, esta é geralmente uma má troca - é mais inteligente para usar uma linguagem que usa o tempo da máquina de forma menos eficiente, mas o teu tempo de forma muito mais eficiente. Assim, Python.

Está ciente de que não vais alcançar o nível de habilidade de um hacker ou mesmo apenas de um programador simplesmente acumulando linguagens – tens de aprender a pensar sobre problemas de programação de um modo geral, independentemente de qualquer linguagem. Para ser um hacker, tens de chegar ao ponto onde podes aprender uma nova linguagem em dias, relacionando o que está no manual ao que já sabes. Isto significa que deves aprender várias linguagens muito diferentes.

Aprender a programar é como aprender a escrever bem em linguagem natural. A melhor maneira de o fazer é ler algumas coisas escritas por mestres, escrever algumas coisas, ler muito mais, escrever um pouco mais, ler muito mais, escrever mais um pouco ... e repetir até que o teu estilo comece a desenvolver o tipo de força e economia que vês nos teus modelos.

Achar bom código para ler costumava ser difícil, porque havia poucos programas disponíveis em código-fonte para que hackers iniciantes pudessem ler e mexer. Isso mudou dramaticamente; sistemas de software open-source, ferramentas de programação, e sistemas operativos (todos feitos por hackers) estão amplamente disponíveis atualmente. O que me traz para o nosso próximo tópico ...

2. Agarra num dos Unixes de código aberto e aprende a usar e executar.

Vou assumir que tens um computador pessoal ou acesso a um. (Tira um momento para apreciar o quanto isso significa. A cultura hacker evoluiu originalmente quando os computadores eram tão caros que as pessoas não podiam possuí-los.) O passo mais importante que um novato deve dar para adquirir habilidades de hacker é pegar uma cópia do Linux ou um dos BSD-Unixes ou OpenSolaris, instalá-lo numa máquina pessoal, e executá-lo.

Sim, há outros sistemas operacionais no mundo além do Unix. Mas eles são distribuídos em forma binária - não consegues ler o código, e não podes modificá-lo. Tentar aprender Hacking numa máquina Microsoft Windows ou em qualquer sistema fechado de outra fonte é como tentar aprender a dançar com o corpo engessado.

No Mac OS X, é possível, mas apenas uma parte do sistema é de código aberto - é provável que batas num monte de paredes, e tens que ter cuidado para não desenvolver o mau hábito de depender de código proprietário da Apple. Se te concentrares no Unix como estrutura, podes aprender algumas coisas úteis.

Unix é o sistema operativo da Internet. Enquanto podes aprender a usar a Internet sem conhecer Unix, não podes ser um hacker sem entender Unix. Por esta razão, a cultura hacker de hoje, é fortemente centralizada no Unix. (Isto não foi sempre assim, e alguns hackers da velha guarda ainda não estão felizes com isso, mas a simbiose entre o Unix e a Internet tornou-se tão forte que até mesmo o músculo da Microsoft não parece ser capaz de abalá-la seriamente).

Então, pega num Unix - eu gosto do Linux, mas existem outras maneiras (e sim, podes ter Linux e Microsoft Windows na mesma máquina). Aprender. Executá-lo. Mexer nele. Fala com a Internet com ele. Lê o código. Modifica o código. Terás melhores ferramentas de programação (incluindo C, LISP, Python e Perl) do que qualquer outro sistema operativo da Microsoft pode sonhar em possuir, vais-te divertir, e absorver mais conhecimento do que aquele que percebes que estás a aprender, até olhares para trás como um mestre hacker.

3. Aprende a usar a World Wide Web e escreve em HTML.

A maioria das coisas que a cultura hacker tem construído fazem o seu trabalho fora da vista, ajudando no funcionamento de fábricas, escritórios e universidades sem nenhum impacto óbvio na vida dos não-hackers. A Web é a grande exceção, o enorme e brilhante brinquedo dos hackers que até mesmo políticos admitem que mudou o mundo. Por esta razão (e um monte de outras) precisas aprender a trabalhar a web.

Isso não significa apenas aprender a mexer num browser (qualquer um faz isso), mas aprender a escrever HTML, a linguagem da Web. Se não sabes programar, escrever em HTML dar-te-á alguns hábitos mentais que te ajudarão a aprender. Então, constrói uma home page. Mas ter apenas uma home page não nem de perto o suficiente para te tornar um hacker. A Web está cheia de home pages. A maioria delas é inútil, porcaria sem conteúdo - muito atraentes, mas mesmo assim, porcaria. Para valer a pena, a tua página deve ter conteúdo - deve ser interessante e / ou útil para outros hackers. E isso nos leva ao próximo tópico ...

4. Se não sabes Inglês funcional, aprende.

Como um nativo americano, já fui relutante em sugerir isso, para que não seja tomado como uma espécie de imperialismo cultural. Mas vários nativos de outras línguas pediram-me para salientar que o Inglês é a língua de trabalho da cultura hacker e da Internet, e que precisas de o saber para funcionar na comunidade hacker.

Por volta de 1991, aprendi que muitos hackers que têm o Inglês como segunda língua usam-no em discussões técnicas, mesmo quando eles compartilham uma língua nascimento; foi-me explicado que o Inglês tem um vocabulário técnico mais rico do que qualquer outra língua e, portanto, é simplesmente uma melhor ferramenta para o trabalho. Por razões semelhantes, traduções de livros técnicos escritos em Inglês são muitas vezes insatisfatórias.

Linus Torvalds, um Finlandês, comenta o seu código em Inglês (aparentemente nunca lhe ocorreu agir de outra forma). Sua fluência em Inglês tem sido um fator importante na sua capacidade de recrutar uma comunidade mundial de colaboradores para o Linux. É um exemplo a seguir.

Ser um Inglês nativo não garante que tenhas bons conhecimentos linguísticos para funcionar como um hacker. Se a tua escrita é semi-analfabeta, não gramatical, e cheia de erros ortográficos, muitos hackers (eu inclusive) tendem a ignorá-la. Enquanto escrita desleixada não significa sempre pensamento desleixado, encontramos geralmente uma forte correlação - e não temos uso para pensadores desleixados. Se ainda não sabes escrever com competência, aprende.