COBOL History and Standards
|
This content was generated with the assistance of AI and should be verified against the official documentation before being relied on in production. The reference material consulted while preparing these pages is listed in the section bibliography. |
This page is written against ISO/IEC 1989:2023 (edition 3, January 2023), the current COBOL standard; GnuCOBOL 3.2
(28 July 2023, still the latest release) and IBM Enterprise COBOL for z/OS 6.5 (PTFs through September 2026) are the
two implementations used throughout the guide. The facts about the standard, the committees and the compilers were
checked on 2026-10-20. The one example was compiled and run with cobc 3.2.0 and the diagnostics shown are real.
COBOL is old enough that most programmers who meet it meet a program whose style dates from one of four different decades. Knowing which edition of the language a feature belongs to explains three everyday questions: why a program that compiles on a mainframe is rejected by another compiler, why a feature in this guide is marked "2002", "2014" or "2023", and why an old program looks so different from a new one. This page follows the language from its start to the 2023 standard, describes the committees that maintain it, and explains how real compilers relate to the standard.
From CODASYL to COBOL-60
In May 1959 a meeting at the Pentagon, sponsored by the US Department of Defense, started work on a common business-oriented language that would run on the computers of several manufacturers. The effort was organised as a committee of CODASYL (the Conference on Data Systems Languages), which produced the first specification in 1960. The Computer History Museum describes the result in its 1960 timeline entry: a team drawn from several computer manufacturers and the Pentagon developed COBOL, borrowing heavily from FLOW-MATIC, the English-like data-processing language that Grace Hopper’s group had built at Eckert-Mauchly and Remington Rand. The same museum profile credits Hopper with helping to define the language in 1959. Hopper was one contributor among many; the specification was a committee product, and the name COBOL (COmmon Business-Oriented Language) reflects the goal rather than a person.
Three design ideas from this period are still visible in every program in this guide:
-
English-like statements.
ADD 1 TO WS-COUNTandMOVE A TO Bwere meant to be readable by managers and auditors, not only by programmers. -
Data described separately from logic. The
DATA DIVISIONdeclares record layouts withPICTUREclauses, so a record on tape or disk and the variables in memory share one description. -
Decimal arithmetic. Business quantities are decimal; COBOL numbers are fixed-point decimal values, not binary floating-point approximations.
Early revisions (COBOL-61, 61 Extended, 65 and 68) were published by CODASYL before national standards bodies took over the maintenance of the language.
Standards, edition by edition
The standardisation path is: CODASYL specifications, then American National Standards (ANSI X3.23 in 1968, 1974 and 1985, now maintained by INCITS), then international standards adopted through ISO/IEC. The table lists the editions that matter to a programmer today and what each added to the language.
| Edition | Also known as | What it contributed |
|---|---|---|
ANSI X3.23-1968 |
COBOL-68 |
The first American National Standard for COBOL. |
ANSI X3.23-1974 |
COBOL-74 |
A second American National Standard that consolidated and extended the first; programs of this generation are the oldest you are likely to meet. |
ANSI X3.23-1985, ISO 1989:1985 |
COBOL-85 |
Scope terminators ( |
ANSI X3.23a-1989, ISO/IEC 1989/AMD1:1992 |
Intrinsic function module |
The |
ISO/IEC 1989/AMD2:1994 |
Corrections amendment |
Corrections and clarifications to COBOL-85. |
ISO/IEC 1989:2002 |
COBOL 2002 |
Object orientation, free-format source, user-defined functions, Boolean, national, binary and floating-point types, exception handling, the compiler directing facility, recursion, a |
ISO/IEC 1989:2014 |
COBOL 2014 |
Dynamic-capacity tables, dynamic-length items, function pointers, IEEE 754 floating point, rounding modes and locale support. |
ISO/IEC 1989:2023 |
COBOL 2023 |
Asynchronous messaging ( |
The 1968 to 1985 rows are a general summary and are not taken from the paywalled texts. The 2002 and 2023 rows follow the INCITS announcements of the approval of ISO/IEC 1989:2002 as an American National Standard (21 April 2003) and of the availability of the 2023 edition; the 1985 to 1994 rows follow the list of standards that IBM’s Licensed Program Specifications print for Enterprise COBOL 6.5, which also records that ISO/IEC 1989/AMD1:1992 is identical to ANSI INCITS 23a-1989 and AMD2:1994 to ANSI INCITS 23b-1993. The WG4 page lists the same early ISO documents: the 1985 standard, the 1992 intrinsic-function amendment and the 1994 corrections amendment.
ISO/IEC 1989:2023 replaced the 2014 edition, which is now withdrawn together with the 2002 edition. A fourth edition is upcoming: the ISO catalogue shows project ISO/IEC DIS 1989 in its Draft International Standard ballot, still under development, and the 2023 catalogue entry says it is expected to be replaced by that draft. Until the fourth edition is published, 2023 is the current text, and nothing on that project should be treated as final.
The timeline below shows the same history at a glance.
The figure shows the standards as milestones; each edition is a superset in spirit but not strictly in practice, because implementers adopt features at their own pace, as the section on dialects explains.
Who maintains the standard
COBOL is maintained by ISO/IEC JTC1/SC22/WG4, the international working group for the COBOL language. Its scope is the development and maintenance of the ISO/IEC standards and other specifications for COBOL, and it delegates the detailed development of its projects to the American technical committee J4, which works under INCITS (the InterNational Committee for Information Technology Standards, an ANSI-accredited standards forum in the United States). That is why each ISO edition after 1985 has an identical INCITS twin, such as ANSI INCITS 1989-2014. The working group also maintains defect reports and technical reports; the WG4 page lists them and a document register where working papers are filed.
The standard itself is a product, not a public document. The ISO catalogue page for ISO/IEC 1989:2023 sells a 1229-page text (CHF 227 when this page was checked), the WG4 page says the standards are obtained through the national member body of ISO/IEC, and no free draft of the 2014 or 2023 text exists. For that reason this guide does not quote the standard. It cites the ISO and INCITS pages for what the standard contains, and it takes the detailed rules, with examples, from IBM’s and GnuCOBOL’s own documentation, which are free and describe what the compilers do. A reader who needs the exact normative wording has to buy the standard; a reader who needs to write working programs rarely does.
Dialects and conformance in practice
A standard describes a language; a compiler implements a dialect. Two facts shape every COBOL project.
First, the oldest standard still dominates real code. Most mainframe programs were written when COBOL-85 was the
current standard, and the phrase "COBOL 85 plus IBM extensions" is a fair description of how much production code is
written: the statement and data model of 1985, with IBM additions such as COMP-3, the PERFORM forms of Enterprise
COBOL, and file and CICS or Db2 integration. Newer features arrived in Enterprise COBOL gradually. The Licensed Program
Specifications of release 6.5 list ISO 1989:1985 and its amendments plainly, and mark ISO/IEC 1989:2002 and 2014 as
"partial support"; the 2023 edition does not appear in that list on the date checked. IBM publishes an appendix of the 2002
and 2014 features implemented in Enterprise COBOL in its Language Reference. Where a feature in this guide comes from a
later edition, its section says which edition introduced it and which release of Enterprise COBOL or GnuCOBOL first
supports it, for example the TYPEDEF clause in Enterprise COBOL 6.5 or PERFORM UNTIL EXIT in Enterprise COBOL 6.3.
Second, every compiler has extensions and gaps. Enterprise COBOL adds COMP-3-style packed decimal, SQL and CICS
coprocessors and Language Environment services; GnuCOBOL implements much of 2002 and 2014 and many vendor extensions,
and can be asked to behave like a chosen dialect; Rocket Visual COBOL and Fujitsu NetCOBOL have their own families of
extensions. The page Compilers and Dialects compares them
in detail.
Asking GnuCOBOL to check a dialect
The -std= option of cobc selects a configuration file that sets reserved words and limits and decides whether
non-conforming constructs are errors, warnings or accepted. In GnuCOBOL 3.2 the values are default, cobol2014,
cobol2002, cobol85, xopen, ibm, ibm-strict, mvs, mvs-strict, mf, mf-strict, bs2000, bs2000-strict,
acu, acu-strict, rm, rm-strict, gcos and gcos-strict; the -strict variants reject extensions the plain
dialect tolerates. The following program uses a 34-character data name, which COBOL 2023 allows (63-character words)
but COBOL 85 does not (30 characters).
IDENTIFICATION DIVISION.
PROGRAM-ID. LONGNAME.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 LOAN-OVERDUE-DAYS-COUNT-FOR-MEMBER PIC 9(3) VALUE 12.
PROCEDURE DIVISION.
MAIN-PARA.
DISPLAY "Overdue days: " LOAN-OVERDUE-DAYS-COUNT-FOR-MEMBER
STOP RUN.
Compiled with cobc -x -Wall and with no -std= option, it builds without a warning and prints:
Overdue days: 012
Compiled with cobc -x -Wall -std=cobol85 (a deliberately restrictive dialect, to show a diagnostic), the same
file is rejected, once for each use of the name:
longname.cob:5: error: word length exceeds 30 characters: 'LOAN-OVERDUE-DAYS-COUNT-FOR-MEMBER'
3 | DATA DIVISION.
4 | WORKING-STORAGE SECTION.
5 > 01 LOAN-OVERDUE-DAYS-COUNT-FOR-MEMBER PIC 9(3) VALUE 12.
6 | PROCEDURE DIVISION.
7 | MAIN-PARA.
longname.cob: in paragraph 'MAIN-PARA':
longname.cob:8: error: word length exceeds 30 characters: 'LOAN-OVERDUE-DAYS-COUNT-FOR-MEMBER'
6 | PROCEDURE DIVISION.
7 | MAIN-PARA.
8 > DISPLAY "Overdue days: " LOAN-OVERDUE-DAYS-COUNT-FOR-MEMBER
9 | STOP RUN.
10 | <EOF>
Source: GNU COBOL Manual
The limit comes from the dialect’s configuration file (30 characters for cobol85, 31 for cobol2002, 63 by default), so
the same mechanism is a cheap portability check: compile once with the dialect of the target and read the messages.
It is not a conformance test; cobc does not claim to check every rule of any edition.
The Year 2000 episode
In the late 1990s many business programs stored years as two digits. The Computer History Museum’s timeline for 2000 describes the problem: date stamps in most previously written software used only two digits for the year, so that computers might be unable to tell 1900 from 2000, and that little went wrong on 1 January 2000 owed much to a massive repair effort by business, government and industry. Its 1960 entry cites a 1997 estimate of over 200 billion lines of COBOL code still in existence, about 80 percent of business software code, which is why COBOL sat at the centre of the remediation work.
Two technical consequences remain in the language and in old programs:
-
Windowing. Many fixes did not widen the field; they interpreted a two-digit year relative to a window (for example 00 to 49 as 20xx). Old IBM compilers supported this with the Millennium Language Extensions: a
DATE FORMATclause, theDATEPROCandYEARWINDOWcompiler options and theYEARWINDOW,DATEVALandUNDATEfunctions. IBM removed these elements in Enterprise COBOL Version 5 and Version 6 (the Migration Guide says they must be removed to compile with those releases), so such code has to be changed before it moves to a current compiler. Current code uses four-digit years and the date functions described in Dates and Times. -
The same lesson again. The 2020 surge in demand for COBOL skills, when several US state unemployment systems reportedly needed urgent changes, is told in the first chapter of Tom Taulli’s book (see below) and in the press. It is a reminder that long-lived business systems are maintained for decades, not a statement about the language itself.
Where the book is outdated
Taulli’s Modern Mainframe Development (O’Reilly, March 2022) is a good narrative introduction to why COBOL and the
mainframe still matter, and this page consulted its first chapter for the Year 2000 and 2020 stories. As a source for the
standards it is dated. It treats Enterprise COBOL 6.3 as the latest release, whereas 6.4 and 6.5 have since
shipped with many more features of the 2002 and 2014 standards (user-defined functions, prototypes, TYPEDEF), and it
predates the 2023 edition, so none of the 2023 additions listed above appear there. When a statement about versions in
a book and in the vendor documentation disagree, follow the vendor documentation of the release you use.
Summary
-
COBOL was specified by a CODASYL committee in 1959-1960 and has been standardised since 1968; the current text is ISO/IEC 1989:2023, with a fourth edition upcoming (DIS ballot).
-
The standard is maintained by ISO/IEC JTC1/SC22/WG4 with the INCITS committee J4, and it is paywalled; this guide cites vendor documentation for the details.
-
Production mainframe code is "COBOL 85 plus IBM extensions"; Enterprise COBOL 6.5 supports 2002 and 2014 only partially, and GnuCOBOL 3.2 lets you test a dialect with
-std=. -
Y2K windowing is legacy: the supporting options and functions were removed from Enterprise COBOL in Version 5.
References
-
ISO/IEC 1989:2023, Information technology — Programming languages — COBOL (ISO catalogue)
-
ISO/IEC 1989:2014 (withdrawn) and ISO/IEC DIS 1989, 4th edition (under development)
-
INCITS: revised ISO/IEC COBOL standard approved as an American National Standard (2002 edition)
-
INCITS: Available now — 2023 edition of ISO/IEC 1989 (COBOL)
-
IBM Enterprise COBOL for z/OS 6.5 Licensed Program Specifications (supported standards)
-
IBM Enterprise COBOL for z/OS 6.2 Migration Guide (removal of the Millennium Language Extensions)
-
IBM Enterprise COBOL for z/OS documentation library (Language Reference, appendix of 2002 and 2014 features)
-
GNU COBOL Manual (
cobc -std=dialects) -
Tom Taulli, Modern Mainframe Development, O’Reilly Media, 2022 (publisher page)