Starting in OpenEdge 11.0, r-code is portable across all platforms, regardless of OS platform, Bit Architecture, Little Endian or Big Endian byte ordering, provided that the application code:
- is written for the same user interface: character mode (CHUI) versus graphical mode (GUI), and
- does not contain references to Operating System specific commands (eg: OS-COMMAND) that are not available on the target platform.
Changes were made to r-code structures to resolve the previous OpenEdge 10.1x r-code incompatibility between 32-bit and 64-bit platforms, eliminate obsolete data structures, pad structures for future growth, and introduce structures to support new capabilities as follows:
OpenEdge 10.1A, 10.1B, 10.1C, 10.2A and 10.2B
- r-code portability between 64-bit platforms and 32-bit platforms.
- r-code supports 1 MAIN Action Code segment and 1 E-code segment.
- Procedure libraries are able to be larger than 4 GB.
- The frame segment limit was increased to 4MB.
- The -noint64 startup option no longer prevents reference to int64 variables, fields or expressions, but it will still change the data type of long integer constants to be DECIMAL as opposed to INT64.
- The -dataset100 startup option is obsolete.
Progress first introduced 64-bit r-code in OpenEdge 10.1A, where the r-code is native 64-bit boundary aligned where previously it was not. This 64-bit r-code implementation means changes to r-code portability until OpenEdge 11.x Therefore, when using a 64-bit OS platform, while either the 32-bit or 64-bit OpenEdge version can be installed, only 32-bit r-code can run with a 32-bit installed OpenEdge version, or 64-bit r-code with a 64-bit installed OpenEdge version can be run.
In other words, in OpenEdge 10.1A, 10.1B, 10.1C, 10.2A and 10.2B, a 64-bit ABL client cannot run 32-bit r-code and vice-versa. 64-bit r-code performs better on a 64-bit platform than 32-bit r-code on a 64 bit Operating System platform, so the decision is between r-code portability or maximum performance when opting for either a 64-bit or 32-bit deployment.
While only 32-bit r-code can be run on a 32-bit platform, there is no r-code portability between pre-10.1A 64-bit products and 10.1A 64-bit products; the pre-10.1A 64-bit r-code was not really "native".
The following table shows where r-code generated in specific version must be or must not be recompiled in OpenEdge 10.1A, 10.1B, 10.1C, 10.2A and 10.2B environments.R-Code Compatibility Rules Table
Therefore, the r-code compatibility rules are:
r-code compiled in 10.0A & 10.0B 32-bit works with 10.1A/B/C 32-bit
r-code compiled in 10.0A & 10.0B 32-bit does not work with 10.1A/B/C 64-bit
r-code compiled in 10.0A & 10.0B 64-bit works with 10.1A/B/C 32-bit
r-code compiled in 10.0A & 10.0B 64-bit does not work with 10.1A/B/C 64-bit
r-code compiled in 10.1A/B/C 32-bit works with 10.0A & 10.0B 32-bit
r-code compiled in 10.1A/B/C 32-bit works with 10.0A & 10.0B 64-bit
r-code compiled in 10.1A/B/C 64-bit does not work with 10.0A & 10.0B 32-bit
r-code compiled in 10.1A/B/C 64-bit does not work with 10.0A & 10.0B 64-bit
10.1B, 10.1C and 10.2A cannot execute r-code generated with version 9, 8 or earlier.
10.2B 32-bit platforms can execute r-code generated with 10.x
10.2B 64-bit platforms can execute r-code generated with 10.1x, but cannot execute 10.0x, version 9, version 8 or earlier r-code.
10.1x may be able to execute r-code generated with 10.2B, but the recommendation is to recompile.
The 64-bit r-code file size will be larger than the 32-bit r-code. The estimated r-code file size growth is between 15 - 35%.
OpenEdge 10.2B,10.2A, 10.1C and 10.1B application code that contains certain functions must be compiled using the -noint64 parameter in order to run on a 10.1A, 10.0B and 10.0A environments. For further information on the -noint64 parameter refer to Article P133958, How does the -noint64 client session startup parameter work?