Saltar al contenido
gioser
EN

tawasuyu · Raíz

Minga: el control de versiones sin dueño — hecho para agentes de IA, firma cada commit, entiende el código y recuerda tu máquina entera

Casi todo el software del mundo guarda su historia en git, y casi toda esa historia vive en un mismo servidor: el de GitHub, que es de Microsoft. En tawasuyu la historia vive en minga, y git es su espejo: firmada por quien la escribió, entendida por definición y no por línea, trabajada por muchos agentes de IA a la vez sin que se pisen, y repartida de máquina a máquina sin pedirle permiso a nadie.

18 min de lecturaPor Redacción Gioser

Cada vez que alguien guarda un cambio en un programa, lo guarda en un control de versiones: la máquina del tiempo que recuerda qué cambió, quién lo cambió y cuándo, y que permite volver atrás. Desde hace más de quince años esa máquina se llama git, y la historia de casi todo el software del planeta vive en un mismo lugar: GitHub, propiedad de Microsoft desde 2018. Este artículo cuenta qué es minga, el control de versiones que alguien escribió para tawasuyu y que hoy es su repositorio principal; qué hace que git no hace —empezando por algo que git no imaginó: muchos agentes de IA trabajando sobre la misma historia—, y qué pasó a fines de octubre, cuando dejó de guardar sólo código y empezó a guardar la máquina entera. Con los números a la vista, incluidos los que no salieron bien.

Ilustración: un grupo de personas con ponchos y sombreros trabaja con laptops sobre una ladera andina al atardecer; entre ellas y las montañas flotan ventanas de código unidas por hilos de luz, y arriba se lee «minga».
Ilustración: una minga de código —cada uno en su máquina, la historia tejida entre todos— sobre un valle andino.

El nombre

En los Andes, la minka —minga, en buena parte del continente— es el trabajo colectivo: la comunidad se junta para levantar una casa, una acequia o una cosecha, y lo hecho es de todos y de nadie en particular. Es un homenaje a esa forma de trabajar, no una bandera: el proyecto no habla en nombre de ningún pueblo, aprende de ellos. Y describe bien lo que este programa quiere ser: una historia que se levanta entre muchas manos —algunas humanas y otras no—, sin un patrón que la guarde.

Lo que git hace muy bien, y lo que no le toca

Hay que decirlo sin caricatura: git es una obra maestra. Es rápido, es distribuido por diseño —cada copia tiene la historia entera— y su modelo de objetos direccionados por su propio hash es tan bueno que minga hace lo mismo. Ganó porque lo merecía.

Pero tiene límites que no son defectos sino decisiones de 2005, cuando nadie imaginaba que la mitad de los cambios los iba a escribir una máquina:

Minga adelante, git detrás

En tawasuyu la relación ya se invirtió. minga es el repositorio principal y git es su espejo: cada sesión de trabajo commitea en minga, en su propia rama; la fusión la hace minga, y de ahí el resultado viaja a git. Armar el árbol de git de un commit de minga tarda entre 0,08 y 0,42 segundos —reusa todo lo que no cambió—, contra 23,7 del camino que reconstruía el árbol entero.

Git sigue al frente sólo hacia afuera: quien llega de otro lado clona y empuja con git, porque es lo que tiene instalado. Y hasta eso lo atiende minga: desde el 22 de octubre, git.tawasuyu.net no es un gitea sino el hospedaje de minga, que habla git por la puerta y guarda minga por dentro.

Hecho para trabajar con agentes de IA

Buena parte de tawasuyu se escribe con asistentes de IA trabajando en paralelo —en una misma máquina hubo días con hasta dieciocho sesiones a la vez—, y minga creció para eso. Es la primera diferencia con git, y la más grande:

Entiende el código, no las líneas

minga parsea el código (Rust, Python, JavaScript, TypeScript, Go y C) y guarda, junto a cada commit, qué funciones y tipos nacieron, cambiaron o murieron. Cada definición tiene una identidad que no depende de su nombre: funny_add y amusing_add con el mismo cuerpo dan la misma huella, en cuatro lenguajes. De ahí salen preguntas que git no puede contestar:

Fusionar leyendo la sintaxis

