Language reference
IBM's systems-and-business hybrid language, still quietly load-bearing today.
PL/I began in 1963 as a joint effort between three IBM staff and three members of SHARE, the IBM scientific-computing user group, with a brief to extend Fortran. By April 1964, the scope had grown into something bigger: IBM was about to announce the System/360, a single hardware line meant to serve both business and scientific customers who had previously used entirely different machines and languages, and it wanted one language that could serve both audiences on it. The initial design was called NPL, briefly MPPL, before settling on PL/I. The first production compiler, PL/I F, was delivered by an IBM Hursley Labs team led by John Nash in 1966, the same year System/360 itself shipped.
PL/I's stated goal was blunt: replace the split between scientific programming (Fortran, ALGOL) and business programming (COBOL) with one language that could do both, on one machine architecture. It borrowed block structure and recursion from ALGOL 60, wide numeric and string data types for scientific work, and record-oriented I/O for business data processing, all under a design principle IBM called orthogonality, meaning each language feature was meant to work independently of every other one rather than only in specific combinations.
1963 · Design begins
IBM and SHARE form a joint committee to extend Fortran for System/360.
1964 · NPL becomes PL/I
Initial design completed in April; renamed PL/I ahead of the System/360 announcement.
1966 · PL/I F ships
First production compiler, delivered by IBM Hursley Labs, alongside the System/360 itself.
1970 · PL/I Optimizing Compiler
Announced for System/370, shipping for DOS/360 the following year.
1976 · ANSI X3.53-1976
First American National Standard for PL/I.
1981 · Subset-G
ANSI PL/I General-Purpose Subset standard issued, revised in 1987.
1992 · New OS/2 compiler
IBM Santa Teresa lab ships an entirely new PL/I compiler.
1995 · PL/I for AIX
IBM extends PL/I off the mainframe onto AIX.
Multics
The influential Multics operating system, a direct ancestor of Unix in its design philosophy, was largely written in PL/I.
Wikipedia: PL/ISabre
The System/360 version of the Sabre airline reservation system was largely written in SabreTalk, a purpose-built subset PL/I compiler.
Wikipedia: PL/ISAS
The SAS System was initially written in PL/I, and the SAS data step language is still modeled on PL/I syntax today.
Wikipedia: PL/INamed banking adopters
KBC (Belgium), Allied Irish Banks, several Austrian banks including Raiffeisen, and Credit Suisse (now UBS) have all run core banking systems on PL/I, per practitioners in IBM's own Z and LinuxONE community forum.
IBM Z and LinuxONE Languages community, December 2023PL/I history and figures compiled from public sources, cited above. Corrections welcome.
A SIGNAL ERROR statement was executed, or an unhandled condition of any kind was raised and fell through to the default ERROR handling because no more specific ON-unit was established for it.
Check ONCODE first to see what condition actually triggered this. ONCODE 9 by itself is a catch-all, not a diagnosis; the real cause is almost always a more specific condition that had no ON-unit to catch it.
A sequential READ reached the end of a file, or a SIGNAL ENDFILE statement was executed directly.
This is the normal way a program detects end of file. If the program is stopping earlier than expected, check for an extra READ, or a file genuinely shorter than the program assumes.
An assignment truncated a character or bit string because the source was longer than the target's declared maximum length.
Check the declared length of the target variable against the actual data being assigned. This condition is often left unhandled during development and only surfaces once production data is wider than test data.
The result of an arithmetic operation on a fixed-point decimal or binary value exceeded the precision defined for the receiving field.
Check the PICTURE or fixed-point precision of the field receiving the result, and increase it if the calculation legitimately needs more digits. Also check for a runaway loop that is accumulating a total far past what the field was sized for.
Yes, primarily in European banking and airline systems. Named users include KBC (Belgium), Allied Irish Banks, several Austrian banks, and Credit Suisse (now UBS), per practitioners in IBM's own community forum.
PL/I stands for Programming Language One. IBM designed it starting in 1963 to combine Fortran's numeric strength, ALGOL's structure, and COBOL's business data handling into a single language for the System/360.
They share a buyer (mainframe banking and insurance) but not a syntax. PL/I's block structure and condition-handling model are closer to ALGOL-family languages than to COBOL's record-oriented style.
Yes. IBM shipped Enterprise PL/I for z/OS 6.2 in 2025 with support for the new z17 hardware, including an ARCH(15) option that unlocks z17-specific optimizations without any source code changes, and reports CPU usage reductions of up to 12% versus the prior compiler/hardware pairing and up to 35% versus two generations back.
Yes, through third-party compilers rather than IBM's own tooling. Raincode's PL/I compiler is listed alongside its COBOL and ASM370 compilers in Microsoft's Azure Architecture Center reference architecture for rehosting mainframe applications, generating fully managed, thread-safe .NET code that runs on Azure without changing the underlying business logic.
As of the TIOBE index for August 2026, PL/I ranks #27 with a rating of 0.67%. TIOBE measures search and discussion volume, so this reflects how much new interest and content exists around the language, not how much production code still depends on it.
Both target languages kept evolving while PL/I was being built to replace them: FORTRAN 66 became the first ANSI-standardized FORTRAN release the same year PL/I's first compiler shipped, and COBOL advanced through revisions from COBOL-60 through COBOL-74. By 1970, per software architect Doug Meil's account in Communications of the ACM, COBOL had already become the world's most widely used programming language, making the case for switching a hard sell to customers running working systems.
PL/I combined FORTRAN's numeric and scientific-computing strengths with COBOL's record-oriented business data handling, with block structure and recursion drawn from ALGOL's design, into a single language intended for use across both business and scientific workloads on IBM's System/360.
Beyond z17 hardware support, Enterprise PL/I 6.2 added vector instructions for inline hex and base64 encoding and decoding, 16-byte integer support for larger and more complex calculations, and enhanced compiler warnings for potential storage issues, according to IBM's own release documentation.
Real questions from public forum threads, with credit to who asked and who answered. Our answer restates the fix and links to the matching reference page where one exists.
Which banks actually still run their core applications on PL/I? COBOL's prevalence is well documented, but PL/I's isn't.
Asked by Raul Alonso Sanchez on IBM Z and LinuxONE Languages community, December 2023
“Named KBC in Belgium, Allied Irish Banks in Ireland, KLM Royal Dutch Airlines, and the Socialist Mutual Health Insurance in Belgium as PL/I users.”
Robert Prins
“Named several Austrian banks, including Raiffeisen and 3BEG, as still running core banking applications on PL/I.”
Johann Wöckinger
“Noted that Credit Suisse, now part of UBS, has a core banking implementation based on PL/I.”
Volker Birk
The pattern in these answers is consistent with what shows up in PL/I's own history: it was strongest in European banking and airline systems rather than the US commercial mainframe base COBOL dominates, which is exactly why it is less visible in English-language usage statistics even where it is still running production core systems.
My ON SUBSCRIPTRANGE unit stopped catching the condition after we recompiled under Enterprise PL/I. Did something change?
Asked by reported across multiple Enterprise PL/I migration cases on IBM Support, APAR PI56511
“Confirmed as a defect: a SUBSCRIPTRANGE condition raised by code that originated under PL/I for MVS & VM was not always caught by an ON SUBSCRIPTRANGE unit after recompilation under Enterprise PL/I.”
IBM Support (APAR PI56511)
This is not a mistake in your ON-unit. It is a documented gap specific to code carried forward from PL/I for MVS & VM into Enterprise PL/I. If a SUBSCRIPTRANGE check that worked before a compiler migration stops firing afterward, check your Enterprise PL/I service level against this APAR before you spend time rewriting the ON-unit itself.
Full reference page →Compilers & platforms
Disambiguation across vendors.
Modernization guides
Cost, timeline, migration paths.
Vendors
Modernization consultancy comparison.
Migration checklist
What to check before or after a compiler move.
Salary & rate benchmark
What PL/I work actually pays.
Vendor match
Two questions to the right vendor.