Apple's Phil Shiller has been trash-talking Android in the press these past few days - just as Samsung is about to launch its Galaxy S4. "Public, preemptive slamming of a competitor is far outside Apple's PR wheelhouse; it's a dramatic shift for a company used to making news rather than reacting to it. But why is it happening?" The Verge hits the nail on the head: "Cupertino's behavior this week is yet another symptom of Samsung's stratospheric rise in the smartphone market globally, a rise that challenges Apple and has outright stifled Android competitors like HTC and Sony."

Well, it's good that Samsung is putting more emphasis on the software side. The smartphone industry would become totally stagnant if all we see year-after-year are phones with slightly faster processors, slightly more RAM, and slightly larger screens (noting that our hands are not getting any larger). However, many reviewers have commented that the new features don't feel like a coherent whole, that Samsung seems to be throwing features at the phone to see what sticks. I think it's going to take a while before Samsung builds a coherent vision for its software platform that rivals Google's and Apple's.

Another point to be taken from the reviews is that while some of the new hardware input features on the S4 provide for some exciting possibilities, software not made by Samsung and shipped with the S4 probably won't make use of them (It doesn't help that Samsung is not pushing the feature to developers). If Apple had added something like the hovering feature to iPhone/iPad, you will start to see software taking advantage of this in a matter of weeks (I am thinking specifically of games).

On the other hand, Apple is currently not taking full advantage of their control of the full stack. They don't allow enough hooks into the native applications and services, which makes collaboration between applications unnecessarily cumbersome. Hopefully, Apple will offer a full range of XPC services to 3rd party applications in iOS 7, which will allow them to pass information to and from native applications while staying secure (through the Sandbox mechanism)