Microsoft and Docker have announced the intention of creating a native version of Docker for Windows. With this comes the promise of the ability to write an application to an abstracted context such as a Docker container. That container can then run on anything the runs Docker. In theory, you could live migrate an application from a Windows Server to a Linux server just as long as they both run Docker. This write once run anywhere theory has been sold before via application level virtual machines such as Java. In theory, any OS running a JVM can run applications written for Java. In practice, this isn’t the default programming model.
There’re fundamental differences in the way Windows and Linux attack problems. This difference adds value for one platform over the other. The differences explain why native applications are still the standard. I don’t believe in the promise of Docker containers as the cure to Windows and Linux application portability. In my opinion future applications will be written leveraging PaaS API’s to services such as Azure, AWS and OpenStack. Eventually, or hopefully one day there will be a standard for web PaaS API’s and the discussion of write once and run everywhere will be settled.
As an addendum – After kicking the idea around on Twitter, I need to highlight the Docker alone isn’t enough to abstract the OS. As mentioned the architectural differences are too broad. Thanks to @vmtyler and @silentlennie for adding to the conversation.