The symlinks are there for interfaces that are expecting both the binary, the headers, and 'Resources' already at that level - and not where they really are.

The subdirectory 'Current' is a symlink too.

$ ls -ailo Current
6491 lrwxr-xr-x 1 root 1 Dec 9 09:37 Current -> A

It resolves to the real directory 'A'. That's lots of symlinks.

And the iPhone has a similar architecture. And back at the Macworld when the iPhone was first announced a bunch of giggly Mac pundits spent long minutes speculating why that operating system was called 'OS X' and there was no 'Mac' in it.

Yet reflecting on the portent of this bit of research it all becomes a bit clearer. The OPENSTEP come over from Redwood City already ran on NeXT machines, on SunOS, on HP-UX, on Windows NT; NeXT used fat binaries to make this possible; yet forces were at play that wanted a reversion to 'MacOS' - which essentially was long dead by then.

The directories 'Contents' and 'MacOS' don't seem needed at all: 'Contents' normally doesn't contain anything more than an 'Info.plist' which could fit just as easily in the parent directory; and 'MacOS' means nothing. At least not in a technical sense.

Yet they've both been there for ten years now. [Eleven years ago yesterday the ink dried on the 'merger' agreement between Apple and NeXT.]

The 'MacOS' directory does nothing: OPENSTEP bundles are ready to run on a variety of platforms using a variety of CPUs and the OPENSTEP platform is 'open' as its name implies. It's not bound to Windows NT or FreeBSD or Sun or HP-UX. And it's ready to run on Motorola or PowerPC or Intel CPUs.