Beyond COBOL: Why Legacy Modernization Must Be Multi-Language
Enterprise legacy systems aren't just COBOL. Real-world mainframe environments mix JCL, CICS, PL/I, Assembler, and COBOL. Effective modernization requires parsing all of them.
The legacy modernization industry has a blind spot: it focuses almost exclusively on COBOL. While COBOL processes an estimated 95% of ATM transactions and 80% of in-person transactions, the programs that run these transactions don't exist in isolation. They're part of a complex ecosystem of interconnected languages and technologies.
The Real Mainframe Stack
A typical mainframe banking application involves:
- JCL (Job Control Language) — orchestrates batch processing, defines data sets, controls job flow
- COBOL — implements business logic and data processing
- PL/I — handles complex calculations, system utilities, and middleware
- Assembler — performance-critical routines, system exits, and encryption
- CICS/IMS — transaction processing and database access
- REXX/CLISTs — automation scripts and operator tools
Analyzing the COBOL programs without understanding the JCL that runs them is like reading function bodies without knowing the call sites. You miss scheduling dependencies, data flow between programs, and recovery procedures.
The Windows Legacy Stack
Not all legacy systems run on mainframes. Many enterprises have critical systems built in:
- Visual Basic 6 — millions of line-of-business applications still in production
- PowerBuilder — client-server applications in financial services and manufacturing
- VB.NET (early versions) — WebForms applications that are now themselves legacy
These systems are often the "other half" of enterprise IT that modernization projects discover mid-way through — after the budget has been allocated only for mainframe analysis.
Our Approach: Unified Multi-Language AST
Our parser service provides consistent AST output across all 7 supported legacy languages. This means:
- Cross-language dependency tracking — follow a JCL job step to its COBOL program to its COPY members
- Unified query interface — the same tree-sitter query patterns work across all languages
- Consistent tooling — one set of analysis tools, one API, one output format
- Batch processing — parse mixed-language codebases in parallel at 12,000+ files/sec
Case Study: Japanese Banking System
A major Japanese bank's core system consisted of 4,200 COBOL programs, 1,800 JCL procedures, 300 PL/I utilities, and 150 Assembler modules. Previous modernization attempts analyzed only the COBOL — missing critical batch scheduling logic in JCL that controlled end-of-day processing, regulatory reporting, and inter-system data transfers.
By analyzing all four languages together, the complete picture emerged: the 4,200 COBOL programs were actually organized into 47 business domains, each with its own JCL workflow, PL/I helper utilities, and Assembler encryption routines. The domain boundaries — invisible in COBOL-only analysis — were clearly defined by JCL job chains.