>The problem is that "policy" and "mechanism" are relative
Quite right, for example somebody might decide that the routine which draws the desktop background a certain color would be the "mechanism", whilst the choice of color to draw would be the "policy".
What a fool they would be because they have failed to appreciate your assertion that policy and mechanism are relative and can not be neatly
divided, which is why the problem of "how to decide what color to set the desktop background" is that age-old computer science puzzle yet to be solved by *any* desktop for over 200 years!
However, your innovative "relative mechanism", could at least foster a spirit of compromise between the hard pressed developer and the unreasonable end user: The developer gets to pick R and G values and the end user is allowed to set the B value and finally there is peace to one and all...
>X11 is policy for the graphics driver.
Yes, thats true, I could use framebuffers if I wished instead of the X protocol, that's not "for" the graphics driver however, the graphics driver doesn't care either way what comes above it. In the same way X doesn't care what widget libary or window manager I use.
See how much choice that gives me, the end user, so far, it's _my_ policy to pick whether to use X or something else. I can choose the mechanisms I use according to my policy.
That's good, it means freedom of choice, if I want I can code something directly with X if I wanted and have it display on my desktop regardless of GNOME/KDE, etc, etc or on another destop on my desktop running either, the thing that lets me have that freedom is the clear distinction between mechanism and policy, and whilst I have sympathy with the viewpoint that finding that distinction is _sometimes_ not that obvious but most experienced unix devs can make that call pretty well.
If you use gitub do you honestly think that Linus has some hardcoded values for github's html layout in the git backend, no, that would be mad!
>If you take "mechanism not policy" more abstractly you could say it just means "everything should be as flexible as possible to allow the policy above it to do what it wants" and to that I'd say YAGNI. Bloat bloat bloat.
Yes, good god, imagine the gigabtyes of code required to code window that asks "what fontsize do you want?", and then the terabytes of diskspace required to store 255,255,6 in a file somewhere, think of the inodes, please won't someone think of the inodes!!!
Seriously, I do take your point that defining the boundary in some cases is not obvious, and in some cases you see that boundary only after having written a lot of code, and it can be a bit dispiriting having to rewite a lot of code (trust me I've done it more than once ;-) especially if you have external pressures like deadlines, politics etc. etc. that would be involved in having to make that decision.
Have a nice weekend!
P.S. Someone mentioned flamewars, I see nothing but a set of intelligent people arguing a conflict of interest in a calm, rational way, at least we can all agree that GNOME 3 is the emacs of desktops (ducks for cover ;-)