Downward compatibility considerations

As of OS/390® Version 2 Release 10, Language Environment provides downward compatibility support. Assuming that required programming guidelines and restrictions are observed, this support enables programmers to develop applications on higher release levels of the operating system, for deployment on execution platforms that are running lower release levels of the operating system. For example, you may use OS/390 V2R10 or later (and Language Environment) on a development system where applications are coded, link edited, and tested, while using any supported lower release of OS/390 (and Language Environment) on their production systems where the finished application modules are deployed.

Downward compatibility support is not the roll-back of new function to prior releases of the operating system. Applications developed exploiting the downward compatibility support must not use Language Environment function that is unavailable on the lower release of the operating system where the application will be deployed. The downward compatibility support includes toleration PTFs for lower releases of the operating system (specific PTF numbers can be found in the PSP buckets), to assist in diagnosis of applications that violate the programming requirements for this support.

The downward compatibility support provided by OS/390 V2R10 and later, and by the toleration PTFs, does not change Language Environment's upward compatibility. That is, applications coded and link-edited with one release of Language Environment will continue to execute on later releases of Language Environment, without a need to recompile or relink-edit the application, independent of the downward compatibility support.

The application requirements and programming guidelines for downward compatibility are:
  • The application must only use Language Environment function that is available on the release level of the operating system used on the target deployment system.
  • The application must only use Language Environment function that is available on the release level of the operating system used for developing and link-editing the application, by using the appropriate Language Environment object libraries, header files, and macros.
  • The release level of the operating system used for application development and link-editing must be at least the level that is the prerequisite of the compiler product(s) (C/C++, COBOL, Fortran, PL/I) that are used to develop the application.
  • The release level of the operating system used on the target deployment system must be at least the level that is the prerequisite of the compiler products that are used to develop the application.
  • The release level of the operating system used for application development and link-editing must be at least OS/390 V2R10.
  • The program object format of the application must be no greater than the highest level supported on the target deployment system.
The term "Language Environment function" used in the discussion of downward compatibility support refers to:
  • Language Environment callable services (see z/OS Language Environment Programming Reference).
  • Language Environment runtime options
  • C/C++ library functions
  • UNIX branding functions
  • Other new language functionality that has an explicit operating system release prerequisite that is documented in the user publications. For example, with OS/390 V2R9 Language Environment, new support was added so that COBOL programs could dynamically call a reentrant C routine with constructed reentrancy without using #pragma(xxx,COBOL). This support is available on OS/390 V2R9 Language Environment or later, but is not available on prior releases.

The compiler products that support development of downward compatible applications are listed in the table below, along with their prerequisite minimum release level of the operating system. (Prior releases of the compilers beyond those listed in the table are still supported by Language Environment, but do not provide downward compatibility. They only support upward compatibility.)

Table 1. Prerequisite OS/390 release level for the various compilers that support downward compatibility
Compiler product OS/390 release level prerequisite
Enterprise COBOL for z/OS OS/390 V2R10
COBOL for MVS™ & VM, V1R2 OS/390 V2R6
COBOL for OS/390 & VM, V2R1 OS/390 V2R6
COBOL for OS/390 & VM, V2R2 OS/390 V2R6
PL/I for MVS & VM OS/390 V2R6
OS PL/I 2.3 OS/390 V2R6
OS/390 C/C++ compiler OS/390 V2R10
VS Fortran 2.6 OS/390 V2R6
The diagnosis assistance that will be provided by the toleration PTFs includes:
  • Options Processing: Whenever an application exploits Language Environment runtime options that are unavailable on the release of the operating system the application is executed on, a message will be issued. In order to issue this message, toleration PTFs are available down to OS/390 V2R6, and you must apply them on the target system. The use of environment variables, even specific Language Environment ones, is not covered by this support.
  • Detection of unsupported function: In many cases where a programmer disregards the requirements and programming guidelines and exploits a Language Environment function that is unavailable on the release of the operating system the application is executed on, Language Environment will raise a new condition. With an unhandled condition, the application is terminated. In order to raise this new condition, toleration PTFs are available down to OS/390 V2R6, and you must apply them on the target system.
  • C/C++ headers: As of OS/390 V2R10, support has been added to the C/C++ headers shipped with Language Environment to allow application developers to "target" a specific release, in order to ensure the application hasn't taken advantage of any new C/C++ library function. See z/OS XL C/C++ User's Guide for details of how the TARGET compiler option can be used to create downward-compatible applications and prevent application developers from using new C/C++ library functions in applications.
  • Detection of unsupported program object format: If the program object format is at a level which is not supported by the target deployment system, then the deployment system will produce an abend when trying to load the application program. The abend will indicate that DFSMS/MVS was unable to find or load the application program. Correcting this problem does not require the installation of any toleration PTFs. Rather the application developer will need to recreate the program object which is compatible with older deployment system. For information on using the Program Management binder COMPAT option, see z/OS MVS Program Management: User's Guide and Reference.
    Note: Starting with z/OS® V1R8, the c89 utility is no longer by default passing COMPAT = CURRENT option to the program management binder. Program objects created by the c89 utility and native program management binder invocations will use the default COMPAT = MIN.