spotracite wrote:
Personally, I believe that Unix isn't great, but isn't terrible - some design choices are very weird
The same stands for WinNT too (why are all the file APIs doubled with ASCII and UCS2 strings? And what if I want to use more UNICODE code points than what's on the BMP? It is extremely weird, why can't I just use UTF-8 filenames with the ASCII API? (Would be backward compatible BTW)
spotracite wrote:
A specific quote, however, from 1987 on the Usenet, draws my attention: "Those who do not understand Unix are condemned to reinvent it, poorly."
That quote refers to the fact that the UNIX operating system despite being extremely small includes everything that you might need (multi-platform, file abstraction, directory hierarchy, multi-tasking, time-sharing, multi-user etc.), all the OS concepts ever invented. If you think about it, there's nothing new invented since then (just because back then they had one CPU core only and now we have more doesn't change the concept of cooperative multitasking for example, it's a minor implementation detail. Same way, the fact they only had line printers instead of a screen and keyboard, does not change the concept of I/O peripherals, that's just a matter of drivers). Actually, even with the GUI and WIMP paradigm there's nothing new since Eckelbart's famous demo in the 60's.
The hard truth is, IT companies are just selling exactly the same crap over and over again in a different sugar-coat.
spotracite wrote:
Most hobby operating systems lean towards the Unix-like variety. Why is this? I think it can be argued that it's easy to understand, the simplicity makes its implementation easy, or perhaps POSIX is just appealing because of how well defined it is.
These aren't so. UNIX isn't easy to understand (just think about the infamous "You're not supposed to understand this" comment in the source). And POSIX is everything but well-defined. Seriously, strlen() is in string.h, mblen() in stdlib.h and sprintf() is in stdio.h while all of these operate on strings? Or mkdir() in stat.h (what the hell does it do there?) and rmdir() in unistd.h? Why not in stdio.h?
Nope, the only reason why hobby OS choose POSIX because of portability and the sheer number of Open Source projects they could use on their OS.
spotracite wrote:
My point, dear reader, is that our community teaches new developers to start writing a Unix-like operating system.
Yeah, because that's the only option. You don't have the WinNT internals documented, and even if you had, take a look at ReactOS and Wine to see how difficult it is to support that. Not to mention that it's not a wide-spread standard, rather it is the intellectual property of a single company, so you could be sued by M$ any time. There's no such law issue with POSIX standard.
spotracite wrote:
I'd be interested to hear why you did (or didn't) write a Unix-like system, and if you didn't, what ideas did you go for?
You don't really have another option than Unix. Read Andy Tannenbaum's "Modern Operating Systems" book, it makes an attempt to compare Unix and WinNT interfaces to provide an alternative to Unix. My personal opinion is, it fails miserably simply because WinNT internals aren't public or aren't free to use or aren't documented, or aren't standard in the first place and subject to change any time. Go on, buy and read that book and see for yourself!
To design an interface from ground up (neither Unix nor WinNT), that's a task for the real experts only, all beginners will fail in that. And even if you manage that somehow, you'll have to rewrite all applications yourself, because you won't be able to compile Open Source projects for your OS. But not impossible, see
MenuetOS (and you should learn why it was forked into KolibriOS). You should also learn about
SkyOS, which had it's own interface too, and why it was discontinued (The wiki is wrong about SkyOS being unix-like, read
this interview with Szeleney).
Cheers,
bzt