Portability is for people who cannot write new programs
In many cases, the user interface to a program is the most important part for a commercial company: whether the programs works correctly or not seems to be secondary.
If you want an application to be portable, you don't necessarily create an abstraction layer like a microkernel so much as you program intelligently.
Any program is only as good as it is useful.
Intelligence is the ability to avoid doing work, yet getting the work done.
Bad programmers worry about the code. Good programmers worry about data structures and their relationships.
Talk is cheap. Show me the code.
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.