Imagine if code was written an appropriate level of abstraction such that it contained no platform dependencies. In such an scenario, the code could pick and choose at run time the platform it prefers to run on. This choice can be dictated by multiple factors including the enterprise policy. This scenario is like your cell phone call being routed through any network available based on existing arrangement and cost to the service provider. As a consumer you don't care how it is routed as long as it is routed and not dropped.
In such a scenario, what choices would the code want to be offered? Certainly not Windows or Solaris or Linux. It is going to be .NET or Java. The code would expect these two frameworks to interpret the high level declarations in the code and compile it into binaries that are appropriate for the underlying platform.
The point is the code couldn't care less if the system has solaris or linus or windows. All the code cares for is it is given a filesystem to store data, a communication system to send/receive messages and a visual system to display its output or take input. It would like to carry out all these transactions in a secure fashion and if not, it would like to be told that.
So why is Java still be released as a SDK? Isn't it time for Java OS? If you look at JDK, it uses the underlying OSes filesystem, communication system, security system and visual system. In an interoperable world, these would become run-time options for the code.
What has changed is the "S" in the OS. It used to be one system now it is a datacenter system.