The Things Which Make My Head Explode

This is cross-posted from my blog on the Yocto Project web site. Please comment here or over there. And you can find a lot of great embedded Linux content over there as well.

I was going for an easy run in Hillsboro, Oregon a couple of days ago and trying to think about a talk I have to give next week at the Linux Foundation Collaboration Summit in San Francisco. This was partly to take my mind off of the really horrible nasty weather we have been having of late - I heard we may break an all-time record for the most rainfall in the month of March in Oregon. Makes for a wet wet wet run.
One particular slide I'm thinking about really explains why the Yocto Project is so important to the growth of intelligent embedded systems and Linux. Unfortunately, I probably can't explain it the way I want to, for fear that someone might be offended.
Here's the picture: you have the usual software layer cake which shows a stack of software, from the operating system at the bottom up through middleware and development frameworks up to applications. When you think about the current state of the art for client and server computing, the operating systems layers are pretty stable because there are only a few choices here. And for clients, I'm even thinking about smartphones and tablets. There are a few, stable OS choices which offer a rich set of services for application developers.
So for clients and servers, the point of flexibility really moves up into the app space. This is because every smart phone, tablet, laptop or server is designed to allow the purchaser to install their own applications after the purchase. These applications are not designed specifically for that exact device, but are intended for a range of devices.
Well, duh.
You know this is true - even applications for the iPad* which wanted to upgrade their graphics for the "new" iPad were designed so that they would scale from old to new device and not require multiple versions. It takes a massive amount of work on the system designer's part to make certain that they have enough flexibility to allow for a broad pool of aftermarket apps.
Not so in embedded. Oh sure, some people will design an embedded app for a client or server OS and cross their fingers that they can sell them to customers who will use said client or server OS. Generally the point of flexibility is much lower in the stack. You want to flex the OS layer around various fundamental aspects of the system to get exactly what you want.
Otherwise you would have people bury smart phones in their smart refrigerators, which seems like a really dumb thing to do.
Another way of putting this is that what makes my head explode is not the complexity of app portability. It's the complexity of hardware flexibility.
For my talk, I was thinking about using an image from the poster for the movie "Brazil" and moving to the various places which shows where my head explodes and why it's so different between embedded and client or server computing.
I'm just worried someone will think it's too violent.
For more complete information about compiler optimizations, see our Optimization Notice.