Brendan wrote:
Writing an OS that is different/interesting, and then slapping on some sort of compatibility layer for other OSs software is fine (or at least it's much better than not writing an OS that is different/interesting). The risk here is that it's far too easy for the OS to be overwhelmed by the other OS's software and end up as an "accidental clone".
Absolutely. The ideal approach is to know about other APIs while still designing things the way you want, but remembering that somehow common APIs should be possible to emulate on top of it, possibly with reduced functionality, but still run.
Brendan wrote:
To avoid this you need enough native applications (that are designed to make good use of whatever makes the OS interesting/unique). For example, Windows had plenty of applications before Cygwin came along and Windows hasn't become a boring *nix clone; and Linux had plenty of *nix applications before Wine came along and Linux hasn't become a boring Windows clone; but despite having several different/interesting features Minix 3 never had any applications that make good use of those features and is a boring *nix clone that will never be better than Linux and free/open/netBSD.
Basically; if you want people to use your OS instead of another OS then you have to give them a reason to use your OS instead of another OS. Something like "this OS can run GCC and Apache and GIMP and Firefox!" is not a reason for people to use your OS instead of another OS.
That's not the way I see it at my current stage. It is a problem that I cannot run Java-applications in RDOS, because it requires an additional UCM controller module running Linux. A user might also want to use PHP or MySQL, and I think it is a bad idea to write my own database-engine.
And if my API cannot somehow emulate POSIX, then porting Java, PHP and MySQL becomes troublesome, and these free projects might not accept extensive patches to their mainline for an unknown OS, meaning you must keep and update patches manually yourself.