Sistema con convención en lugar de configuración

Algo que me gustaba mucho de los programas DOS era que podía copiar el directorio de un programa y moverlo a cualquier lugar, incluso a otro disco, y debía seguir funcionando.

Bueno, casi siempre. Con el tiempo empezaron a aparecer programas que tomaban nota de su ubicación y la de otros directorios y había que tomar en cuenta eso a la hora de intentar moverlos.

No me agrada mucho la idea de necesitar un programa de instalación para poder usar un programa. Porque los programas instalados suelen ser difíciles de mover o eliminar. Hay que usar programas intermediarios para hacer eso. Aparece una burocracia que no ayuda a hacer más simple el mantenimiento del sistema.

En cambio, me gustan los programas portables. Que simplemente se desempaquetan y ya están listos para usar. Puedo ubicarlos en cualquier lugar. Incluso puedo tener más de una copia y ejecutar cada una de ellas de modo diferente. Es más libre.

La tendencia de usar instaladores no solo está en Windows, también en Linux. En RedHat hay que manejar rpm. En CentOS es yum. En Debian/Ubuntu es apt-get. Son comandos útiles, pero me parece que son como buena medicina para tratar los síntomas causados por un diseño que podría ser mejor. Que hay cosas que pueden ser más sencillas. ¿Por qué no se puede colocar un programa en cualquier lugar que yo quiera? ¿Por qué no se puede tener varias copias del mismo programa, si yo quisiera? ¿Por qué no puedo usar un programa después de copiar simplemente su directorio, o deshacerme de él simplemente eliminándolo?

Entiendo que está la cuestión las bibliotecas de recursos compartidos. Pero, en este tiempo de abundancia de disco, ¿vale la pena complicar la administración sólo para evitar tener duplicados?. ¿No sería más simple que cada programa pudiera contener una copia de todos los recursos que requiere?

Quizás sería más fácil de usar y valdría la pena el gasto extra de disco. Opino que simplificaría el uso de programas y tal vez incluso la programación.

Sin embargo, si se requiere usar bibliotecas compartidas, se me ocurre un modo de lograrlo sin tener que usar instaladores. ¿Qué tal si usamos convención en lugar de configuración?

Un programa puede colocarse en un lugar y se ordena que se ejecute. Entonces, si requiere algún recurso, la ruta de búsqueda es 1) explorar primero si el recurso está en el mismo directorio que contiene el ejecutable, 2) explorar luego si el recurso está en el directorio padre, 3) explorar luego si el recurso está en el directorio padre del nivel anteriormente consultado... y así sucesivamente.

Así, un árbol de programas tiende a organizarse según niveles de prioridad. Los recursos básicos del sistema estarían en el primer nivel. Más adentro los drivers. Más adentro las bibliotecas. Más adentro los programas.

Puede ocurrir que haya un recurso compartido por varias aplicaciones y un grupo requiera una versión diferente que los demás. Entonces se crea una segunda rama de directorios, cada una con una versión diferente del recurso compartido y, más adentro, las respectivas aplicaciones dependientes de ellas.

Puede ser que dentro de los directorios diferentes hayan copias idénticas de los mismos recursos. Eso se podría optimizar usando enlaces simbólicos.

Pienso que sería interesante hacer una distribución Linux con esas características.

La idea también se puede aplicar en otros lugares, como el desarrollo web. Uno puede idear un framework que busque los recursos de manera similar, de modo que no es necesario usar archivos de configuración, simplemente seguir la convención y dejar que el flujo nos ayude.

Comentarios

Lee también

Cardumen de conocimientos

Email con más opciones

Polvos Virtuales

unobstrusive web dev

Los recuerdos ahí afuera, o la mente antena

TDD para educación

Imagino... imaginemos

Planificación e Impulso

Pintando como en el mundo real