Overview
Today, enterprises need efficient, consistent, and less complex ways to develop quality applications and to maintain their existing inventory of applications. The trend in application development is to modularize and share code, and to develop applications on a workstation-based front end. Language Environment® gives you a common environment for all Language Environment-conforming high-level language (HLL) products. An HLL is a programming language above the level of assembler language and below that of program generators and query languages.
In the past, programming languages also have had limited ability to call each other and behave consistently across different operating systems. This restriction has constrained those who wanted to use several languages in an application. Programming languages have had different rules for implementing data structures and condition handling, and for interfacing with system services and library routines.
Language Environment establishes a common runtime environment for all participating HLLs. It combines essential runtime services, such as routines for runtime message handling, condition handling, and storage management. All of these services are available through a set of interfaces that is consistent across programming languages. You can either call these interfaces yourself, or use language-specific services that call the interfaces. With Language Environment, you can use one runtime environment for your applications, regardless of the application's programming language or system resource needs.
- Basic routines that support starting and stopping programs, allocating storage, communicating with programs written in different languages, and indicating and handling conditions.
- Common library services, such as math services and date and time services that are commonly needed by programs running on the system. These functions are supported through a library of callable services.
- Language-specific portions of the runtime library. Because many language-specific routines call Language Environment services, behavior is consistent across languages.
Figure 1 shows the separate components that make up Language Environment. POSIX support is provided in the Language Environment base and in the C language-specific library.

- z/OS XL C/C++ (feature of z/OS)
- z/OS C/C++
- OS/390® C/C++
- C/C++ for MVS/ESA
- C/C++ for z/VM®
- XL C/C++ for z/VM
- AD/Cycle C/370
- IBM Toolkit for Swift on z/OS
- VisualAge® for Java™, Enterprise Edition for OS/390
- Enterprise COBOL for z/OS
- Enterprise COBOL for z/OS and OS/390
- COBOL for OS/390 & VM
- COBOL for MVS™ & VM (formerly COBOL/370)
- Enterprise PL/I for z/OS
- Enterprise PL/I for z/OS and OS/390
- VisualAge PL/I
- PL/I for MVS & VM (formerly PL/I MVS & VM)
- VS FORTRAN and FORTRAN IV (in compatibility mode)
IBM Open Enterprise SDK for Go
IBM Open XL C/C++ for z/OS 
Although not all compilers listed are currently supported, Language Environment supports the compiled objects that they created.
Language Environment supports, but is not required for, VS Fortran Version 2 compiled code (OS/390 only).
In many cases, you can run compiled code that is generated from the previous versions of the previously-listed compilers. A set of assembler macros is also provided to allow assembler routines to run with Language Environment.
For more information about IBM Toolkit for Swift on z/OS, program number 5655-SFT, see the product documentation.
For more information on IBM VisualAge for Java, Enterprise Edition for OS/390, program number 5655-JAV, refer to the product documentation.
Figure 2 illustrates the common environment that Language Environment creates.

Figure 3 illustrates the common environment that Language Environment creates for AMODE 64.

Language Environment supports 64-bit addressing for applications that are written in
C, C++, COBOL, PL/I, or Language Environment-conforming Assembler.
Before support for 64-bit addressing, Language Environment applications could be written in COBOL, PL/I, C, C++, Fortran, or Language Environment-conforming Assembler. These applications could run in either 24-bit addressing mode (AMODE 24) or 31-bit addressing mode (AMODE 31). Language Environment includes some support for compatibility between these two addressing modes. In AMODE 24, addresses are 24 bits in length, which allows access to virtual storage up to 16 Megabytes. This is often referred to as the 16-megabyte line. AMODE 31 applications use addresses that are 31 bits in length, which allows access to virtual storage up to 2 gigabytes. This limit on 31-bit addressing is referred to as the 2-gigabyte bar. Both of these terms can be shortened to the "line" or the "bar" when used in the context of addressable storage.
- Existing or new Language Environment applications that use AMODE 24 or AMODE 31 can continue to run without change. They run using the same Language Environment services that existed before 64-bit addressing was introduced, and these services will continue to be supported and enhanced.
- Language Environment applications that use AMODE 64 are not compatible with applications that use AMODE 24 or AMODE 31. The only means of communication between AMODE 64 and AMODE 24 or AMODE 31 applications is through mechanisms that can communicate across processes or address spaces. However, Language Environment applications that use AMODE 64 can run with existing applications that use AMODE 24 or AMODE 31 on the same physical System Z.
- Where necessary, there are new Language Environment runtime options to support AMODE 64 applications. The new runtime options primarily support of the new stack and heap storage that is located above the bar. All other existing runtime options continue to be supported and enhanced for AMODE 24 and AMODE 31 applications.