IBM is a dinosaur company that exists because of embedded connections in government, banking, and defense. They charge 100x the going rate for ancient tech that’s insecure and an absolute nightmare to develop for.
The sooner everyone drops anything associated with IBM or Oracle, the better for everyone. Absolute cancers.
If the only alternative is "AWS, Docker, Kubernetes, Terraform, Spark, Aurora, etc…" I might have to think long and hard about it...
- No devops, you have real sysadmins whose priority is security and system administration, not development.
- Not relearning to invent the wheel every six months. The technology changes incrementally. If you get out of the field for a few years, read the "what's new" sections of the new manuals to catch up.
- Documentation. IBM docs are great, remind me of NASA docs. They have everything you need, you can go days without googling a problem.
- Backwards compatibility. Decades old sources can be compiled, decades old binaries can be run. Architecture changes are handled transparently.
- Simplicity. The interfaces might seem primitive compared to PC OSs, but there's also less complexity, and less attack surface.
- Uptime. Almost everything, including CPUs, is hot-swappable. This doesn't add to the joy, but it's remarkable.
I think it's things like these which makes me thing AWS will remain the top cloud provider for the next few decades.
Azure policies are comparatively a breeze, making it the smart and increasingly obvious choice for any regulated (read: large) corporation.
Consider some ideas which exist in z/OS but not in Unix or Windows:
- record-oriented file system: the filesystem is aware of the record-boundaries of files, whether they contain fixed length or variable length records, etc – and enforces them
- indexed files: key-value type files are built in to the filesystem, not some add-on library
- the catalog: a database mapping file paths (dataset names) to the volumes they are stored on: so you can move a file to another disk volume (or even to tape) without changing its filesystem path. You can kind of approximate this using mount points, symbolic links, etc – but it is a lot messier
- partitioned data sets (PDS/PDSE): like ZIP/TAR files, but again, built-in to the filesystem
- block-oriented terminals: you send/receive data to terminals as a screenful at a time, not a character at a time
- DDnames: your program inherits (the moral equivalent of) file descriptors, but instead of just having numbers, they have names (instead of fd 0, you have a DD called "SYSIN")
You can argue about whether the above features are sensible – the designers of Unix were well-aware of them, but decided they were examples of unnecessary complexity – but sensible or not, they are interesting.
Something that neither UNIX nor Windows have fully embraced to the extent of mainframes/micros.
All the deployments from Java and .NET workloads end up with some kind of compromise to classical UNIX/Windows development.
I think we've had this discussion before. The Language Environment (LE) on z/OS doesn't do that. The Integrated Language Environment (ILE) on OS/400 [0] does do that. But while one part of ILE (the CEE runtime and its API) is common code between z/OS and OS/400 (and also VM, VSE, TPF and OS/2) – that bit doesn't do any of the "keep oldie programs running by recompilation" stuff. Whereas, the parts of ILE which does do that (the OMI to NMI translator, and the NMI to POWER translator), is 100% OS/400 specific, and has no equivalent on any other IBM platform (z/OS included). You seem to be getting led astray by the fact that "Language Environment" means a lot more in OS/400 than it does in MVS – it is a mistake to assume that just because the later uses the same phrase, that it uses it to mean anywhere near the same thing. LE on MVS is just one (relatively small) part of the capabilities provided by ILE on OS/400.
(Also, this "platform independence" doesn't really have anything to do with anything "Language Environment", since it pre-exists ILE entirely – EPM and OPM before it had the same ability. You are associating "Language Environment" with something which was never actually the selling point of ILE, since it was something OPM and EPM already could do, at least in principle. The real selling point of ILE is that it could support recursive/stack-based HLLs such as C and Pascal more efficiently than EPM, and support mixing code from multiple languages much more easily than OPM and EPM allowed. Plus, a lot of its implementation was shared with z/OS and AIX, which was a bonus for IBM – not just the CEE runtime, but also the compiler backend–the later is not considered part of LE on z/OS, rather part of the compiler products)
[0] Yes, IBM i, I know – but I hate that name, it is confusing. IBM should have just stuck with OS/400, it was far more memorable and distinctive.
Language Environment on z/OS is basically a shared standard library and runtime used (sometimes optional) by most of the different high level languages.
It defines it's own register usage conventions and calling convention, and so you must be aware when writing and/or compiling programs whether you want it to be LE compliant or not. The calling convention in LE is very different from the convention used by OS level programs (typically written in Assembler or C).
Most of the time if you are writing a (compiled) application program for z/OS it's best to make it LE compliant. However the incompatibility with base z/OS calling conventions is frustrating because systems programmers mostly avoid writing LE compliant programs due to it being heavy and not working in some of the environments closer to the metal.
So while LE on z/OS is pretty extensive and gives you a common API to program against in different languages, it's also caused a bit of an ABI split and made it harder to share tools between systems and application programmers, which is unfortunate.
Like the above post said, it doesn't really have much to do with the z/OS compatibility story. If anything, the older the program the more likely it is to not work under LE due to LE breaking compatibility with the original calling convention.
z/OS compatibility is kind of oversold to be perfectly honest. Yes, it is likely you can continue to run your very old programs due to 24 and 31bit addressing still being an option, but you better be pretty damn careful to backup that executable if your thinking of ever trying to recompile.
This is so interesting, having witnessed the commoditization of PCs, the Cloud, and now virtual desktops on the cloud. We're basically reinventing the multiuser mainframe after discovering it actually had good proposals.
The problem is, it's being reinvented with a monstrous degree of complexity and fragility. It's retaking the road not taken, but carrying the other road with as well.