DFT(LINKAGE(SYSTEM)) causes the parameter list to be built in the same way that it was built by the old compilers (including turning on the high-order bit of the address of the last parameter).
This is not the default linkage used by C or JAVA; their default linkage is what you get with the new compiler's default of DFT( LINKAGE(OPTLINK) ). Under the OPTLINK linkage, the last parameter may not even be an address (for instance, if it is a BYVALUE FIXED BIN(31)), and its high-order bit will not turned on even when it is an address. Furthermore, under the OPTLINK linkage, the return value, if any, may be returned in Register 15.
The SYSTEM linkage is assumed for any OPTIONS(COBOL) or OPTIONS(ASM) routine.
When one PL/I routine calls another, it does not matter what linkage they use as long as they match. However, some non-PL/I routines are not declared as OPTIONS(ASM) but do use the SYSTEM linkage. So, for easiest compatibility and migration, you should probably use the DFT(LINKAGE(SYSTEM)) option.
However if you make the SYSTEM linkage your default, you will need to add OPTIONS( LINKAGE(OPTLINK) ) to the declares of any functions (such as the C library function fread) that use that linkage. For example, you would declare fread as follows:
dcl fread ext entry(...) options( linkage(optlink) );