# OMI — recuperación del entorno, 24 de septiembre de 2026

Open Modular Interpreter, de Fco. Javier Bohórquez Ogalla.
Proyecto fin de carrera de la Universidad de Cádiz dirigido por Iván Ruiz Rube.
El autor confirma su uso en clases de Intérpretes y Compiladores y su continuidad como herramienta interna de la universidad después de 2016.

Esta distribución recupera el código público del commit 805c5e4c670e8b9d5accfb7939a92fc315b07bf4:
https://github.com/fbohorquez/omi

## Arranque recomendado con Docker

Desde la carpeta de esta distribución:

```sh
docker build -f Dockerfile.dependencies -t omi-build-deps:20260924 .
docker build -t omi-runtime:20260924 .
docker run --rm --name omi-local --memory=512m --cpus=1 --pids-limit=96 \
  --cap-drop=ALL --security-opt no-new-privileges --read-only \
  --tmpfs /tmp:rw,nosuid,size=128m -p 127.0.0.1:18886:8080 omi-runtime:20260924
```

Web: http://127.0.0.1:18886/
RunTree: http://127.0.0.1:18886/rtree/

En otra terminal:

```sh
docker exec omi-local omi -c '<< 2+3*4;'
docker exec -it omi-local omi -i
docker exec omi-local omi -c '~ fact(n) { if(n<=1) return 1; return n*fact(n-1); } << fact(6);'
docker exec omi-local omi -c '<< gettext("Hola OMI");'
```

Para detenerlo: Ctrl+C en la terminal del contenedor, o docker stop omi-local.
La ejecución de código permanece en localhost. Para utilizarlo desde otro ordenador, reenvía el puerto 18886 por SSH. No conectes volúmenes con información privada al intérprete.

## Contenido

- source/trunk: intérprete y pruebas originales.
- source/extensions: gettext y MySQL.
- source/web: web original y RunTree, adaptados a PHP 8.2.
- source/examples: programas originales.
- documentation/omi-memoria-original.pdf: memoria original recuperada (534 páginas).
- artifacts/local: binarios, módulos, biblioteca estática y cabeceras compilados para Linux x86_64 / Debian 12.
- verification: resultados de pruebas y captura de ejecución.
- changes.patch: diferencias respecto al repositorio original.
- build.sh, Dockerfiles y start.sh: construcción y ejecución.

El método Docker recompila desde el código incluido. Para reutilizar los binarios en Debian 12 x86_64 se requieren las bibliotecas de ejecución de Boost Regex 1.74, Readline 8 y, para MySQL, MariaDB Connector/C. No son binarios universales para Windows o macOS.

## Estado de la recuperación

Compilados: intérprete con instrumentación JSON y modo servidor, biblioteca estática, gettext y módulo MySQL. Se ha comprobado ejecución desde terminal y desde el navegador de RunTree.

Es una recuperación de software docente histórico. No se presenta como una nueva versión estable ni como una certificación de todas las características del lenguaje. Las pruebas originales conservan discrepancias, especialmente en asignaciones a posiciones de cadenas y algunos casos de objetos/excepciones. El informe de verificación distingue estos casos de las pruebas básicas que funcionan. El módulo MySQL se ha compilado y cargado; las operaciones contra una base de datos deben verificarse antes de emplearlo con datos reales.

Las adaptaciones incluyen rutas portables, carga de clases en PHP actual, lexer compatible con expresiones sin espacios, correcciones de retornos indefinidos, paso de argumentos a constructores, tratamiento del final de entrada y recepción completa de programas por TCP. No se han modificado las expectativas históricas para hacerlas pasar.

## Licencia y procedencia

Se conservan los avisos y licencias originales. Consultar source/trunk/COPYING y los avisos de cada archivo. El repositorio contiene avisos GPLv2 o posterior y un texto GPLv3; la documentación incluye sus propios avisos. Las dependencias web mantienen sus cabeceras originales. Los cambios de recuperación se distribuyen bajo GPLv3, respetando los avisos previos.
