Es una pregunta que actualmente me hago todos los días. Pero esto no siempre fue así, durante la mayor parte de mi vida cada que alguna interfaz gráfica se quedaba patinando yo simplemente lo aceptaba, hacía mi mejor intento para arreglarlo (reiniciar la aplicación) y si eso no lo enmendaba, pues entonces aceptaba mi destino siguiendo esa sugerencia genérica que hoy tanto detesto de «Intente de nuevo más tarde».
Selfhosting
Eso empezó a cambiar cuando me adentré al selfhosting, pues ello significó un cambio de paradigma en mi forma de entender el software; pasé de concebirlo como una herramienta arcana de la que no estaba muy seguro de cómo funcionaba a una máquina con paredes transparentes a la cual se le veían todas las partes internas no por accidente, sino por diseño, pues para usarla correctamente comprender el cómo trabaja no es opcional, es el requisito mínimo a menos que quieras perder toda la información de tu familia.
Por supuesto esta visión no terminó de cuajar hasta mucho tiempo después, durante las primeras semanas simplemente me tenías ahí, sentado frente a la computadora con la sesión de ssh abierta sin estar muy seguro de qué hacer con ella. Mentiría si dijera que me las arreglé solo durante esos meses de aprendizaje, la verdad es que prácticamente fungía de intermediario entre la línea de comandos y ChatGPT, no me da vergüenza admitirlo.
Evidentemente, fue esa fase en la que más errores cometí (sin irnos muy
lejos, comprar una computadora arm como mi primer NAS), entonces la pregunta
apareció en mi cabeza por primera vez: ¿Por qué esta pendejada sigue
fallando? durante muchos meses fue mi culpa el 100% de las veces (hoy se
acerca más al 70%), por lo que la solución siempre radicaba en corregir algún
error en un archivo de configuración enterrado en /etc/.
Entrados los meses en el selfhosting, me sentí con la confianza de migrar mi escritorio y mi laptop a Linux Mint. Recuerdo muy bien la primera experiencia instalando el sistema operativo en esas dos máquinas, tardé más descargando y flasheando la ISO en el USB que efectuando la instalación como tal. En ambas ocasiones, al bootear en Cinammon recuerdo experimentar un sentimiento de aburrimiento, como pensando «¿Es neta, así de fácil?». Y la respuesta a esa pregunta era un rotundo «Sí, así de fácil», hasta que me enfrenté con la primera roca.
Fragmentación
El escritorio de linux está fragmentado, eso no es un secreto para absolutamente nadie que lleve más de un mes en él, digo esa cantidad de tiempo porque fue lo que me tomó a mí darme cuenta que el hecho de que en un sistema dado haya tres formas distintas para instalar una aplicación es en sí mismo una forma en la que el software falla; la experiencia de usuario falla, y eso que ni siquiera me adentré sino hasta mucho después en los confines de comprender las diferencias entre formatos de empaquetados.
Entonces allí estaba yo, decidiendo si debía descargar la AppImage de Obsidian,
instalarlo a través de apt como venía acostumbrado de mi servidor o hallar la
forma de activar esta cosa rara llamada «flatpak» en mi computadora. La
primera vez que supe de Snap fue de un post de reddit diciendo lo mierda que
era, así que por lo menos me salvé de esa parte de la fragmentación.
Fue en ese momento cuando me pregunté: ¿Por qué hay tantas formas de hacer la misma pendejada? La respuesta no me satisfizo, todo lo contrario, fue mi primer acercamiento al dependency hell (de manera puramente teórica, por suerte) y entonces volvió a surgir la pregunta: ¿Por qué esto sigue siendo un problema? ¿Cómo es posible que todos están de acuerdo en un estándar que se presta tanto a los conflictos entre librerías compartidas? Una pregunta soberbia, aunque venía de un lugar de legítima frustración ante mi imposiblidad de saber qué decisión tomar con respecto a cómo instalar Obsidian en ese momento.
El regreso
Hasta ahora mis problemas habían sido exclusivamente con linux, tardé unos cuantos meses en Mint, hasta que decidí migrar Arch, pero todo eso se vino abajo cuando, y hasta me da risa admitir esto, fue necesario usar un programa para presentar examenes en la escuela que, por supuesto que no funcionaba con linux.
Entonces me vi obligado a instalar Windows 10 en el disco duro secundario de mi computadora. Para ese punto llevaba unos cuatro meses usando Arch + Gnome en mis computadoras, recuerdo que el primer choque en cuanto a experiencia de usuario fue darme cuenta de lo mucho que tardó Brave en abrir (afortunadamente puedo decir que me curé y ahora uso Librewolf), aproximadamente diez segundos después de que el escritorio terminara de renderizarse.
La experiencia fue más o menos consistente a partir de allí, aplicaciones que tardaban en responder, configuraciones sepultadas en mil menus distintos sin lógica alguna, un explorador de archivos como para avergonzarse, una búsqueda en el menú que te enviaba a Microsoft Edge el 99% de las veces… y la lista podría seguir hasta el momento en el que reinicié mi computadora para volver a bootear en Arch.
Genuinamente no quería abordar mi regreso a Windows con la actitud pedante que tanto detestaba que la gente tomara en línea, pero es que el contraste de responsividad del sistema era una cuestión de día y noche, simplemente no podía evitar preguntarme cómo es que había vivido tanto tiempo usando mi computadora a esa velocidad inaceptable.
Mientras quedaba asombrado de la ineptitud de Microsoft, me preguntaba ¿por qué esto sigue fallando? ¿Cómo es posible que un sistema operativo con tantos años de desarrollo y tanta iteraciones siga siendo tan acartonado de utilizar? Pero aún no era capaz de encontrar la respuesta, o al menos una que me dejara la duda tranquila.
Para ser honesto, hasta ese punto pensaba que el problema es que me había pasado, tanto meterme en el mundo del código abierto me había hecho tocar fondo en la calidad de las herramientas que agregaba a mi día a día, pero volver a tocar pasto me hizo darme cuenta que la situación era todo lo contrario, el haberme ido tan al fondo me había permitido diversificar mis experiencias en el mundo del software, lo cual hizo que, evidentemente me topara con absolutos trozos de mierda, pero también con el caviar del mundo digital, el cual estuvo en manos de la comunidad en la totalidad de las ocasiones en las que tuve el gusto de topármelo.
¿Por qué, chingada madre, por qué?
Hasta este punto, los malos ratos con el software se podían reducir a una carencia en el diseño de la experiencia de usuario, y es una respuesta que me calmó la duda por mucho tiempo.
¿Por qué el software sigue fallando? — Porque diseñar experiencias de usuario es difícil.
Hasta que un día inicié sesión en mi instalación de Arch y, sin razón aparente, la CPU estaba al máximo de utilización, Hyprland iba a medio fotograma por segundo y a duras penas logré apagar la computadora para bootear en el instalador de NixOS y finalmente escapar de la inestabilidad hecha distro.
NixOS
Es aquí cuando llegué a la respueta que estaba buscando. Comencé a oir hablar de Nix casi en el segundo uno que me cambié a Arch, como esta distribución que era el endgame de linux, lo que los verdaderos desarrolladores usan, inserte pendejada que algún redditor se inventó para alimentar su ego. Pero una vez que mi pequeño cerebro de novato pudo comprender una fracción de lo que NixOS permitía, entendí que eso era el máximo teórico en cuestión de inestabilidad, quiero decir, ¿cómo puedes ser más estable que un lenguaje diseñado desde las bases para ser completamente determinista? Si la idea es ejecutada apropiadamente, no se puede apuntar a más, al menos a como yo veo las cosas.
Entonces lo instalé sin haber escrito una sola línea de Nix en mi vida.
El golpe fue masivo, lo sentí hasta mis entrañas. «No hay problema, solo tengo que consultar la documentación«, pensé confiadamente, pues venía del mundo de Arch, respaldado por lo que es posiblemente la mejor wiki de todo internet.
Entonces choqué con pared, o como también le llaman: la documentación de Nix. Es horrible, simplemente horrible. Partiendo por el simple hecho de que hay dos wikis distintas: nixos.wiki y wiki.nixos.org, las cuales son, de manera simultánea, activamente mantenidas, excepto que por dos equipos distintos y, por consiguiente, dos visiones distintas.
Además de eso, conforme más me fui adentrando al lenguaje, se sintió como
volver una vez más al dilema de apt vs flatpak vs AppImage, porque
existían al menos tres formas distintas de hacer las cosas, sin un lugar claro
al cual apuntar cuando surgía la duda razonable de: ¿cuál es la diferencia
entre cada una? Todos tienen su propia opinión al respecto, todos te van a
decir que la forma correcta es la que ellos usan y si no compartes su opinión
eres un pendejo.
Para ser justos, abordé el barco en medio de una transición que hasta la fecha
sigue ocurriendo: la evolución de nix hacia los flakes, por lo que en
realidad en el largo plazo sí habrá una sola forma universal de hacer las
cosas, pero mientras ese día llega, la experiencia de usuario leyendo la
documentación es no tener ni puta idea si lo que estás leyendo aplicará para la
forma específica en la que tú tienes configurado tu sistema.
Fue entonces cuando la pregunta tuvo su respuesta final, o al menos la que me mantiene calmado por las noches cuando me atormenta ese demonio:
¿Por qué el software sigue fallando? — Porque diseñar experiencias de usuario es difícil y la mayoría de las veces están pobremente documentadas
También me hizo reflexionar en el papel que tiene las masas a la hora de documentar una herramienta. La única razón por la que Windows está bien documentado, al menos para los usuarios de a pie, es porque entre ese 70% de cuota de mercado, siempre hay un 0.1% rotativo que se encontró con un problema y publicó la solución en internet. El software de nicho no tiene esa ventaja clave, esa base de usuarios activos que están constantemente presionando por que la herramienta mejore.
¿Cómo se arregla?
Equivocándonos, cuando volteas a ver la historia de la tecnología de treinta años para acá, te das cuenta que hay muchas lecciones que se aprendieron a nivel industria y ahora son tan obvias que hasta las enseñan en las escuelas para asegurarse que las próximas generaciones no cometan los mismos errores.
Y ultimadamente así es como funciona la vida, ¿no?