rdos wrote:Intel certainly believed in this new feature when they defined the IA32, but since then "portable OSes" have made the feature obsolete.
Not "portable OSes" did this. The IA32 success rode on DOS and Windows 3.11, neither of which even an idiot could call "portable" designs.
Portable
languges did this. By concept they simply don't support segmented memory properly to make it useful.
rdos wrote:Good designs utilise all possible features on all platforms, but provide them through a unified interface and degrade gracefully in the presence of a platform that doesn't support a feature.
That is
your definition. And a poor one, at that: Such an OS would not run efficiently on
any platform because it would have to "degrade" quite a bit on every single one of them.
A good portable design utilizes those features that allow it to run on all intended targets with as little degradation (and thus, efficiency) as possible. It also minimizes the development effort necessary to support all intended targets by encapsuling those parts that
are target-specific.
Without meaning to offend, but you look on everything through your Assembler / RDOS glasses. One cannot help but notice that you still feel you have an axe to grind about Intel no longer considering segmentation-based operating systems, over a decade ago. This skews your POV significantly, IMHO.
rdos wrote:Most of today's portable designs:
* Do not work on processors without paging
* Do not work on processors with less than 32-bits addressing
* Do not work in segmented memory models
* Do not use advanced memory-protection models (beyond paging) even if they are present
* Do not work on processors with odd memory configurations (like signal processors)
Looking at that list, I'd like to ask which "portable designs" you looked at when making that evaluation. Aside from the Unixes (*BSD, Linux et al.) I'd be hard-pressed to name
any "portable designs"...
The "big irons" today all have paging, >=32 bit addressing, couldn't care less about segmentation and have pretty standard memory configurations. Thus, operating systems adapt to that environment.
Those systems
not meeting these criteria usually fall in the "embedded" / "dedicated" arena, where there's a wholly different ballgame going on, where "portability" isn't that much of a subject as the work to be done is pretty specific anyway.
rdos wrote:Add to this the "bloat factor". I've looked at GCC and LIBC, and these are horribly bloated designs because they want to support horribly bloated library standards that almost nobbody uses in their full definition.
That would be C99, C++0x, Objective-C and POSIX, then. Your definition of "almost nobody" is a bit funny.
rdos wrote:In essence, the success of "portable designs" is the success of bloated software.
The success of portable designs is that human work is much more expensive than another CPU core added to the task. Highly efficient software is still being written, but it has become a niche in the embedded / dedicated arena (see above).
I'd be surprised if there is
any company today that employs Java programmers because it's a great language or because it's so fast and efficient or because it's "write once, run anywhere". They do employ them because they are readily available on the workforce market, and because they can RAD circles around a C or ASM coder. Those companies couldn't care less about segmentation or advanced memory protection schemes if they can undercut the competition by 5% because their code monkeys are churning out code faster than the competition's code monkeys.
We - meaning highly skilled specialists that can do more than pasting together design patterns at piece rate - are a dying species. We can try and fight, keeping a niche of efficient beauty alive. We can try and fight, trying to at least go down in flaming glory. We can give up and join the masses of the code monkeys.
What we
cannot justly do is blame
either the CPU manufacturers nor the "mainstream" OS developers to go where the profit is.