Language reference
The batch-processing backbone of global banking and insurance. Still compiling, still running the overnight run.
COBOL was designed in 1959 by CODASYL, the Conference on Data Systems Languages, a committee representing six computer manufacturers and three U.S. government agencies. Grace Hopper served as a technical adviser to the effort and had already built FLOW-MATIC, an English-like language that heavily influenced COBOL's syntax, but the language itself was written by a subcommittee that included William Selden, Gertrude Tierney, Howard Bromberg, Vernon Reeves, and Jean E. Sammet. Sammet, one of the language's lead designers, was explicit that Hopper "was not the mother, creator, or developer of Cobol," even though her earlier work shaped it directly.
COBOL was built for one purpose: business data processing that ordinary, non-specialist programmers could read and write. The design brief called for a language that made maximal use of English, ran the same way across different manufacturers' machines, and let organizations move to new hardware without rewriting their programs. Readability was treated as more important than computational elegance, which is why COBOL still reads like structured prose next to most other languages of its era.
1960 · COBOL-60
The initial specification, approved January 8, 1960.
1961 · COBOL-61
First revision of the original specification.
1963 · COBOL-61 Extended
Added SORT and Report Writer facilities.
1968 · COBOL-68
First ANSI standard (USA Standard COBOL X3.23), aimed at ending incompatibility between vendor dialects.
1974 · COBOL-74
ANSI revision adding new file organizations, the DELETE statement, and segmentation.
1985 · COBOL-85
Major revision adding scope terminators, EVALUATE, and inline PERFORM.
2002 · COBOL 2002
Added object-oriented syntax, free-form source code, and Unicode support.
2014 · COBOL 2014
Made several features optional and added method overloading.
2023 · COBOL 2023
Added asynchronous messaging, transaction processing support, and an XOR operator.
~200 billion lines
Gartner Group's 1997 estimate of COBOL code in existence at the time, running an estimated 80% of all business programs then in production.
Gartner Group, 1997 (via Wikipedia)95% of the time
Share of the processing behind a credit or debit card swipe that ran on COBOL, as of 2020.
Wikipedia: COBOL, citing 2020 reportingOver 60% of organizations
Share of surveyed organizations still using COBOL, per Computerworld surveys conducted between 2006 and 2012.
Computerworld surveys, 2006 to 2012 (via Wikipedia)~1,700 open COBOL roles vs. 30,000+ for Java
A 2020 snapshot of Glassdoor job postings, cited to illustrate how few programmers are entering the COBOL pipeline relative to demand.
GitLab: The COBOL Programmer Shortage, April 2020COBOL history and figures compiled from public sources, cited above. Corrections welcome.
The statement executed with no error, no boundary condition, and nothing unusual to report. This is the value your code should expect on the normal path.
No fix needed. If you are seeing this and still branching into error handling, check that your FILE STATUS comparison is testing the right condition, not just a non-zero first digit.
On a READ or WRITE against an indexed file, the record's key duplicates an existing record's alternate key, or a duplicate condition was otherwise allowed and detected.
Confirm whether the alternate key involved is defined WITH DUPLICATES. If it should be unique, check the write logic that produced the duplicate value upstream.
A READ was successful, but the length of the record retrieved does not match the length defined for the file's record area in the program.
Compare the FD record length against the copybook actually shipped with the data. This usually means the program is reading a file written by a different, incompatible layout version.
The file was declared with the OPTIONAL phrase in SELECT, and the OPEN found no file present at the assigned location.
This is informational, not an error, if your program is written to handle a missing optional file. Confirm your OPEN logic branches correctly on status 05 instead of falling through to file-not-found handling meant for status 35.
Yes. COBOL still processes a large share of banking, insurance, and government transactions worldwide, running on mainframes that handle high-volume batch and transaction workloads IBM's own z/OS platform is built for.
COBOL stands for Common Business-Oriented Language. It was designed in 1959 specifically for business data processing, not general-purpose or scientific computing.
COBOL's syntax is deliberately English-like and easier to read than most languages. The hard part is usually the surrounding mainframe environment (JCL, VSAM, CICS), not the language itself.
File status 35 (file not found) and abend S0C7 (data exception from invalid numeric data) are the two most frequently reported COBOL problems in production.
COBOL's new-project adoption has been flat for decades, but its existing footprint is not shrinking meaningfully. The real risk is workforce, not the language being retired.
Yes. GnuCOBOL is a free, open-source COBOL compiler that produces native executables and runs on Linux, macOS, Windows, BSD, and most Unix variants, not just IBM z/OS. It's commonly used for training, testing, and even some production workloads that don't need mainframe-specific features like CICS or VSAM.
JCL (Job Control Language) is the batch scripting language z/OS uses to run programs, allocate datasets, and chain job steps together; a COBOL program on a mainframe almost always gets invoked through a JCL job rather than run directly. Most COBOL maintenance work eventually touches JCL, so shops treat it as a companion skill rather than optional.
A copybook is a separate file holding a reusable data layout, most often a record structure, that multiple COBOL programs pull in with a COPY statement instead of retyping the same field definitions everywhere. It's COBOL's version of a shared header file, and mismatched copybooks between programs are a common source of subtle data corruption.
As of the COBOL 2002 standard, yes: it added classes, objects, methods, and inheritance on top of the traditional procedural syntax. In practice, most production COBOL predates that standard and is written procedurally, so object-oriented COBOL shows up far more in newer code than in the decades-old batch programs still running most mainframe workloads.
Windowing was a common Y2K shortcut: instead of expanding a two-digit year field to four digits, programmers added logic that guessed the century based on a threshold value, or pivot year, chosen per program. That guess only holds until the real calendar crosses the chosen pivot, so some windowed COBOL code is already producing wrong-century dates today, decades after Y2K itself, in programs nobody has re-audited since.
It adds up fast even without a full modernization project. The U.S. Government Accountability Office found that just 10 of the federal government's most critical legacy IT systems, some COBOL-based, ranging from 8 to 51 years old, collectively cost about $337 million a year to operate and maintain, and federal agencies overall put roughly 80% of their IT budgets toward operating and maintaining existing systems rather than building new ones.
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.
Why does my COBOL program throw file status 35 when the file clearly exists?
Asked by pthboss on Tek-Tips forum, 2003
“On IBM COBOL for AIX, the fix was changing the SELECT clause from ORGANIZATION IS SEQUENTIAL to ORGANIZATION IS LINE SEQUENTIAL. The file existed, but the organization declared in the program did not match the actual file format on that platform.”
pthboss (original poster, self-resolved)
File status 35 usually means the file genuinely is not there, but as this thread shows, some platforms return the same code for an organization mismatch instead. Check the file's actual format before assuming it is missing: on AIX and Linux COBOL, a flat text file usually needs LINE SEQUENTIAL, not SEQUENTIAL.
Full reference page →I keep getting file status 35 on a VSAM file even though the DD and filename check out. What else could it be?
Asked by Jagjeet Dayal on zMainframes forum, February 2024
“For a VSAM file, status 35 can appear if the file is empty. The fix is to load at least one record into it, either through the program itself or with an IDCAMS REPRO statement, before the OPEN that is failing.”
Zum13
An empty VSAM cluster is one of the more counterintuitive causes of status 35, since the dataset does exist and is correctly cataloged. If your DD, catalog entry, and organization all check out, confirm the cluster actually has at least one record before you spend more time on the DD statement.
Full reference page →Is it worth learning COBOL in 2026?
Asked by Simon Ritchie on CodeRanch forum, ongoing thread
“Demand is likely strong because far fewer people still remember how to maintain these systems, and legacy code remains vital to banks and similar institutions.”
Campbell Ritchie
“Speaking from a life insurance and investments company: a wave of mainframe developer retirements was approaching, and migration costs are high enough that dependency on COBOL will persist.”
Randy Maddocks
“COBOL is mainframe-centric, so budget time to learn the surrounding environment too. Hercules (an emulator) and GnuCOBOL are accessible ways to get hands-on without mainframe access.”
Tim Holloway
The forum consensus holds up against the numbers: COBOL job postings are a fraction of Java's, but the retiring-workforce problem is real, and migration away from COBOL systems is slow and expensive enough that demand for people who can read it is not going away soon. If you are starting from zero, GnuCOBOL plus a mainframe emulator is still the standard low-cost path in.
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 COBOL work actually pays.
Vendor match
Two questions to the right vendor.