Modern operating systems allow user applications to share code and dynamically add new extensions to themselves. Many operating systems allow for extending the kernel capabilities as well. It is the responsibility of the loader-linker sub-system to perform these operations. In this paper, we will describe the advantages of using the ELF format and present alternate techniques for dynamic linking in the context of embedded systems. We will then describe how this can apply to dynamically extend the kernel of an operating system, and present a runtime software component replacement technique.