There is a parallel between Web Site Frameworks (and friends) and Operating Systems and I think we can build better web site development systems if we're aware of it.
About OS's (at a really light level)
Operating systems really stated out as Monitor programs which allowed a 1950s and '60s 'programmer' to load and run one program at a time on the monster sized, minuscule capable early machines. They sucked, but it was better than programming in machine code.
The big advantage Monitors gave was that if you upgraded the hardware, you reflected the change in the Monitor and your old programs still ran. MS-DOS and CP-M were really Monitors, not operating systems.
Then smart people developed the idea of an Operating System. One problem with Monitors is that they didn't have any way to recover control of the hardware when the application program went into a infinite loop or some other destructive mode. OS's had an executive module which allowed the program to run. It regained control periodically and decided whether or not to kill the program or let it run. In other words, you had to get permission from the OS to run your program. It sat there like a despot, completely controlling what you could and couldn't do and how long you could do it.
To get Back to Web development, I think we're at the 'early-ish OS stage'.
We've already gone through the Machine Code and Assembler Language stage with raw HTML and doing everything with Tables. Monitors roughly correspond to writing everything by hand - with or without a tool like Dreamweaver - one site at a time.
Drupal, Rails, Joomla!, and friends look very much to me like early OS's. When a request goes to the server, it is caught by the framework's machinery. The framework (read OS executive/sultan/king) then decides what to do with it.
So What's the Point?
What's the most successful OS model of all time? UNIX!
UNIX gave Choice to the Programmers and took it away from the OS Designers.
UNIX was a fundamentally different from the other OS's. IBM and everybody else put everything that a good police state needs to control it's citizens inside the operating system where nobody could get at it except the privileged few. UNIX didn't.
The UNIX system consisted of two parts: the kernel, which provides services for it's citizens and userspace, where things are done.
The kernel supports and enables. For the most part, it doesn't control. All the Executive stuff is in userspace which means: it can be replaced by the people Using the machine if it doesn't do what they want.
This is really important so I'll repeat it. The kernel supplies services, but doesn't do anything. It just sits and waits - like a good robot. All the action is in userspace and it can be replaced if you want something different.
All the web frameworks I've looked at over the past year and half have the Executive function embedded in the framework. That is, when a request comes it, it's received and processed by the framework. Right now in Web Development, if you want to do something which is not directly supported by your framework, you have three choices:
- hack together some lame work-around
- don't do what you want
- get another framework
When UNIX came in, it became possible for the Programming Community to build lots of alternate Executive function implementations as drop in replacements for the stuff which shipped with the system. Free Market!!! That's why UNIX is a great development environment and why it makes such a great server environment. The Programming Community developed a lot of stuff and kept the stuff which works.
That couldn't have happened if we'd had to change kernels for every alternative design - or it would have taken a gazillion years longer.
I think we need Web Development kernel. I'm working at spec'ing one out. I call it uWeb (pronounced 'you Web')