Embedded System Characteristics

The only way to eliminate (software) system instability is to attach it at its roots. That is to say we must eliminate the design and coding practices (however entrenched) which subvert system stability.

The direct or indirect use of general purpose dynamic memory allocation schemes are a primary enemy to systems which must execute indefinitely.

While general purpose dynamic memory allocation has its place in processes that are finite by design (e.g. compilers and other commands which run to completion within their own process memory space), these techniques have no place in systems whose requirements include indefinite (by design) execution times. This includes, but is not limited to most (but not all) embedded systems.

Here I limit my definition of an embedded system to have the following characteristics, the first of which is paramount.
Memory management is one of the most important issues with regard to long running programs.