At first glance, the design of software for multi-core systems appears to be similar to the design of traditional embedded multi-tasking software. But application software for multi-core systems can often be much larger in scale and much more complex than
software that has in the past been developed for traditional single-CPU embedded systems. Hence we need some additional methodological recommendations to guide our work at this new scale and new level of complexity. Before embarking on the design of software for a multi-core system, some differences between multi-core and distributed systems must be understood, and then taken into account when architecting software that is destined to run on multi-core SOCs (Systems-On-a-Chip). Many of the design assumptions that have been the firm foundation of embedded systems multitasking software design for the past 20-30 years, are no longer valid when designing software for multi-core SOCs.