Open source software in embedded systems
Open source software and embedded systems have had a long, somewhat parallel, and often divergent development process. Embedded systems used to be characterized by small, low-capability processors that were only able to manage the basic functions for particular designs. A good example is the remote control for a television. These often have a 4-bit processor with very limited resources, but also very low cost and power consumption. There is a lot you CAN'T do with such a device, but it does serve its purpose. It is unlikely to find any operating system on such a device, except in an abstract sense.
Open source software has most copiously been developed for use on desktop machines. This is mostly due to the massive numbers of such machines. Unlike the embedded processor world, desktop machines have relatively few brands. And even more, with the ability to support operating systems, the differences in equipment between vendors is masked by the intervening layers of software.
Thanks to the ever decreasing costs, increasing performance and availability of lower power devices, embedded systems now can have most of the processing power of a desktop system. They most often lack the same degree of human interface and flexibility found in a desktop.
Even for designs with limited processor capabilities, the advances in desktop-based tools have allowed a much wider range of software options to exist for embedded systems. As one example, it is now commonplace to find Linux running in routers. With better tools and more flexible development environments, it is now also significantly easier to share code between projects. There is still likely to be some challenge in getting everything to port properly, but it is not the same degree of difficulty as porting code from a 14-bit paged memory architecture written in assembler to a completely different core in a different flavor of assembler (which is probably easier to just rewrite and match a functional description of the solution).