Cuando dos ramas tocan el mismo archivo, git compara líneas. minga fusiona el árbol sintáctico: dos cambios en funciones distintas del mismo archivo no chocan, una función movida de lugar y editada del otro lado no se duplica, y el archivo fusionado sale con su formato y sus comentarios, no re-impreso. Cuando sí hay choque, el conflicto no es un archivo roto con marcas: es un valor guardado adentro del árbol, se puede commitear, mover de base y resolver después, y sólo la sentencia que chocó lleva marcas.

Medido sobre el repositorio real: de 1.059 fusiones de tres vías tomadas de su propia historia, 982 salen limpias, y sólo una duplicó algo. Y se compara contra mergiraf, la herramienta de fusión estructural de referencia, como oráculo de paridad.

Confianza sin autoridad central

En git, en quién confiar lo decide el servidor. En minga lo decide cada uno, y queda firmado:

El forge entero, sin servidor

Lo que hace a GitHub difícil de dejar no es git: es todo lo de alrededor. En minga cada pieza es un registro firmado que viaja con la historia por la misma sesión de sincronización:

máquina A máquina B cada commit, firmado «¿qué te falta?» B manda lo que ya tiene sólo lo que falta, verificado contra su hash sin servidor en el medio
Lo que pasa en un minga sync: el que recibe pide sólo lo que no tiene, y cada pieza tiene que dar el hash que se pidió o no entra. Lo mismo vale para un archivo suelto pedido a quien lo anuncie en la red.

El hospedaje: un forge para agentes, con git como puerta

Para el mundo que usa git, minga tiene un hospedaje: minga-serve. Desde el 22 de octubre sirve git.tawasuyu.net y git.gioser.net en lugar de gitea, con los 55 repositorios mudados y una vuelta atrás preparada. Por la puerta habla git —cualquiera clona y empuja con lo que tiene instalado—, y por dentro todo lo de arriba: las ramas protegidas no piden «pasó el CI del servidor» sino M atestaciones firmadas; los agentes entran con sus llaves delegadas; la API y el MCP contestan sin clonar; y una cara web sin JavaScript, en castellano, inglés y quechua, muestra las tareas, las propuestas con su cambio por definición, las atestaciones y la procedencia de cada commit.

El día a día

Que aguante: los números

Un control de versiones se juzga con el repositorio grande, no con el de juguete. El de tawasuyu tiene más de 9.000 commits y unos 4 GB de historia, y minga la lleva entera desde septiembre. Tres mediciones de cómo llegó a aguantarla:

últimos 20 commits de 100.000, cargando la historia entera 10 min 18 s caminando desde las cabezas, como git log 22 ms — 28.000 veces menos
Banco sintético de 100.000 commits (scripts/probar-minga-escala.sh, 18 de septiembre de 2026). Con 1.000 commits la misma consulta tardaba 9 ms: el repositorio creció cien veces y la consulta, 2,4.
memoria del servicio tras seis commits del árbol real, antes 2.257 MB con la caché de la base acotada a 64 MB 729 MB
Medido el 28 de septiembre de 2026 sobre una copia del espejo real (9.872 commits, 4,6 GB). La causa era una línea que nadie escribió: la base de datos usada traía por defecto un gigabyte de caché. Un banco chico no reproducía el defecto —con 352 MB de almacén la caché nunca se llena—: el tamaño del corpus era parte del instrumento.

Y la tercera es la que más costó: entre septiembre y octubre la base de datos que guardaba los objetos se rompió dos veces al llenarse el disco a mitad de una escritura, y la segunda vez la recuperación borró todo lo que se había escrito después del error. Se reemplazó entera. Los objetos y los commits viven ahora en paquetes de sólo agregar, con una suma de verificación por registro, un minga fsck que el propio servicio corre cada 24 horas, y una réplica viva de lo que git no puede rehacer. El espejo bajó de 9,4 a 4,0 GB. Sobre un banco de 200.000 commits, listar las ramas pasó de 1.128 a 9 milisegundos.

Fines de octubre: de guardar código a guardar la máquina

Los documentos ya vivían en minga: en pluma, el editor de la suite, cada párrafo conserva su identidad entre versiones, y hay blame por párrafo, propuestas de edición, sincronización de máquina a máquina y fusión de dos versiones párrafo por párrafo. El plan del proyecto tiene una línea que se llama, sin modestia, minga como sustrato de toda la suite: que el mismo almacén firmado guarde todo lo que una persona quiere poder recordar y deshacer. A fines de octubre se cerró. Seis piezas nuevas, todas funcionando:

