LOS JÓVENES ESTADOUNIDENSES que dejan su gran país homogéneo y visitan otra parte del mundo típicamente sufren varios grados de shock cultural: primero, inmenso asombro. Luego, un acercamiento tentativo a las costumbres, cocina, sistemas públicos de circulación y retretes del nuevo país, lo cual lleva a un breve periodo de confianza fatua en que son expertos instantáneos en el nuevo país. A medida que continúa la visita, empieza la morriña y el viajero empieza a apreciar, por primera vez, cuánto daba por sentado en casa. Al mismo tiempo, empieza a resultar obvio que las propias culturas y tradiciones son esencialmente arbitrarias: conducir por la derecha, por ejemplo. Cuando el viajero vuelve a casa y hace balance de la experiencia, puede haber aprendido bastante más sobre los Estados Unidos que sobre el país que fueron a visitar.
Por los mismos motivos, merece la pena probar Linux. Ciertamente, es un país extraño, pero no hay por qué vivir ahí; una breve estancia basta para experimentar el gusto del lugar y --lo que es más importante-- revelar todo lo que se da por sentado, y todo lo que se podría haber hecho de modo distinto, en Windows o MacOS.
No se puede probar sin instalarlo. Con cualquier otro sistema operativo, instalarlo sería una transacción sencilla: a cambio de dinero, una compañía te daría un CD-ROM, y ya está. Pero hay un montón de cosas subsumidas bajo ese tipo de transacción, y hay que verlas y diferenciarlas.
En Estados Unidos nos gustan los tratos simples y las transacciones sin complicaciones. Si vas a Egipto y, pongamos, tomas un taxi en algún sitio, te conviertes en parte de la vida del taxista; se niega a aceptar tu dinero porque rebajaría vuestra amistad, te sigue por la ciudad y llora como un crío cuando te metes en el taxi de otro. Acabas por conocer a sus hijos en algún momento y tienes que ingeniártelas para hallar algún modo de compensarle sin insultar su honor. Es agotador. A veces simplemente quieres tomar un taxi como en Manhattan.
Pero para tener un sistema de estilo estadounidense, en el que puedes salir, parar un taxi y ya está, tiene que haber todo un aparato de licencias, inspectores, comisiones, etc., lo cual está muy bien siempre que los taxis sean baratos y siempre que puedas llamar a uno. Cuando el sistema no funciona de alguna manera, resulta misterioso y enervante y convierte a personas habitualmente razonables en teóricos de la conspiración. Pero cuando el sistema egipcio se viene abajo, se viene abajo de forma transparente. No puedes tomar un taxi, pero aparecerá el sobrino del taxista, a pie, para explicarte el problema y disculparse.
Microsoft y Apple hacen las cosas al estilo de Manhattan, con una vasta complejidad oculta tras el muro de la interfaz. Linux hace las cosas al estilo de Egipto, con una vasta complejidad desperdigada por todo el paisaje. Si acabas de llegar de Manhattan, tu primer impulso será llevarte las manos a la cabeza diciendo: «¡Esto es de locos! ¿Por qué narices no os comportáis como es debido?» Pero esto no te granjearía más amigos en Linuxlandia que en Egipto.
Se puede extraer Linux del aire mismo, por así decir, descargando los archivos adecuados y poniéndolos en los lugares adecuados, pero posiblemente no más de unos pocos cientos de personas en el mundo podrían crear un sistema Linux funcional de ese modo. Lo que realmente se necesita es una distribución de Linux, lo cual quiere decir un conjunto preempaquetado de archivos. Pero las distribuciones son una cosa distinta de Linux per se.
Linux per se no es un conjunto específico de unos y ceros, sino
una subcultura autoorganizada de la Red. El resultado final de sus
elucubraciones colectivas es un vasto cuerpo de código fuente, casi todo
escrito en C (el lenguaje de programación dominante). El código fuente
es sencillamente un programa de ordenador escrito y editado por algún
hacker. Si está en C, el nombre del archivo probablemente llevará
.c
o
.cpp
al final, dependiendo del dialecto empleado; si está en otro
lenguaje llevará otro sufijo. A menudo, este tipo de archivos pueden
encontrarse en un directorio con el nombre /src, que es la
abreviatura hebraica del hacker para source, «fuente».
Los archivos fuente son inútiles para el ordenador, y de poco interés para la mayoría de usuarios, pero tienen una enorme significación cultural y política, porque Microsoft y Apple los mantienen en secreto, mientras que Linux los hace públicos. Son las joyas de la familia. Son el tipo de cosa que en los thrillers de Hollywood se usa como McGuffin: el núcleo de la bomba de plutonio, los planos de alto secreto, el maletín lleno de documentos financieros, el microfilm. Si los archivos fuente de Windows o MacOS se hicieran públicos en la Red, esos sistemas operativos se volverían gratuitos, como Linux --sólo que no tan buenos, porque no habría nadie para arreglar los fallos y responder a las preguntas--. Linux es software de fuente abierta,1 lo cual sencillamente quiere decir que cualquiera puede obtener copias de sus archivos de código fuente.
Un ordenador no necesita código fuente más de lo que lo necesita usted:
necesita «código objeto». Los archivos de código objeto típicamente
llevan el sufijo .o
y son ilegibles para todo el mundo salvo
unos pocos humanos altamente extraños, porque consisten en unos y ceros.
En consecuencia, este tipo de archivo normalmente aparece en un
directorio con el nombre /bin
, por binario.
Los archivos fuente son sencillamente archivos de texto ASCII. ASCII denota un modo particular de codificar las letras en patrones de bits. En un archivo ASCII, cada carácter tiene ocho bits para él solito. Esto crea un alfabeto potencial de 256 caracteres distintos, dado que ocho dígitos binarios pueden formar ese número de patrones únicos. En la práctica, por supuesto, nos limitamos a las letras y dígitos familiares. Los patrones de bits empleados para representar esas letras y dígitos son los mismos que se introducían físicamente agujereando la cinta de papel de mi teletipo del instituto, que a su vez eran los mismos que había usado antes la industria telegráfica durante décadas. Los archivos de texto ASCII, en otras palabras, son telegramas, y como tales no tienen adornos tipográficos. Pero por eso mismo son eternos, porque el código nunca cambia, y universales, porque todo el software de edición y procesamiento de textos existente conoce este código.
Por tanto, se puede usar cualquier software para crear, editar o leer archivos de código fuente. Los archivos de código objeto, entonces, son creados a partir de estos archivos fuente por un software llamado compilador, y son convertidos en una aplicación funcional por otro software llamado enlazador.
La tríada de editor, compilador y enlazador, tomados juntos, constituye el núcleo de un sistema de desarrollo de software. Ahora es posible gastarse un montón de dinero en sistemas de desarrollo envueltos en plástico, con preciosas interfaces gráficas de usuario y diversas mejoras ergonómicas. En algunos casos puede que hasta resulte un modo bueno y razonable de gastar el dinero. Pero en este lado de la carretera, por así decir, el mejor software es a menudo el gratuito. Editor, compilador y enlazador son a los hackers lo que ponies, estribos y arcos y flechas eran a los mongoles. Los hackers viven a caballo, y hackean sus propias herramientas incluso mientras las usan para crear nuevas aplicaciones. Resulta bastante inconcebible que herramientas superiores de hacking pudieran haber sido creadas en una hoja en blanco por ingenieros informáticos. Incluso aunque fueran los ingenieros más inteligentes del mundo, se verían sencillamente superados.
En el mundo de GNU/Linux hay dos grandes programas de edición
de textos: el minimalista vi
(conocido en algunas
implementaciones como elvis
) y el maximalista
emacs
. Yo uso emacs
, que puede considerarse un
procesador de textos termonuclear. Fue creado por Richard Stallman, y
con esto ya está todo dicho. Está escrito en LISP, que es el
único lenguaje de ordenador que es hermoso. Es colosal, y sin embargo
sólo edita archivos de texto ASCII, lo cual significa: nada de
fuentes, nada de negrita, nada de subrayado. En otras palabras, las
horas que dedicaron los ingenieros, en el caso de Windows, a cosas como
la fusión de correo y la capacidad de incrustar películas de dos horas
en memorandos de empresa, se dedicaron, en el caso de emacs
, con
intensidad maníaca al engañosamente simple problema de editar texto. Si
eres un escritor profesional --esto es, si otra persona está siendo
pagada para preocuparse de cómo se formatean e imprimen tus palabras--
emacs
hace sombra a cualquier otro software de edición más o menos del
mismo modo que el sol de mediodía hace sombra a las estrellas. No sólo
es mayor y más luminoso: sencillamente hace que todo lo demás se
desvanezca. Para el formateo y la impresión de la página se puede usar
TEX: un vasto corpus de ciencia tipográfica escrito en C y también
disponible en la Red gratuitamente.2
Podría decir un montón de cosas sobre emacs
y TEX, pero ahora mismo
trato de contar una historia acerca de cómo instalar de hecho Linux en
el ordenador. El enfoque de pura supervivencia sería descargarse un
editor como emacs
y las herramientas GNU --el compilador y el
enlazador- que son tan pulidas y elegantes como emacs
. Equipado con
esto, uno ya puede empezar a descargar archivos de código fuente
ASCII (/src
) y a compilarlos en archivos de código
objeto binario (/bin
) ejecutables por el ordenador. Pero para llegar
siquiera a este punto --para ejecutar emacs
, por ejemplo-- hay que
tener Linux instalado y funcionando en el ordenador. E incluso un
sistema operativo mínimo de Linux requiere miles de archivos binarios
actuando en concierto, dispuestos y vinculados para que lo hagan.
Por tanto, diversas entidades se han ocupado de crear distribuciones de Linux. Por extender algo más la analogía con Egipto, estas entidades se parecen algo a los guías turísticos que te reciben en el aeropuerto, hablan tu idioma y te ayudan con el shock cultural inicial. Si uno es egipcio, claro, se puede ver del otro modo; los guías turísticos existen para evitar que los brutos extranjeros se metan en las mezquitas haciendo las mismas preguntas una y otra y otra vez.3
Algunos de estos guías turísticos son organizaciones comerciales, como Red Hat Software, fabricante de una distribución llamada Red Hat, que tiene un cierto aire comercial. En la mayoría de casos metes un CD-ROM de Red Hat en el PC, lo inicias y él solito maneja todo lo demás. Así como el guía turístico egipcio esperará algún tipo de compensación por sus servicios, hay que pagar por las distribuciones comerciales. En la mayoría de los casos no cuestan casi nada y merece la pena.
Yo uso una distribución llamada Debian4 (la palabra es una contracción de «Deborah» e «Ian»), que es no-comercial. Está organizada (o más bien debiera decir «se ha organizado») siguiendo las mismas líneas que Linux en general, esto es, consiste en voluntarios que colaboran en la Red, cada uno responsable de cuidar de un pedazo distinto del sistema. Estas personas han dividido Linux en diversos paquetes, que son archivos comprimidos que pueden descargarse a un sistema Linux de Debian ya en funcionamiento, luego se abren y descomprimen usando una aplicación de instalación libre. Por supuesto, como tal, Debian no tiene rama comercial --no tiene mecanismo de distribución--. Se pueden descargar todos los paquetes de Debian por Internet, pero la mayoría de la gente prefiere tenerlos en CD-ROM. Diversas compañías se han ocupado de meter todos los actuales paquetes de Debian en CD-ROM y venderlos. Yo compré el mío de Linux Systems Labs. Un conjunto de tres discos, que contenía Debian completo, me costó menos de tres dolares. Pero (y esta es una distinción importante) ni un centavo de esos tres dólares va a parar a ninguno de los programadores que codificaron Linux, ni a los empaquetadores de Debian. Va a parar a Linux Systems Labs y no paga el software ni los paquetes, sino el coste de imprimir los CD-ROM.
Toda distribución de Linux encarna algún truco más o menos astuto para evitar el proceso normal de encendido y hacer que cuando el ordenador arranque se organice no como un PC ejecutando Windows, sino como un host5que ejecuta Unix. Esto resulta algo alarmante la primera vez que se ve, pero es completamente inofensivo. Cuando se inicia un PC, lleva a cabo una pequeña autocomprobación de rutina, realizando un inventario de los discos y memoria disponibles, y luego empieza a buscar un disco desde el que arrancar. En cualquier ordenador Windows normal, ese disco será el disco duro. Pero si el sistema está bien configurado, primero buscará un disquete o un disco de CD-ROM, y arrancará a partir de uno de estos si están disponibles.
Linux explota esta rendija en las defensas. El ordenador percibe un disco de inicio en la disquetera o en la unidad de CD-ROM, carga el código objeto de ese disco y ciegamente empieza a ejecutarlo. Pero no es código de Microsoft o Apple, es código Linux, así que en este punto el ordenador se empieza a comportar de un modo muy distinto al acostumbrado. Empiezan a aparecer mensajes crípticos en pantalla. Si se hubiera iniciado desde un sistema operativo comercial, en este momento se vería un dibujito de «Bienvenido a MacOS», o una pantalla llena de nubes en el cielo azul y el logo de Windows. Pero con Linux aparece un largo telegrama impreso en crudas letras blancas en una pantalla negra. No hay ningún mensaje de bienvenida. La mayor parte del telegrama tiene el semiescrutable aire amenazante de los graffitis:
Dec 14 15:04:15 theRev syslogd 1.3-3#17: restart. Dec 14 15:04:15 theRev kernel: klogd 1.3-3, log source = /proc/kmsg started. Dec 14 15:04:15 theRev kernel: Loaded 3535 symbols from /System.map. Dec 14 15:04:15 theRev kernel: Symbols match kernel version 2.0.30 Dec 14 15:04:15 theRev kernel: No module symbols loaded. Dec 14 15:04:15 theRev kernel: Intel MultiProcessor Specification v1.4 Dec 14 15:04:15 theRev kernel: Virtual Wire compatibility mode. Dec 14 15:04:15 theRev kernel: OEM ID: INTEL Product ID: 440FX APIC at: 0xFEE00000 Dec 14 15:04:15 theRev kernel: Processor #0 Pentium(tm) Pro APIC version 17 Dec 14 15:04:15 theRev kernel: Processor #1 Pentium(tm) Pro APIC version 17 Dec 14 15:04:15 theRev kernel: I/O APIC #2 Version 17 at 0xFEC00000. Dec 14 15:04:15 theRev kernel: Processors: 2 Dec 14 15:04:15 theRev kernel: Console: 16 point font, 400 scans Dec 14 15:04:15 theRev kernel: Console: colour VGA+ 80x25, 1 virtual console (max 63) Dec 14 15:04:15 theRev kernel: pcibios_init : BIOS32 Service Directory structure at 0x000fdb70 Dec 14 15:04:15 theRev kernel: pcibios_init : BIOS32 Service Directory entry at 0xfdb80 Dec 14 15:04:15 theRev kernel: pcibios_init : PCI BIOS revision 2.10 entry at 0xfdba1 Dec 14 15:04:15 theRev kernel: Probing PCI hardware. Dec 14 15:04:15 theRev kernel: Warning : Unknown PCI device (10b7:9001). Please read include/linux/pci.h Dec 14 15:04:15 theRev kernel: Calibrating delay loop.. ok - 179.40 BogoMIPS Dec 14 15:04:15 theRev kernel: Memory: 64268k/66556k available (700k kernel code, 384k reserved, 1204k data) Dec 14 15:04:15 theRev kernel: Swansea University Computer Society NET3.035 for Linux 2.0 Dec 14 15:04:15 theRev kernel: NET3: Unix domain sockets 0.13 for Linux NET3.035. Dec 14 15:04:15 theRev kernel: Swansea University Computer Society TCP/IP for NET3.034 Dec 14 15:04:15 theRev kernel: IP Protocols: ICMP, UDP, TCP Dec 14 15:04:15 theRev kernel: Checking 386/387 coupling... Ok, fpu using exception 16 error reporting. Dec 14 15:04:15 theRev kernel: Checking 'hlt' instruction... Ok. Dec 14 15:04:15 theRev kernel: Linux version 2.0.30 (root@theRev) (gcc version 2.7.2.1) #15 Fri Mar 27 16:37:24 PST 1998 Dec 14 15:04:15 theRev kernel: Booting processor 1 stack 00002000:Calibrating delay loop.. ok - 179.40 BogoMIPS Dec 14 15:04:15 theRev kernel: Total of 2 processors activated (358.81 BogoMIPS). Dec 14 15:04:15 theRev kernel: Serial driver version 4.13 with no serial options enabled Dec 14 15:04:15 theRev kernel: tty00 at 0x03f8 (irq = 4) is a 16550A Dec 14 15:04:15 theRev kernel: tty01 at 0x02f8 (irq = 3) is a 16550A Dec 14 15:04:15 theRev kernel: lp1 at 0x0378, (polling) Dec 14 15:04:15 theRev kernel: PS/2 auxiliary pointing device detected -- driver installed. Dec 14 15:04:15 theRev kernel: Real Time Clock Driver v1.07 Dec 14 15:04:15 theRev kernel: loop: registered device at major 7 Dec 14 15:04:15 theRev kernel: ide: i82371 PIIX (Triton) on PCI bus 0 function 57 Dec 14 15:04:15 theRev kernel: ide0: BM-DMA at 0xffa0-0xffa7 Dec 14 15:04:15 theRev kernel: ide1: BM-DMA at 0xffa8-0xffaf Dec 14 15:04:15 theRev kernel: hda: Conner Peripherals 1275MB - CFS1275A, 1219MB w/64kB Cache, LBA, CHS=619/64/63 Dec 14 15:04:15 theRev kernel: hdb: Maxtor 84320A5, 4119MB w/256kB Cache, LBA, CHS=8928/15/63, DMA Dec 14 15:04:15 theRev kernel: hdc: , ATAPI CDROM drive Dec 15 11:58:06 theRev kernel: ide0 at 0x1f0-0x1f7,0x3f6 on irq 14 Dec 15 11:58:06 theRev kernel: ide1 at 0x170-0x177,0x376 on irq 15 Dec 15 11:58:06 theRev kernel: Floppy drive(s): fd0 is 1.44M Dec 15 11:58:06 theRev kernel: Started kswapd v 1.4.2.2 Dec 15 11:58:06 theRev kernel: FDC 0 is a National Semiconductor PC87306 Dec 15 11:58:06 theRev kernel: md driver 0.35 MAX_MD_DEV=4, MAX_REAL=8 Dec 15 11:58:06 theRev kernel: PPP: version 2.2.0 (dynamic channel allocation) Dec 15 11:58:06 theRev kernel: TCP compression code copyright 1989 Regents of the University of California Dec 15 11:58:06 theRev kernel: PPP Dynamic channel allocation code copyright 1995 Caldera, Inc. Dec 15 11:58:06 theRev kernel: PPP line discipline registered. Dec 15 11:58:06 theRev kernel: SLIP: version 0.8.4-NET3.019-NEWTTY (dynamic channels, max=256). Dec 15 11:58:06 theRev kernel: eth0: 3Com 3c900 Boomerang 10Mbps/Combo at 0xef00, 00:60:08:a4:3c:db, IRQ 10 Dec 15 11:58:06 theRev kernel: 8K word-wide RAM 3:5 Rx:Tx split, 10base2 interface. Dec 15 11:58:06 theRev kernel: Enabling bus-master transmits and whole-frame receives. Dec 15 11:58:06 theRev kernel: 3c59x.c:v0.49 1/2/98 Donald Becker http://cesdis.gsfc.nasa.gov/linux/drivers /vortex.html Dec 15 11:58:06 theRev kernel: Partition check: Dec 15 11:58:06 theRev kernel: hda: hda1 hda2 hda3 Dec 15 11:58:06 theRev kernel: hdb: hdb1 hdb2 Dec 15 11:58:06 theRev kernel: VFS: Mounted root (ext2 filesystem) readonly. Dec 15 11:58:06 theRev kernel: Adding Swap: 16124k swap-space (priority -1) Dec 15 11:58:06 theRev kernel: EXT2-fs warning: maximal mount count reached, running e2fsck is recommended Dec 15 11:58:06 theRev kernel: hdc: media changed Dec 15 11:58:06 theRev kernel: ISO9660 Extensions: RRIP_1991A Dec 15 11:58:07 theRev syslogd 1.3-3#17: restart. Dec 15 11:58:09 theRev diald[87]: Unable to open options file /etc/diald/diald.options: No such file or directory Dec 15 11:58:09 theRev diald[87]: No device specified. You must have at least one device! Dec 15 11:58:09 theRev diald[87]: You must define a connector script (option 'connect'). Dec 15 11:58:09 theRev diald[87]: You must define the remote ip address. Dec 15 11:58:09 theRev diald[87]: You must define the local ip address. Dec 15 11:58:09 theRev diald[87]: Terminating due to damaged reconfigure.
Las únicas partes de esto que resultan legibles para las personas normales son los mensajes de error y las advertencias. Y sin embargo, es notable que Linux no se detiene, o se viene abajo, cuando encuentra un error; escupe un gemido quejumbroso, abandona los procesos dañados, y sigue adelante. Decididamente, esto no era así en las primeras versiones de los sistemas operativos de Apple y Microsoft, por el sencillo motivo de que un sistema operativo que no es capaz de andar y mascar chicle a la vez no puede recobrarse de los errores. Buscar y solucionar errores requiere un proceso aparte que corra en paralelo al que ha fallado. Una especie de superego, si lo prefieren, que mantiene vigilados a los demás y entra en acción cuando uno se desvía. Ahora que MacOS y Windows pueden hacer más de una cosa a la vez se les da mucho mejor tratar con los errores que antes, pero no se aproximan siquiera a Linux o los demás sistemas Unix en este aspecto; y su mayor complejidad les ha hecho vulnerables a nuevos tipos de error.