This paper presents two ways of building dedicated embedded operating systems. The constructive approach consists in starting from a minimal kernel and adding abstractions as they are needed, whereas the destructive approach promotes the idea of customizing an existing operating system by removing unnecessary abstractions. We compare these two approaches on the example of building an embedded Java operating system and discuss the pros and cons of each method. We conclude by exhibiting the weakness of each approaches concerning dynamic adaptation of the system