

Discover more from La Naturaleza del Software
Recientemente ha vuelto a emerger una historia contada por Rob Pike, hace años en el extinto Google+.
Rob Pike es conocido por ser uno de los creadores del lenguaje Go y fue integrante del famoso grupo que trabajó en Bell Labs desarrollando sistemas operativos, como Unix y Plan 9.. Además fue co autor con Brian Kernighan del libro que siempre recomiendo a quienes se inician en el desarrollo de software: The Practice of Programming.
La historia que nos relata Rob Pike nos muestra como los famosos archivos ocultos en Unix fueron en realidad un error.
Para los que no lo saben, en Unix y cualquier sistema operativo derivado, los archivos que empiezan con un punto (‘.’) están ocultos, es decir, si ejecutas un comando como `ls` entonces no veras esos archivos. Eso se ha extendido a herramientas gráficas, como el finder de MacOs por ejemplo.
Lo que nos cuenta Rob Pike en su post
es que originalmente los autores de Unix no querían mostrar los archivos ‘.’ y ‘..’, que tienen un significado especial, ‘.’ representa el directorio actual, y ‘..’ representa el directorio padre.El código original estaba en assembler, pero esencialmente lo que se implementó fue algo como esto en C:
if (name[0] == '.') continue;
Cuando en realidad debieron implementar algo como esto:
if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;
Pero el primer código era más rápido y sencillo (sobretodo si estaba en assembler).
El problema es que creo una cadena de consecuencias que derivaron en que muchos usuarios de Unix se dieron cuenta que si el nombre de su archivo empezaba con un punto, entonces no era mostrado por las herramientas estándares. Posteriormente se tuvo que agregar parámetros opcionales (-a y -A) a estas herramientas para poder visualizar esos archivos, lo que llevó a esta “feature” de los archivos ocultos.
La pregunta que se hace Pike es cuántos ciclos de CPU, errores, y horas de frustración se originaron a partir de este atajo. Recuerdo uno de los casos más perniciosos de abuso de este feature está en SVN que nos llenaba de archivos .svn, u otro caso en Mac, con sus infames archivos .DS_Store.
Alguno dirá que los archivos ocultos son útiles, porque clásicamente han sido usados para guardar configuraciones, pero el contraargumento es que es el archivo en si mismo el que es útil, no la convención de nombres. Y para demostrarlo, Pike explica que en Plan 9, en donde estos archivos pueden ser almacenados en $HOME/cfg o $HOME/lib.
Así que ojo con los atajos en el código, pueden llevar a características imprevistas que pueden ser usadas y abusadas por los usuarios u otros desarrolladores.
El post original se ha perdido porque estaba en la plataforma Google+ que fue descontinuada por Google, así que lo que tenemos hoy es un respaldo.
Una lección sobre los atajos
De repente (accidentally) worse is better? También existe .git/ y no sé si eso puedes llevartelo a $HOME/whatever. Les fue mejor con Unix que con Plan9.
Tambén pasa que en muchos SOs igual existe el atributo "hidden" para archivos que se quiere que existan pero no sean (tan) visibles.