Linus Torvalds ha cambiado la informática dos veces: primero con el núcleo Linux, que hoy funciona en la mayoría de los servidores de Internet, en todos los móviles Android y en todos los superordenadores de la lista TOP500, y después con Git, el sistema de control de versiones que usa casi cualquier programador del mundo. En 2016 dio una de sus pocas entrevistas en público, en el escenario de TED, con Chris Anderson.
La charla está en inglés. Se pueden activar los subtítulos en español desde el menú del vídeo.
Dos proyectos que empezaron como un apaño
El 25 de agosto de 1991, Torvalds, entonces estudiante de 21 años en la Universidad de Helsinki, publicó un mensaje en el grupo de noticias de Minix en el que anunciaba que estaba escribiendo un sistema operativo gratuito: «solo un hobby, no será grande y profesional como GNU». Lo hacía para su propio PC, porque quería un Unix en casa y no podía pagarlo. Publicó el código, otros empezaron a mandarle mejoras y, en pocos años, aquel hobby se convirtió en el núcleo de sistemas operativos de todo el mundo. Hoy reciben contribuciones miles de desarrolladores de cientos de empresas, y Torvalds sigue siendo quien decide qué entra en cada versión.
Git nació igual, por necesidad. Hasta 2005, el desarrollo de Linux usaba BitKeeper, una herramienta comercial que su empresa dejaba usar gratis al proyecto. Cuando esa licencia se retiró, Torvalds no encontró ninguna alternativa que le sirviera y escribió la suya en unas pocas semanas. A los pocos meses le pasó el mantenimiento a Junio Hamano, que sigue dirigiéndolo. Si quieres aprender a usarlo, tenemos una guía de Git.
«No soy un visionario, soy un ingeniero»
Es la frase central de la charla. Torvalds explica que no trabaja pensando en grandes planes de futuro: le parece bien que haya gente que mira las estrellas y dice «quiero ir allí», pero él prefiere mirar al suelo, porque, en sus palabras, quiere «arreglar el bache que tengo justo delante antes de caerme en él». Linux no salió de una visión de cambiar el mundo, sino de resolver un problema concreto detrás de otro durante décadas.
También reconoce que no es una persona sociable. Dice, medio en broma, que no le gusta especialmente la gente, pero sí la que se implica en su proyecto, y que el código abierto permite justamente eso: que personas muy distintas trabajen juntas sin necesidad de llevarse bien. Admite, además, que a veces no tiene en cuenta cómo se sienten los demás. Su estilo directo, y a veces muy duro, en la lista de correo del núcleo fue polémico durante años, y en 2018 él mismo se tomó un descanso para cambiar su forma de tratar a los demás desarrolladores.
El «buen gusto» en el código
La parte más comentada de la charla, sobre todo entre programadores, es un ejemplo de código en C. Torvalds enseña dos formas de quitar un elemento de una lista enlazada y dice que la segunda tiene buen gusto. La primera es la que aparece en muchos libros: recorre la lista recordando el nodo anterior y, al final, necesita un if porque quitar el primer elemento es un caso especial. La segunda no recuerda el nodo anterior, sino la dirección del enlace que hay que cambiar, sea el puntero al inicio de la lista o el campo sig de otro nodo. Así, el primer elemento deja de ser especial y el if desaparece.
#include <stdio.h>
struct nodo {
int valor;
struct nodo *sig;
};
/* Versión habitual: el primer nodo es un caso especial. */
void quitar_v1(struct nodo **cabeza, struct nodo *objetivo) {
struct nodo *prev = NULL, *act = *cabeza;
while (act != objetivo) {
prev = act;
act = act->sig;
}
if (prev == NULL)
*cabeza = act->sig; /* era el primero */
else
prev->sig = act->sig; /* estaba en medio o al final */
}
/* Versión «con buen gusto»: un puntero al enlace que hay que cambiar. */
void quitar_v2(struct nodo **cabeza, struct nodo *objetivo) {
struct nodo **enlace = cabeza;
while (*enlace != objetivo)
enlace = &(*enlace)->sig;
*enlace = objetivo->sig; /* sin casos especiales */
}
static void imprimir(const char *t, struct nodo *n) {
printf("%-24s", t);
for (; n; n = n->sig) printf(" %d", n->valor);
printf("\n");
}
int main(void) {
for (int v = 1; v <= 2; v++) {
struct nodo c = {3, NULL}, b = {2, &c}, a = {1, &b};
struct nodo *lista = &a;
void (*quitar)(struct nodo **, struct nodo *) = v == 1 ? quitar_v1 : quitar_v2;
printf("-- versión %d\n", v);
imprimir("lista:", lista);
quitar(&lista, &a); imprimir("quitar el 1 (primero):", lista);
quitar(&lista, &c); imprimir("quitar el 3 (final):", lista);
}
return 0;
}gcc -std=c11 -Wall -Wextra -o lista lista.c && ./lista-- versión 1 lista: 1 2 3 quitar el 1 (primero): 2 3 quitar el 3 (final): 2 -- versión 2 lista: 1 2 3 quitar el 1 (primero): 2 3 quitar el 3 (final): 2
Las dos versiones dan el mismo resultado, pero la segunda tiene la mitad de líneas y ningún caso especial que probar por separado. Para Torvalds, el buen gusto consiste en «ver los patrones grandes» y saber casi por instinto cuál es la forma correcta de hacer las cosas: mirar el problema desde otro ángulo hasta que el caso especial deja de existir, en lugar de añadir más condiciones para cubrirlo. No es una cuestión de estética, sino de errores: cada if que desaparece es un camino menos donde puede haber un fallo.
Por qué sigue siendo relevante
Más de treinta años después de aquel mensaje, Linux sigue saliendo cada nueve o diez semanas con una versión nueva, y Torvalds sigue revisando lo que entra. Entretanto, el núcleo ha empezado a admitir código en Rust junto al C de siempre, y Git se ha convertido en la base de plataformas como GitHub o GitLab. Pocas personas han tenido tanta influencia en cómo se escribe y se comparte el software, y su receta, según él mismo, es poco espectacular: resolver bien el problema que tienes delante.
Fuente: «The mind behind Linux», Linus Torvalds en conversación con Chris Anderson, TED2016, y crónica de la charla en Linux.com. El ejemplo de la lista enlazada se compiló y ejecutó con gcc 14.2.