minga almacén firmado el código commits y delta por definición tu máquina fotos cifradas cada minuto tus dotfiles respaldo y envío cifrados la ciencia resultados que se rehacen takana paquetes de quien los tenga los kernels quórum de máquinas wawa el disco de otro sistema
Una sola forma de guardar —objetos direccionados por su hash, firmados por quien los escribe— para todo lo que se quiere poder recordar y deshacer. Hasta fines de octubre, minga guardaba sólo el primero.

La historia de tu máquina

Cada minuto, si algo cambió, minga saca una foto firmada de tu configuración —los archivos ocultos de tu carpeta, ~/.config, lo que sumes— en un repositorio local cifrado en el disco con la clave de tu identidad. minga machine log te muestra qué cambió y cuándo; minga machine restore ~/.config/kitty --at 10:00 lo deja como estaba.

La primera foto real: 2.122 archivos, 25 MB, 3 segundos. Las siguientes, 1 segundo si nada cambió.

Tus dotfiles, sin carpeta aparte

El gestor de configuración de la suite guarda sus respaldos en ese mismo repositorio, y empujarlos a otra máquina viaja cifrado con la misma clave: el destino nunca ve un texto en claro.

Probado con la configuración real de la shell y de git: ningún texto legible en el destino, y restaurado idéntico en otra carpeta de usuario.

Ciencia que se puede rehacer

minga derive run corre una receta sobre un commit —datos más código— en una carpeta aparte, y firma el hash del resultado. Otra máquina la rehace por su lado y firma lo suyo. minga derive bisect encuentra el commit que movió el resultado, sin volver a correr lo ya corrido.

El brazo de control: una receta que lee el reloj sale «no se reproduce», con un resultado distinto por máquina.

Una distribución sin servidor de confianza

takana, la distribución Linux de la suite, separa lo que necesita confianza —un índice firmado de kilobytes— de lo que no: decenas de gigas de paquetes y fuentes. minga es ahora un origen más de esos gigas, y un nodo baja un solo archivo de quien lo tenga, verificado pieza por pieza, sin sincronizar el resto.

Un origen que no tiene el archivo cede al siguiente; uno que entrega otro contenido aborta la instalación aunque el bueno esté detrás.

Kernels con quórum

Cuando takana prueba un kernel nuevo en una máquina y arranca, la máquina firma «arrancó, en este hardware»; si lo descarta, firma en rojo. Un kernel no se prepara en otra máquina de la misma clase sin que M distintas lo hayan arrancado, y un rojo no se tapa con verdes.

Probado en un servidor con takana, con tres identidades de máquina juntadas por el cable: sin firmas se planta, con dos en verde pasa, una tercera en rojo lo vuelve a plantar.

Un sistema operativo que lee minga

wawa, el sistema operativo propio de tawasuyu, guarda sus objetos con el mismo contrato que minga. Al arrancar arma un árbol de minga sobre su disco y lo relee; en el arranque siguiente lo encuentra ahí, con la misma huella que minga calcula en una computadora común.

Con el disco lleno, la escritura falla, el error queda anotado y el sistema sigue arrancando. Probado en una máquina virtual; falta el hierro.

Y la línea de tiempo de la máquina también lee la de takana: el diario donde el sistema anota cada archivo que cambia y las generaciones de cada actualización aparecen intercaladas con las fotos de tu configuración, y «volver» sobre una actualización le pide la vuelta atrás a takana, que es quien sabe hacerla. Probado contra una máquina de producción que corre takana: el diario de 9.299 renglones y sus 17 generaciones caben en 100 entradas, y la actualización del 16 de septiembre aparece como una entrada de 777 archivos —el mismo número de cambios que dice el manifiesto de su generación—.

Lo que salió mal, contado

Un proyecto que sólo muestra lo que anduvo está escondiendo algo. Cuatro tropiezos de esos días, y lo que enseñó cada uno:

Lo que todavía no

Cómo verlo

minga vive en la región raíz del repositorio de tawasuyu —git.tawasuyu.net, servido por el propio minga— bajo 03_ukupacha/minga. El plan, PLAN-VCS.md, cuenta cada fase con sus mediciones y sus fechas; las líneas de trabajo están en 03_ukupacha/minga/lineas/, cada una con lo que se certificó y lo que falta, tal como salió; y FLUJO-AGENTE.md cuenta cómo trabaja un agente con minga adelante y git detrás.

Fondo