There's no such thing as an embedded system
This year marks the 20th anniversary of Embedded Systems Design (ESD) magazine. That's a noteworthy achievement, but it's creating a bit of a mid-life crisis for some of us. "What did embedded systems look like 20 years ago?" "What will they look like 20 years from now?" "Does this power supply make me look fat?"
The answer, it turns out, is that it doesn't matter. There's no longer any such thing as an embedded system.
Richard Nass, ESD's editor in chief, likes to describe an embedded system as "a computer whose end function is not to be a computer." According to him, microwave ovens and televisions are embedded systems because they contain computers but aren't intended to be computers. Conversely, the desktop computer I'm using to compose this article is not an embedded system as Rich defines one, because it contains a computer that is intended to be a computer. Or something like that. Rich's definition is pretty conventional.
With all due respect, that definition is wrong. The reason it's wrong is because there's no longer any such thing as an embedded system. Honestly, there never has been such a thing. Let's look at some examples that prove my point. How would you define my desktop computer if, in addition to running Emacs, it was also controlling my lawn sprinkler system? Or my home heating and air conditioning system? And this will happen, just as soon as I can get my wife and kids out of the house for a couple of days.
I recently worked with a client whose product is a control and monitoring system built from rack-mounted x86 server motherboards. The operating system is based on a real-time Linux kernel, and big chunks of the application logic will be written in Java. That application is the control loop, not just a babysitter for it. The system will probably even sport an e-mail transfer agent and web server, so it can "phone home" for help and status checks.
Several ongoing professional projects of mine involve mobile, non-x86 platforms running Linux. At least one is running an in-memory database management system that speaks SQL, and at least one more will likely choose to go that route as well. Both products will feature web servers and e-mail capabilities, and have 802.11 networking built-in so they can push data to a service center whenever there's an open access point in range.
I just finished a firmware updater for a product using flash memory. That product also had a web server, and it took lots of Java script to make sure the user saw what we wanted them to see in their browser window before, during, and after the firmware updating process.
The control system example is PC hardware, doing a lot of non-PC-like things. The other examples aren't PCs, but they run a lot of software commonly associated with PCs. So it seems that there's no point in trying to assign an "embedded" vs. "non-embedded" label to a product based on what kind of hardware or software it uses.