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-COUNT and MOVE A TO B were meant to be readable by managers and auditors, not only by programmers.

  • Data described separately from logic. The DATA DIVISION declares record layouts with PICTURE clauses, 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 (END-IF, END-PERFORM, END-READ and the rest), the inline PERFORM, EVALUATE, CONTINUE, INITIALIZE, reference modification, nested programs and CALL ... BY CONTENT. The base that most existing mainframe code was written to.

ANSI X3.23a-1989, ISO/IEC 1989/AMD1:1992

Intrinsic function module

The FUNCTION syntax and the first set of intrinsic functions.

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 SCREEN SECTION, file sharing and record locking, a standard Report Writer, and Unicode support.

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 (SEND/RECEIVE), Boolean XOR and shift operators, 63-character words, timed PERFORM, PERFORM UNTIL EXIT, inline exception checking on PERFORM, DELETE FILE, VALUE for numeric-edited items, user-defined EDITING, USAGE ... NO SIGN, INSPECT ... BACKWARD, LINE SEQUENTIAL organization, SET of the length of a dynamic-length item, SUPPRESS WHEN on alternate keys, COMMIT/ROLLBACK, and the non-fatal EC-I-O-WARNING condition.

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.

timeline title COBOL from 1959 to the 2023 standard 1959 : CODASYL committee starts at the Pentagon 1960 : COBOL-60 specification 1968 : ANSI X3.23-1968 1974 : ANSI X3.23-1974 1985 : ANSI X3.23-1985 and ISO 1989:1985 1989 : Intrinsic functions amendment 2002 : ISO/IEC 1989:2002 - objects, free format, functions 2014 : ISO/IEC 1989:2014 - dynamic tables, IEEE 754 2023 : ISO/IEC 1989:2023 - edition 3 Next : 4th edition in DIS ballot

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>

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 FORMAT clause, the DATEPROC and YEARWINDOW compiler options and the YEARWINDOW, DATEVAL and UNDATE functions. 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.