In the Wintel world, it’s not uncommon for a new release of the Operating System to ‘break’ programs that previously worked. Given that users are running both Microsoft and third-party code, it’s understandable that problems crop up. IBM’s mainframe OS, on the other hand, has a reputation for being 100% backward compatible. A program that would run on OS PCP 1.0 will run on the latest zOS version. This is because IBM puts a LOT of effort into making sure new code is compatible with old code.
In 50+ years of working with the OS, I’ve only known of one upgrade that broke anything, when the logic of Write-To-Operator and Write-To-Operator-Reply functions changed. And that problem could be fixed by a simple re-assemble or re-compile, as long as the programmers were using IBM’s coding tools.
If you coded using IBM’s macros and libraries, you didn’t worry about updates breaking your programs and you coded pretty much independent of the hardware. There might, however, be instances where a programmer really needed to code down to device specifics. If one coded his disk I/O with logic that depended on a fixed length of a disk track or a specific a specific number of tracks on a cylinder, or number of cylinders, one was limited to files on specific devices. However, if one went the extra mile and queried the OS as to the layout, capacity and characteristics of a device and coded using the values returned by the OS, the program would continue to work on devices with different layouts.
I once coded a Checkpoint/Recovery package that bypassed the software the OS provided. I was programming ‘right down to the metal’, building my Channel Programs on-the-fly; doing my I/O on a SIO & TIO level. The system was using 3330-11 disks: 13030 bytes/track; 19 tracks/cylinder; 808 cylinders. I had to know when to switch tracks and cylinders. I could have coded based on 3330-11 values. Instead, I queried the OS for the values related to the disks and used what the OS returned: in this case, 13030, 19, 808. If the software were later run using (for example) 3390-9 disks, the OS would have returned 56663, 15, 3339 and my program would have used those values and continued to work.
If you did things the easy way and used IBM’s tools, you never had to worry about backwards compatibility. And even it you had to stray outside the ‘easy way’, IBM gave you the tools to make sure you could still maintain compatiblity.
Compatibility is more than just a practice or policy at IBM. It is a philosophy, a mindset. 😀