Sunday, February 24, 2008


I've developed embedded systems software for a number of years, mostly networking products like switches and routers. This is not a common development environment for most of the software blogs I've seen, so I'm writing this to show how the other half lives.

Years ago these type of systems would run a realtime OS like vxWorks, if they used an OS at all. Nowadays they frequently run Linux. Programming for an embedded target, even one running Linux, is a bit different from writing a web service or desktop application:
  • The target is likely using an embedded processor like PowerPC, MIPS, or ARM. Everything is cross-compiled.
  • The target may have a reasonable amount of RAM, but it will probably not have any swap space. Memory footprint is an issue.
  • The target is likely using flash for its filesystem. Image size is an issue.
This leads to a different set of trade-offs for development. One has to ask questions before pulling in a library or framework: can it be cross compiled? Is the binary small enough to fit?

In this blog I don't expect to say much about Ruby on Rails, web services, or functional languages of any description. This is a blog about the dirty business of building systems. I hope you enjoy it.