initrd vs initramfs

Monolithic vs Modular kernel vs MicroKernel

Monolithic:
    All drivers, operations and code to perform kernel related tasks are compilied into the kernel.  Interactions with kernel are done through system calls.
    advantages:
        1)  Less code = less complexity
        2)  Less code = smaller size
        3)  Less code = fewer bugs and security issues
    disadvantages
        1)  difficult to patch and test
        2)  bugs can affect large parts of system
  
Microkernel
    Only the fundamental tasks and drives are handled by the kernel - memory management, passing messages between processes.  
    All other tasks are handled in user space by "servers" or "user-mode servers."
    advantages
        1)  easier to maintain
        2)  testing is easier - can swap patches in and out
    disadvantages
        1)  Larger running footprint
        2)  More complex to interact with - port calls from user-mode servers
        3)  Process management can be more complex
        
Modular Kernel
    A monolithic kernel with binary modules/drivers that can me dynamically loaded or unloaded.
    advantages:
        1)  Faster and easier development for drivers that can operate as modules
        2)  Easier to added drivers/services via modules
    disadvantages
        1)  More interfaces to pass through increases possibility of bugs
        2)  Maintaining modules can be more difficult
        

To be clear, loading a module dynamically into the kernel can incure some overhead compared to having the module compiled into the kernel.  But, 
this can be offset by having an overall smaller footprint in the monolithic kernel due to not having unnecessary code compiled into the kernel.  This 
is chiefly beneficial to embedded systems.
        
        
        
        
        
Resources 

http://www.systhread.net/texts/200510kdiff.php
http://en.wikipedia.org/wiki/Microkernel
http://en.wikipedia.org/wiki/Monolithic_kernel
http://en.wikipedia.org/wiki/Initramfs
