Writing something that beautifully suits how *you* want to use it (then expecting other developers to spend 3 times as long as you did to rewrite most of your crappy/inflexible code a few times, so that it's actually useful) does work well for open source software. This is mostly because other developers don't want to help until they see something work (so you rush to get any crud working to attract volunteers).bewing wrote:*sigh* Quite an aside there, based on a misinterpretation of what I said.
There are many philosophies you can use when building something for the first time. Building something so that it beautifully suits how *you* want to use it, is one of the best methods known for inventing new and wonderful things. The number of you that reject that pragmatic concept astonishes me. Trying to create a contraption that does everything for everyone is one of the *worst* ways known to make a good product. Perhaps you whippersnappers should contemplate that.
For example, imagine if I wrote a crappy Unix clone that doesn't support SMP, only runs on 80386 and doesn't have many device drivers, and it takes me 2000 hours of work. Then 9 other people see it and volunteer to help, and each volunteer spends 2000 hours making it work properly (and support SMP and other CPUs). That adds up to 20000 hours of work (but I would've only done a small part of it).
For "non-open source" software this doesn't work - it's much more efficient to spend 1000 hours designing the complete system, then spend 9000 hours implementing it once (ie. minimize the rewriting because there's no volunteers to fix your "lack of design" for free).
When designing an OS you should take into account *everything*. This might mean considering Unicode and deciding it doesn't suit your OS's goals, and doesn't mean implementing everything.bewing wrote:Right back atcha -- do you honestly not realize that it would take an infinite amount of code to take into account *everything*?Brendan wrote: There may be a fundamental flaw in the way you approach OS design, and it's a flaw that (IMHO) other OS developers might share.
When designing an OS, you should/must try to take into account *everything*.
What you want to avoid is not taking into account something during the design, and then changing the design (and rewriting everything that's effected by the design change) when you realise you failed to take something into account.
So you'd write the "US only" version, then waste time rewriting parts of it to support internationalisation, then waste more time trying to maintain the old/legacy "US only" version, and expect all the applications programmers to provide 2 seperate versions of their applications (one for the crippled/legacy version of the OS and another for the proper version of the OS)?bewing wrote:I disagree. I will simply end up with two mutually incompatible versions of the OS. A US version, and an international version. The US version will be tiny and ultra-efficient, and the other will support everything for everyone and be fat and slow.If you don't you'll either end up with "hack on a hack on a hack" or "rewrite after rewrite after rewrite" as you try to add things you didn't originally consider.
Why not design the OS for internationisation, and then only provide keyboard mappings, fonts, time zone information, etc for "US only"? What exactly would make the US version tiny and ultra-efficient compared to an internationalised OS that's been installed as "US only" (ie. installed without the unneeded data files for other countries)?
You'd still need to handle time zone differences (America isn't like China, with one time zone and consistant rules for the entire country), so not supporting internationisation here saves you some data files and nothing else.
If you support more than a few fixed size bitmap fonts (which look like crap when they're enlarged and don't support italics or bold) then you'll need some sort of font engine anyway. Not supporting internationisation here saves you some (optional) font data files and nothing else.
For keyboard drivers, how much CPU time do you think the keyboard driver consumes (would I need to buy an extra CPU just to handle the load from keypresses)? Does a hard-coded "US only" translation table take up less room than a dynamically loaded "US only" translation table, or are you worried about the 23 extra bytes of code needed in the keyboard driver to load the translation table from disk?
Probably the worst part is handling bidirectional text (e.g. languages like Arabic, that are written from right to left). This might add a few KB of code to your GUI (but including graphics and sound, the GUI is probably 50 MB or more anyway, so a few KB isn't going to matter much).
An OS is more than just a kernel - usually "OS" includes device drivers, some daemons, a GUI (or CLI?), file system code, etc, but an OS is more than that - it's also a set of specifications that ensure interoperability between components.bewing wrote:Most of the above examples of internationalization dealt with formats and daemon processes. These are all userapp level considerations. Almost none of them should be (or need to be) hardcoded into the kernel or OS or API. They are irrelevant to OS design.
Take my micro-kernel as an example - if an application programmer wants to do a "Hello world" application, do I (the OS developer) tell them to go speak to the GUI developer for whichever GUI they're writing the application for, or do I have a standard "GUI interface protocol" that all applications and GUIs rely on for interoperability (to ensure that any application works with any GUI)? The micro-kernel doesn't care how the applications communicate with the GUI (it's a user-level issue), but that doesn't make any difference - it's still an OS issue.
Unicode is unwieldy. The reason for this is that the variety of human languages is unwieldy. There won't be a less unwieldy standard that replaces Unicode, unless you can think of a way to get rid of the majority of the world's population so that there's less variety in human languages.bewing wrote:Unicode/UTF is one exception -- since it directly impacts the concept of "string termination". However, I consider the current impementation vastly unweildy, and I think it will certainly be completely superceded at some point by something better. Implementing and supporting a botched standard is not a guaranteed way to gain acceptance for your OS.
One second before the OS boots, and three seconds before the OS is uninstalled - sound much better than 1.05 seconds for the OS to boot and three years before the OS is upgraded...bewing wrote:And I didn't mean to imply I was going to use ASCII-7. Of course I will be implementing extended ANSI Latin1. I have 8 bits, and my target is efficiency, remember. I want the US version of the OS to boot to a full GUI shell in under 1 second, and I'm well under that target, currently.
Most OSs boot slow because device drivers, daemons, etc are started one at a time and not in parallel. The other reason is loading large amounts of graphics data (icons, bitmaps, etc) for the GUI. Bloated code and inefficiency do contribute to this, but that doesn't really have anything to do with internationisation.
Cheers,
Brendan