Módulo 2 — IBM i (sistema operativo)
Sistema operativo integrado de IBM para Power Systems. Contenido desarrollado a la profundidad requerida por cada rol.
Base común — todos los roles
Linaje del OS
IBM i fue lanzado en 1988 como OS/400, único OS de la línea AS/400. Su arquitectura interna desciende directamente del CPF (Control Program Facility) del System/38, incorporando además capas de compatibilidad para aplicaciones del System/36 (SSP) y para AIX. Esa herencia explica por qué IBM i es estructuralmente distinto a cualquier otro OS: su modelo de objetos, su almacenamiento de nivel único y su integración con la base de datos no son características agregadas a posteriori, sino rasgos fundacionales presentes desde el System/38.
El OS fue rebautizado a i5/OS en 2004, cuando IBM adoptó los procesadores POWER5; el "5" hacía referencia explícita a esa generación de chips. En 2008, al converger la línea System i con System p bajo la marca IBM Power Systems, el OS adoptó el nombre definitivo IBM i — donde la "i" significa integrated, aludiendo a la integración nativa de OS, base de datos, seguridad y middleware en una sola plataforma.
Versión vigente al momento de redactar este material: IBM i 7.5 (anunciada el 10 de mayo de 2022). IBM también ha publicado IBM i 7.6 (anunciada el 18 de abril de 2025), la versión más reciente de la línea.
Lo distintivo en una frase
IBM i no es "OS + DB + middleware ensamblados". Es una sola pieza integrada: el sistema operativo trae adentro la base de datos (DB2 for i), el modelo de seguridad por objeto, el journaling, el servidor web, el sistema de backup (BRMS), el subsistema de trabajos, y la administración. Esa integración es la que sostiene la propuesta de valor.
Versiones vigentes en el parque instalado
IBM mantiene varias versiones simultáneamente. En el parque real de clientes vamos a encontrar todas estas:
| Versión | Estado de soporte | |---|---| | IBM i 7.3 | Service Extension Offering (paga) iniciada el 1 de octubre de 2023 y vigente hasta el 30 de septiembre de 2026. | | IBM i 7.4 | Standard Support hasta el 30 de septiembre de 2026; luego transita a Service Extension hasta el 30 de septiembre de 2029. | | IBM i 7.5 | Standard Support activo (versión usada como referencia técnica de este material). | | IBM i 7.6 | Anunciada por IBM (abril de 2025). |
Implicancias prácticas:
- •Comercial — un cliente en 7.3 sin Service Extension contratada es una conversación de upgrade.
- •Preventa — algunas funcionalidades (p.ej. nuevos opcodes RPG, password level 4, mejoras de Db2 Mirror) están solo a partir de 7.5; chequear versión y TR antes de prometer.
- •Soporte — las páginas de IBM Support tienen secciones separadas por versión y TR; siempre verificar contra la versión instalada.
IBM publica el ciclo de vida de cada versión con anticipación. El soporte estándar de una versión típicamente dura tres años desde su GA (General Availability), seguido de un período opcional de Service Extension Offering (SEO) —contratado por separado— que extiende el acceso a PTFs de seguridad y corrección. Un cliente fuera de soporte estándar y sin SEO no recibe correcciones, lo que representa un riesgo de seguridad y operativo concreto.
IBM i 7.4 — features clave (la versión más instalada del parque)
7.4 sigue siendo, al momento de redactar este material, la versión con mayor presencia en cuentas reales. Vale la pena conocer sus features base y de TRs porque la mayoría del soporte y de las preventas lo encontrarán antes que 7.5.
Database y APIs
- •La API
QBNCHGPD(Change Program Data) fue mejorada para actualizar la ubicación del código fuente de debug de un programa compilado conDBGVIEW(*SOURCE). Útil en debugging post-mortem.
Acceso a datos / ODBC
- •El IBM i Access ODBC driver fue portado al propio IBM i, permitiendo que cualquier cliente ODBC estándar se comunique con la base de datos local. Esto habilita re-deployar aplicaciones desarrolladas con el ODBC driver de Windows/Linux directamente sobre IBM i.
Desarrollo moderno (Node.js)
- •Versiones
idb-connector1.x eidb-pconnector1.x publicadas, con acceso directo a Db2 desde JavaScript siguiendo convenciones JS/Node estándar.
Data science y machine learning
- •Paquetes nuevos para data science y ML disponibles vía RPM, incluyendo bibliotecas Python de Machine Learning y Data Science.
- •R disponible en IBM i — orientado a estadística y data mining.
Mensajería y middleware open source
- •Apache ActiveMQ disponible nativamente — broker de mensajería con soporte de OpenWire, STOMP, MQTT, AMQP, REST y WebSockets.
Build y devops
- •Mejoras de Apache Ant y Apache Maven para automatización de build.
- •Mejoras en utilities de terminal y networking adapters.
IBM i 7.4 recibió Technology Refreshes hasta al menos TR11. Cada TR de 7.4 incorporó mejoras incrementales en open source, Db2, APIs del sistema y herramientas de desarrollo; muchas de las capacidades de open source y data science se incorporaron en TRs específicos, no en la base 7.4.0.
Para Soporte y Preventa: chequear siempre el TR exacto en el cliente. Los TRs de 7.4 publicados llegan al menos hasta TR11; muchas mejoras —incluyendo las de open source y data science— se incorporan en TRs específicos, no en la base.
DesarrolloPara Desarrollo (5 días)
Objetivo del rol en este módulo: programar, exponer servicios, integrar.
RPG IV / ILE
- •RPG free-form moderno —
**FREE, sintaxis legible, sin columnas fijas. - •Procedimientos y service programs (
*SRVPGM). - •Activation groups.
Nuevos opcodes en IBM i 7.5:
IBM i 7.5 incorporó cuatro nuevos opcodes de RPG de alto valor práctico:
- •
SND-MSG— envía un mensaje informativo o de escape directamente desde código RPG libre, sin necesidad de invocar la APIQMHSNDPM. Simplifica el manejo de errores y la comunicación entre programas. - •
ON-EXCP— extiende el bloqueMONITOR/ON-ERRORpermitiendo capturar excepciones específicas por ID de mensaje (por ejemploON-EXCP 'CPF5029'). Permite un manejo de errores más quirúrgico que elON-ERRORgenérico. - •
DATA-GEN— genera un documento estructurado (JSON, XML, CSV u otros formatos) directamente desde una variable de datos RPG usando un generador definible. Elimina la necesidad de concatenar strings manualmente para construir JSON, lo que era una fuente frecuente de errores y código difícil de mantener. - •
FOR-EACH— itera sobre arrays, listas construidas con%LIST, y sub-arrays definidos con%SUBARR. Simplifica el recorrido de estructuras de datos y reemplaza patrones deDOmanuales con índice explícito.
CL (Control Language)
Lenguaje de comandos / scripting nativo. Se usa para:
- •Wrappers de programas RPG.
- •Tareas batch programadas.
- •Automatización de operación.
- •Manejo de excepciones a nivel de comando.
SQL embebido y stored procedures
- •SQL embebido en RPG y CL.
- •Stored procedures en SQL y en RPG.
- •IBM i Services — vistas/UDTFs oficiales para introspección (
QSYS2.OBJECT_STATISTICS,QSYS2.SYSTEM_VALUE_INFO, etc.).
APIs del sistema
- •APIs C/MI (
Qxxx…) para acceso programático a recursos del OS. - •APIs de seguridad (
QSY…). - •APIs de mensajería, spool, work management.
Servicios web
- •Integrated Web Services (IWS) — exponer programas RPG/CL como REST/SOAP sin escribir una sola línea de código de infraestructura web. IWS genera el wrapper HTTP automáticamente a partir del interfaz del programa.
- •HTTP Server (Apache).
- •IBM i 7.5 mejora la observabilidad sobre el uso de REST APIs: mediante IBM i Services es posible consultar qué endpoints fueron invocados, por qué usuario, desde qué dirección IP y con qué frecuencia. Esto simplifica el diagnóstico de problemas de integración y la auditoría de acceso a servicios.
Open source en IBM i
Disponibles como paquetes RPM:
- •Node.js, Python, PHP, Ruby.
- •Git nativo.
- •Bash, ssh, vim, etc. vía PASE (Portable Application Solutions Environment).
Desarrollo moderno
- •Code for IBM i — extensión de VS Code para editar RPG/CL/SQL contra IBM i remoto, con Git, debug, compile, browse de objetos.
- •ILE Concepts — bound calls, modules, service programs, activation groups.
- •DevOps — pipelines CI/CD usando Git + scripts CL/Bash.
Stored procedures en SQL PL
SQL PL es el lenguaje de procedimientos de Db2 for i. Permite crear lógica de negocio directamente en la base de datos, accesible desde cualquier cliente SQL.
Ejemplo: stored procedure que devuelve el detalle de un cliente con su saldo:
CREATE OR REPLACE PROCEDURE MYLIB.GET_CUSTOMER_DETAIL (
IN P_CUSTID INTEGER,
OUT P_NAME VARCHAR(60),
OUT P_BALANCE DECIMAL(11,2),
OUT P_STATUS VARCHAR(10)
)
LANGUAGE SQL
BEGIN
DECLARE V_COUNT INTEGER DEFAULT 0;
-- Verificar que el cliente existe
SELECT COUNT(*) INTO V_COUNT
FROM MYLIB.CUSTOMERS
WHERE CUSTID = P_CUSTID;
IF V_COUNT = 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cliente no encontrado';
END IF;
-- Obtener datos del cliente y saldo calculado
SELECT C.CUSTNAME,
COALESCE(SUM(O.AMOUNT), 0),
C.STATUS
INTO P_NAME, P_BALANCE, P_STATUS
FROM MYLIB.CUSTOMERS C
LEFT JOIN MYLIB.ORDERS O
ON C.CUSTID = O.CUSTID
AND O.ORDER_STATUS = 'OPEN'
WHERE C.CUSTID = P_CUSTID
GROUP BY C.CUSTNAME, C.STATUS;
END;
Invocar desde CL o SQL:
CALL MYLIB.GET_CUSTOMER_DETAIL(12345, ?, ?, ?);
ILE call stack — DSPMOD y DSPPGM
En ILE (Integrated Language Environment), un programa *PGM está compuesto por uno o más módulos *MODULE, que a su vez pueden estar bound con service programs *SRVPGM. Entender esta estructura es fundamental para debugging y para saber qué recompilar cuando algo cambia.
DSPPGM — ver la composición de un programa:
DSPPGM PGM(MYLIB/MYPGM)
Opción 5: Display module and service program list
Salida:
Module/Service Program Library Type Attribute
MAINMOD MYLIB *MODULE *RPGLE
UTILMOD MYLIB *MODULE *RPGLE
DATEUTILS MYLIB *SRVPGM *RPGLE
QRNXIE QSYS *SRVPGM *CLE
Esto muestra que MYPGM está compuesto por dos módulos propios (MAINMOD y UTILMOD) y usa dos service programs (DATEUTILS propio y QRNXIE del sistema). Si se cambia UTILMOD, hay que re-hacer el bind (UPDPGM o CRTPGM de nuevo).
DSPMOD — ver las exported procedures de un módulo:
DSPMOD MODULE(MYLIB/UTILMOD)
Opción 3: Display procedures exported
Muestra qué procedimientos exporta el módulo, que son los que pueden ser llamados desde otros módulos o service programs.
IBM i Services desde código
Las queries de IBM i Services no son solo para administración — son herramientas de desarrollo para introspección:
-- Obtener información del job actual
SELECT * FROM TABLE(QSYS2.GET_JOB_INFO('*')) AS X;
-- Listar PTFs aplicadas para un producto
SELECT * FROM QSYS2.PTF_INFO
WHERE PTF_PRODUCT_ID = '5770SS1'
ORDER BY PTF_IDENTIFIER DESC
FETCH FIRST 10 ROWS ONLY;
CRTSQLRPGI — flags de compilación
CRTSQLRPGI es el comando para compilar fuentes RPG ILE con SQL embebido. Los flags más relevantes:
| Flag | Valores típicos | Para qué |
|---|---|---|
| COMMIT | *NONE, *CHG, *ALL | Nivel de commitment control. *NONE para lecturas sin transacción, *CHG o *ALL para operaciones transaccionales. |
| CLOSQLCSR | *ENDMOD, *ENDACTGRP | Cuándo se cierran los cursors SQL. *ENDACTGRP mantiene cursores abiertos mientras el activation group esté activo — mejor performance para llamadas repetidas. |
| DATFMT | *ISO, *JOB, *EUR | Formato de fecha en SQL. *ISO (YYYY-MM-DD) es recomendado para interoperabilidad. |
| DBGVIEW | *SOURCE, *STMT, *NONE | Información de debug. *SOURCE permite debugging line-by-line. En producción usar *NONE o *STMT. |
| OPTION | *XREF *SECLVL | *XREF genera cross-reference. *SECLVL muestra mensajes de segundo nivel en el listing. |
| RPGPPOPT | *LVL1, *LVL2 | Pre-procesador RPG. *LVL2 habilita directivas /IF, /DEFINE, /COPY condicional. |
| TGTRLS | V7R5M0, *CURRENT | Versión de IBM i target. Importante si se compila en una versión y se despliega en otra. |
Ejemplo de compilación completa:
CRTSQLRPGI OBJ(MYLIB/MYPGM) SRCFILE(MYLIB/QRPGLESRC)
SRCMBR(MYPGM) COMMIT(*CHG) CLOSQLCSR(*ENDACTGRP)
DATFMT(*ISO) DBGVIEW(*SOURCE) RPGPPOPT(*LVL2)
Integración con HA y CDC desde el código
- •Cualquier objeto que el aplicativo cree y deba replicarse: debe ser journaled.
- •Si la aplicación crea archivos nuevos en runtime, hay que invocar
STRJRNPF(o equivalente). - •Documentar qué bibliotecas/objetos espera el aplicativo, para que ops las incluya en la configuración de Quick EDD / Connect CDC.