Copyright © 2001 Eric S. Raymond
Traducción: Miquel Vidal <miquel@sindominio.net>,
a partir de una versión previa realizada por César Ballardini.
Tabla de Contenidos
Como editor del Jargon File (el "Archivo de la jerga hacker") y autor de algunos documentos bien conocidos del mismo tipo, a menudo recibo emails de entusiastas novatos de la Red preguntando: "¿Cómo puedo aprender a ser un hacker habilidoso?" Triste es decir que no parece haber ninguna FAQ ni documento web que aborde este tema vital, así que aquí va el mío.
Si estás leyendo este documento sin conexión, la version original en línea la puedes encontrar en http://www.catb.org/~esr/faqs/hacker-howto.html.
Nota: hay una lista de Preguntas Frecuentes al final de este documento. Por favor léelo —2 veces— antes de mandarme un email con preguntas acerca de este documento.
Hay disponibles numerosas traducciones de este documento: búlgaro, catalán, chino (simplificado), chino (tradicional), danés, neerlandés, francés, alemán, hebreo, húngaro, indonesio, italiano japonés, coreano, portugués (brasileño), portugués (europeo), ruso, y sueco. Ten en cuenta que, como el contenido de este documento cambia ocasionalmente, dichas traducciones pueden estar desactualizadas en grado diverso.
El Jargon File contiene un montón de definiciones del termino "hacker", la mayoría basadas en la afición a lo técnico y en el placer de resolver problemas sobrepasando los límites. Si deseas saber cómo convertirte en un hacker, bien, solo 2 puntos son realmente relevantes.
Existe una comunidad, una cultura compartida, de programadores expertos y magos de las redes, cuya historia se remonta décadas atrás a los tiempos de los primeros miniordenadores de tiempo compartido y los tempranos experimentos con ARPAnet. Los miembros de esta cultura crearon el término "hacker". Los hackers construyeron Internet. Los hackers hicieron de Unix el sistema operativo que es hoy día. Los hackers hacen andar Usenet. Los hackers hacen funcionar la WWW. Si eres parte de esta cultura, si has contribuido a ella y otras personas saben quién eres y te llaman hacker, entonces eres un hacker.
Los mentalidad hacker no está confinada a esta cultura del software. Hay gente que aplica la actitud de hacker a otras cosas, como la electrónica o la música —de hecho, puedes encontrarla en los más altos niveles de cualquier ciencia o arte. Los hackers de software reconocen estos espíritus emparentados en otras partes y pueden llamarlos "hackers" también— y algunos sostienen que la naturaleza hacker es en realidad independiente del medio particular en el cual el hacker trabaja. Sin embargo, en el resto de este documento nos centraremos en las habilidades y actitudes de los hackers de software, y en las tradiciones de la cultura compartida que originó el término "hacker".
Existe otro grupo de personas que se llaman a sí mismos hackers, pero que no lo son. Son personas (generalmente varones adolescentes) que se divierten irrumpiendo ilegalmente en ordenadores y haciendo "phreaking" en el sistema teléfonico. Los auténticos hackers tienen un nombre para esas personas: "crackers", y no quieren saber nada de ellos. Los auténticos hackers opinan que la mayoría de los crackers son perezosos, irresponsables y no muy brillantes, y fundamentan su crítica en que ser capaz de romper la seguridad no le hace a uno un hacker, de la misma manera que ser capaz de arrancar un coche con un puente en la llave no le convierte en ingeniero de automotores. Desafortunadamente, muchos periodistas y escritores utilizan erróneamente la palabra "hacker" para describir a los crackers; esto causa enorme irritación a los auténticos hackers.
La diferencia básica es esta: los hackers construyen cosas; los crackers las destruyen.
Si quieres ser un hacker, continúa leyendo. Si lo que quieres es ser un cracker, ve directo a leer el alt.2600 y prepárate para soportar la dura realidad cuando descubras que no eres tan listo como crees. Y eso es todo lo que voy a decir de los crackers.
O como dice el siguiente poema zen moderno:
Así que, si quieres ser un hacker, repite lo que sigue hasta que te creas lo que estás diciendo:
Esta es, por supuesto, la habilidad fundamental del hacker. Si no conoces ningún lenguaje de programacion, recomiendo empezar con Python. Es limpio, bien documentado, y relativamente fácil para novatos. A pesar de ser un buen primer lenguaje, no es un juguete; es muy poderoso, flexible y se adapta bien a grandes proyectos. He escrito un detallado análisis de Python. Hay disponibles buenos tutoriales en el sitio web de Python.
Java es tambien un buen lenguaje para iniciarse en la programación. Es más difícil que Python, pero produce código más rápido que Python. Creo que es un buen segundo lenguaje para aprender.
Pero no creas que podrás ser un hacker, siquiera un programador, si solo conoces un único lenguaje —debes aprender cómo pensar en los problemas de programación de una manera general, independiente de cualquier lenguaje. Para ser un hacker de verdad, precisas llegar al punto en el cual aprendas un lenguaje nuevo en días, relacionando lo que está en el manual con lo que ya sabe de antes. Esto significa que debes aprender varios lenguajes muy diferentes entre sí.
Si deseas meterte seriamente en programación, tendrás que aprender C, la base de Unix. C++ es muy parecido a C; si conoces uno, aprender el otro no te resultará difícil. Sin embargo, ninguno de ellos es bueno para aprender a programar. Y hoy día, cuanto más puedas evitar programar en C, mas productivo serás.
C es muy eficiente, y trabaja bien con los recursos de las maquinas. Desafortunadamente, C obtiene su eficiencia a base de mucho manejo a bajo nivel de los recursos (como la memoria) a mano. Todo esa programación a bajo nivel es muy compleja y propensa a errores, y tendrás que dedicar gran cantidad de tiempo a la depuración de los programas. Con las máquinas de hoy, tan poderosas, esto ya no es tan necesario —es más inteligente usar un lenguaje que use el tiempo de máquina menos eficientemente, pero en cambio use tu tiempo más eficientemente. O sea, Python.
Otros lenguajes de particular importancia para los hackers son Perl y LISP. Perl vale la pena aprenderlo por razones prácticas: es amplísimamente usado por páginas web dinámicas y por sistemas de administración, así que incluso si nunca has escrito en Perl, deberías aprender a leerlo. Mucha gente usa Perl en la forma que yo sugiero usar Python, para evitar la programacion en C en trabajos que no requieran la eficiencia de C. Necesitarás ser capaz de entenderlo.
Vale la pena aprender LISP por una razón diferente — La profunda e iluminadora experiencia que obtendrás cuando finalmente lo logres te hará ser mejor programador el resto de tus días, incluso si no usas LISP mucho. (Puedes obtener fácilmente algo de primera experiencia con LISP escribiendo y modificando los modos de edición del editor Emacs.)
Lo mejor hoy día es aprender estos cinco (Python, Java, C/C++, Perl y LISP). Además de ser estos lenguajes los mas importantes en el hacking, representan muy diversas formas de aproximarse a la programación, y cada uno te educará de diferentes maneras.
No puedo dar instrucciones completas en este documento de cómo puedes aprender a programar —es una habilidad compleja. Pero puedo adelantarte que los libros y los cursos no servirán (muchos, tal vez la mayoría de los mejores hackers, son autodidactas). Puedes aprender las características de los lenguajes —partes de conocimiento— de libros, pero el verdadero conocimiento lo adquieres en la vida real aplicando lo que ya sabes. Lo que sí servirá es a) leer código y b) escribir código.
El aprendizaje de la programación es como aprender a escribir bien en lenguaje natural. La mejor manera de aprender es leer algo de las cosas escritas por los maestros del estilo, luego escribir algunas cosas tú mismo, leer mucho más, escribir un poco más... y repetir esto hasta que lo que escribes empieza a mostrar la clase de fuerza y economía que aprecias en tus modelos.
Antes era difícil encontrar código de buena calidad para leer, porque había pocos programas de cierta magnitud disponibles en código fuente de tal manera que los hackers noveles pudieran meterles mano. Esta situación ha cambiado drásticamente: software de fuente abierta, herramientas de programación libres y sistemas operativos libres (todo ello hecho por hackers) están ampliamente disponibles en la actualidad. Lo que me lleva elegantemente a nuestro siguiente tema...
Si quieres saber más acerca del aprendizaje de Unix, ve a The Loginataka.
Si quieres meter tus manos en Linux, echa un ojo en Dónde puedo obtener Linux.
Puedes encontrar ayuda y recursos de BSD Unix en www.bsd.org.
He escrito sobre los fundamentos básicos de Unix y de Internet.
(Nota: No recomiendo instalar ni Linux ni BSD a solas si eres novato. Para Linux, encuentra un grupo de usuarios local de Linux y pide ayuda; o contáctalo mediante Open Projects Network. LISC mantiene canales IRC donde puedes obtener ayuda.)
No me estoy refiriendo a aprender a manejar un navegador (cualquiera puede hacer eso), sino que debes aprender a escribir HTML, el lenguaje de marcas de la Web. Si aún no sabes cómo programar, el aprendizaje que implica la escritura de HTML te enseñará algunos de los hábitos mentales que te ayudarán luego con la programación. Así que hazte una página personal. Prueba con XHTML, que es más claro que el clasico HTML. (Existen buenos tutoriales para principiantes en la Web; aquí hay uno.)
Pero no vayas a creer que por tener una página personal estás más cerca de ser un hacker. La Web está llena de páginas personales. La mayoría de ellas son banales, basura sin contenido —basura muy vistosa, pero basura al fin (si deseas saber más sobre este tema, mira en The HTML Hell Page).
Para que valga la pena, tu página debe tener contenido —debe ser interesante y/o útil para los otros hackers. Y esto nos lleva al próximo tema...
Existen básicamente cinco clases de cosas que puedes hacer para obtener el respeto de los hackers:
(Solíamos llamarlo free software pero esto confundía a demasiada gente, que no estaban seguros de qué se suponía que significaba free [en inglés, el término free es polisémico y puede significar "libre" o "gratis". En castellano no se da tal ambigüedad por lo que la expresión "software libre" resulta perfectamente adecuada — N. del T.]. La mayoría de nosotros, al menos un ratio 2:1 de acuerdo con los análisis del contenido de la web, ahora preferimos el término software "open source" [En castellano, sin embargo, se sigue usando habitualmente "software libre", aunque en esta versión hemos respetado, como es natural, el cambio en la terminología de Eric, que ha sustituido " free software" por open source en todos sus documentos, y lo hemos traducido por "código de fuente abierta" — N. del T.]).
Los más reverenciados semidioses del hackerismo son las personas que han escrito programas de gran magnitud, con grandes capacidades que satisfacen necesidades de largo alcance, y los donan, de tal manera que cualquiera pueda utilizarlos.
La cultura hacker (y el desarrollo ingenieril de Internet, para el caso) funciona gracias al trabajo voluntario. Existe una gran cantidad de trabajo necesario pero sin glamour que debe hacerse para que esto siga marchando —administrar listas de correo, moderar foros de discusión, mantener sitios donde se archivan grandes cantidades de software, desarrollar RFCs y otros estándares técnicos.
Contrariamente al mito popular, no tienes que ser un nerd [literalmente "empollón", pero en la jerga hacker se ha asumido de forma irónica, perdiendo el matiz originalmente despectivo, y ha acabado usándose como sinónimo de alguien que se preocupa por las cosas importantes y no se entretiene en trivialidades. — N. del T.] para ser hacker. Ayuda, sin embargo, y muchos hackers son nerds. Al ser un marginado social, el nerd puede mantenerse concentrado en las cosas realmente importantes, como pensar y hackear.
Por esta razón, muchos hackers han adoptado la etiqueta "nerd" e incluso utilizan el desagradable término geek como insignia de orgullo —es su forma de declarar su propia independencia de las expectativas sociales normales.
Si puedes concentrarte lo suficiente en el hacking para ser bueno en ello, y encima disfrutar de vida personal, está bien. Es muchísimo más fácil ahora que cuando yo era un novato en los años setenta; la cultura dominante ve con mejores ojos a los tecno-nerds en la actualidad. Hay además un número creciente de personas que se dan cuenta de que con frecuencia los hackers son un material de alta calidad para novio/novia/marido/esposa.
Si te siente atraído por la actividad hacker porque no tienes vida propia, está bien también —al menos no tendrá problemas de concentración—. A lo mejor más adelante puedes conseguir una vida propia como el resto de la gente.
Peter Seebach mantiene un excelente Hacker FAQ para directivos que no entiendan el trato con hackers. Si la pagina de Peter no responde, en la siguiente búsqueda en Excite encontrarás una copia.
También he escrito A Brief History Of Hackerdom [existe traducción castellana: Breve historia de la cultura hacker — N. del T.].
He escrito un artículo The Cathedral and the Bazaar [existe traducción castellana: La catedral y el bazar — N. del T.], donde se explica bastante sobre cómo funciona la cultura de Linux y del software de fuente abierta. He estudiado este tema más directamente en su segunda parte, Homesteading the Noosphere [existe traducción castellana: Cultivando la noosfera — N. del T.].
Rick Moen ha escrito un excelente documento en how to run a Linux user group.
Rick Moen y yo hemos colaborado en otro documento en How To Ask Smart Questions [existe traducción castellana: Cómo hacer preguntas de manera inteligente — N. del T.]. Esto te ayudará a encontrar asistencia en el camino.
Si necesitas instrucciones para lo básico como ordenadores personales, Unix e Internet , ve a The Unix and Internet Fundamentals HOWTO.
Cuando publicas software o escribes parches, procura seguir las directrices en el Software Release Practice HOWTO.
P: | ¿Me enseñarás a hackear? |
R: | Desde la primera publicación de esta página, me llegan varias peticiones por semana (a menudo varios por día) de gente que quiere que le "enseñe todo sobre hackeo". Desafortunadamente, no tengo ni el tiempo ni la energía para hacer eso; mis propios proyectos de hackeo consumen el 110% de mi tiempo. Aun si pudiera hacerlo, el hackeo es una actitud y habilidad que debes aprender por ti mismo. Te darás cuenta de que los hackers de verdad quieren ayudarte, pero no te respetarán si comienzas a rogarles que te alimenten en la boca con todo lo que saben. Aprende unas cuantas cosas primero. Muéstrales que lo estás intentando, que eres capaz de aprender por tu cuenta. Entonces dirígete a los hackers que conozcas pero ya con preguntas específicas. Si escribes un email a un hacker pidiéndole consejo, hay 2 cosas que debes saber antes. Primero, hemos encontrado que la gente que es perezosa o descuidada en sus escritos suelen ser demasiado perezosos o descuidados para pensar en ser buenos hackers —Así que ten cuidado en deletrear correctamente, y usar buena gramática y puntuación. En caso contrario, probablemente serás ignorado. En segundo lugar, no te atrevas a pedir una respuesta con una cuenta de ISP diferente a la cuenta desde la que estás enviando; nos encontramos gente que lo hacen que suelen ser timadores usando cuentas robadas, y no tenemos interes en ayudar o apoyar el robo. |
P: | ¿Cómo puedo iniciarme entonces? |
R: | La mejor manera para empezar probablemente es pasarte por un LUG ("Linux User Group", un grupo de usuarios de Linux local). Puedes encontrar grupos por ejemplo en la LDP General Linux Information Page; probablemente haya uno cerca de tu localidad, asociado con un colegio o universidad. Los miembros de los LUG probablemente te darán un Linux si lo pides, y ciertamente te ayudarán a instalarlo e iniciarte. |
P: | ¿Cuándo conviene empezar? ¿Es demasiado tarde para aprender? |
R: | Cualquier edad en la cual estés motivado para iniciarte es buena edad. La mayoría de la gente parece interesarse entre los 15 y 20 años, pero conozco excepciones en ambas direcciones. |
P: | ¿Cuánto tiempo me costará aprender a hackear? |
R: | Esto depende de tu talento y lo duro que trabajes. La mayoría de la gente puede adquirir un nivel de habilidad respetable a los dieciocho meses o dos años, si se concentran. Sin embargo, no creas que has finalizado ahí; si eres un hacker de verdad, te pasarás el resto de tu vida aprendiendo y perfecionando tu material. |
P: | ¿Son Visual Basic o C# buenos lenguajes para empezar? |
R: | No, porque no son portables. No hay ninguna implementación libre de esos lenguajes, así que estarías cerrándote solo a las plataformas a las que el fabricante decide dar soporte. Aceptar esta situacion de monopolio no es el camino del hacker. Visual Basic es especialmente tremendo. El hecho de que sea un lenguaje propiedad de Microsoft es suficiente para descalificarlo, y como otras versiones de Basic tiene un diseño pobre y te enseñará malos hábitos de programacion. Uno de esos malos hábitos es hacerte dependiente de las bibliotecas, módulos y herramientas de desarrollo procedentes de un solo fabricante. En general, cualquier lenguaje que no esté soportado bajo Linux o un de los BSDs, y/o cuando menos pueda ser ejecutado en 3 diferentes sistemas operativos, es un lenguaje deficiente para aprender a hackear. |
P: | ¿Me ayudarías a crackear un sistema, o me enseñarías cómo hacerlo? |
R: | No. Alguien que pregunta esto después de leer este documento es demasiado estúpido para poder ser instruido, incluso aunque tuviese tiempo para ello. Cualquier correo con este tipo de preguntas lo ignoraré o responderé con extrema rudeza. |
P: | ¿Cómo puedo obtener la contraseña de la cuenta de otra persona? |
R: | Eso es cracking. Desaparece, idiota. |
P: | ¿Cómo puedo acceder/leer/monitorizar el correo de otra persona? |
A: | Eso es cracking. Piérdete, imbécil. |
P: | ¿Cómo puedo robar privilegios de operador de canal en el IRC? |
A: | Eso es cracking. Fuera de aquí, cretino. |
P: | He sido crackeado. ¿Me ayudarás a defenderme de futuros ataques? |
R: | No. Todo el tiempo me han estado preguntando eso, se debe a la deficiente programación de Microsoft Windows. No es posible proteger a Windows de forma efectiva contra ataques de crackers; sencillamente, su código y su arquitectura tienen demasiados defectos. La unica prevención realizable consiste en cambiar a Linux o a algún otro sistema operativo que por lo menos esté diseñado para poder ser protegido. |
P: | Estoy teniendo problemas con mi Windows, ¿me ayudarás? |
R: | Sí. Ve a una línea de comandos de DOS y teclea: 'format c:'. Cualquier problema que estés experimentando, desaparecerá en pocos minutos. |
P: | ¿Dónde puedo encontrar hackers de verdad para charlar con ellos? |
R: | La mejor manera es encontrar un grupo de usuarios local de Unix or Linux e ir a sus reuniones (puedes encontrar links a varias listas de grupos de usuarios en el sitio de LDP en Metalab). (Antes solía decir que no encontrarías hackers reales en el IRC, pero estoy dándome cuenta que eso está cambiando. Al parecer algunas comunidades de hackers reales, vinculadas a cosas como GIMP y Perl, tienen canales de IRC ahora.) |
P: | ¿Me puedes recomendar libros útiles sobre hacking y temas relacionados? |
R: | Mantengo un Linux Reading List HOWTO que puedes encontrarlo útil. El Loginataka podría ser también interesante. Para una introducción a Python, echa un vistazo a los materiales introductorios en el sitio web de Python. |
P: | ¿Necesito ser bueno en matemáticas para llegar a ser un hacker? |
R: | No. Aunque necesitas ser capaz de pensar en términos lógicos y seguir cadenas de razonamiento exacto, el hacking usa muy poca matemática formal o aritmética. En particular, no necesitarás trigonometría, cálculo o análisis (eso se lo dejamos a los ingenieros electricos :-)). Algo de matemáticas finitas (incluyendo álgebra booleana, teoría de conjuntos finitos, combinatoria y teoría de grafos) puede ser útil. |
P: | ¿Qué lenguaje debería aprender primero? |
R: | XHTML (el dialecto más reciente de HTML) si todavía no lo sabes. Existe muchos muy malos libros de HTML afuera, y desafortunadamente solo algunos buenos. El que a mí me parece el mejor es HTML: The Definitive Guide. Pero HTML no es un lenguaje de programación completo. Cuando estés listo para empezar a programar, recomendaría empezar con Python. Escucharás a mucha gente que te recomiende Perl, y Perl es aún más popular que Python, pero es mas difícil de aprender y (en mi opinión) peor diseñado. C es realmente importante, pero es tambien mucho mas difícil que Python y Perl. No intentes aprenderlo primero. Usuarios de Windows: no os conforméis con Visual Basic. Os enseñará malos hábitos, y no es portable fuera de Windows. Evitadlo. |
P: | ¿Qué clase de hardware necesito? |
R: | Solía pasar que los ordenadores personales tenían pocas prestaciones y poca memoria, lo cual impuso límites artificiales en el proceso de aprendizaje de un hacker. Esto dejó de ser cierto hace algún tiempo; cualquier máquina de Intel 486DX50 o superior es lo suficientemente poderosa para el el trabajo de desarrollo, X y conexión a Internet, y los disquetes más pequeños que puedes comprar hoy son suficientes. Lo importante al escoger una máquina para aprender es si su hardware es compatible con Linux (o compatible con BSD). Esto vale también para las máquinas más modernas. La única cuestión complicada son los modems: algunas máquinas tiene hardware específico para Windows que no funciona con Linux. [Hay un sitio web llamado linmodems.org donde podrás determinar si, pese a ser un "winmodem", puedes conseguir que tu dispositivo funcione bajo GNU/Linux — N. del T.] Hay una FAQ acerca de la compatibilidad de hardware; la última versión está aquí. |
P:. | Deseo contribuir. ¿Puedes ayudarme a escoger un tema en el que trabajar? |
R:. | No, porque desconozco cuáles son tus talentos o intereses. Debes estar automotivado o no te dedicarás seriamente a ello, por eso casi nunca funciona que otras personas elijan por ti. Prueba esto. Mira los anuncios de Freshmeat durante algunos días. Cuando veas uno que te haga pensar: "¡Guay, me gustaría trabajar en eso!", únete. |
P: | ¿Necesito odiar y golpear a Microsoft? |
R: | No, no hace falta. Y no porque Microsoft no sea asqueroso, sino porque la cultura hacker existía mucho antes que Microsoft y seguirá existiendo aún largo tiempo después de que Microsoft sea historia. Cualquier energía que gastes odiando a Microsoft sería mejor empleada entusiasmándote con tus habilidades. Escribe buen código —esto será un golpe más duro para Microsoft y no requiere que ensucies tu karma. |
P: | ¿Pero no imposibilitará el software de fuente abierta ganarse la vida a los programadores? |
R: | Esto parece improbable —hasta ahora la industria de software de fuente abierta parece estar creando empleos más que quitándolos. Si tener un programa escrito en una economía de red gana sobre no tenerlo escrito, un programador será remunerado independientemente de si el programa va a ser código abierto después de realizado. Y no importa cuánto software "gratis" tienes escrito, parece que siempre habrá más demanda para aplicaciones nuevas y especializadas. He escrito más sobre esto en las páginas de Open Source. |
P: | P: ¿Cómo puedo iniciarme? ¿Dónde puedo obtener un Unix libre? |
R: | En otro lugar de esta página incluyo punteros a lugares donde puedes obtener el Unix libre más usado. Para ser un hacker necesitas motivación y la iniciativa y la habilidad para educarte por ti mismo. Empieza ahora... |