Thanks for your questions, Dale. I'd like to build on what Jonah has already said.
First of all, the new client libraries don't AFAICT touch on rule #2 (use any language). The crux of the issue is what it means to use a "standard automation specification". Initially, this meant the WebDriver protocol. It soon became clear to us and others working on WebDriver-based automation frameworks that WebDriver was not going to cut it. That's why we met with the leaders of the Selenium project last year to come up with a new mobile spec draft[1]. Many of the changes in Appium 1.0 are implementations of this new spec: TouchAction/MultiAction-based gestures (instead of using mobile: xxx methods), XML source instead of JSON, new locator strategies (and deprecations of old web-based ones). Since we had a launch schedule we needed to hit, we put this functionality into Appium clients. But we're now working on getting them into the official WebDriver bindings and deleting those methods from the Appium clients. So stay tuned for that!
That doesn't cover everything, though. There are a number of methods that Appium exposes as a convenience for its users that we decided (at the mobile spec "summit") should not be a part of an actual mobile automation standard, because they provide peripheral functionality not core to the automation of a mobile app itself. Some examples: checking whether an app is installed, installing/uninstalling an app during a test, pushing/pulling data to/from a device, seeding a device with content, resetting an app's state during a session, etc… The group decided that doing these things (essentially, setting up and managing the test environment) is really the responsibility of the tester, not the automation tool, and hence shouldn't be part of the spec. I completely agree! However, because we want Appium to be as useful as possible and not force our users to continually come up with techniques which could be a useful extension to the core automation technology, we continued to bundle these features with Appium. Previously, they were exposed with a hacky extension of execute_script. But the WebDriver spec actually defines a way to expose custom extensions to clients! It involves modifying the JSONWP with new vendor-specific endpoints[2]. Thus in order to be even more standard, we decided to move all of this into the custom /appium extension to the HTTP API. Of course, we now need a way to access these new endpoints. There were two options: 1) give people code snippets for how they might go about extending their vanilla WebDriver client on their own. Some clients (like Python) make this really easy (creating new methods which simply call an internal "execute" function). With other clients, it might not be so easy. The other option is 2) putting this extension-calling code into clients we distribute. Ultimately we decided on #2, knowing that forcing people to write their own code to access the extension would drastically limit people's use of the methods.
That still doesn't cover everything! There are a few more methods (like shaking, rotating [by degrees], and locking the device) that one could argue should be part of the automation tool itself. We'll continue to discuss the possibility of getting these added to the mobile spec with the rest of the group working on that spec. But that could take a long time. Meanwhile, they're ready to use today in the Appium client!
So essentially we have the Appium clients for 3 reasons:
1) There wasn't time to go through a full commit and release cycle for Selenium once we'd set a release date for 1.0
2) Some of the things that Appium does, and which its users really find useful, are never going to be an official part of the new mobile spec. We want a way to make these extensions available
3) There are some behaviors whose state is as yet unknown. They might make it into the spec and get deleted from the clients, or they might be in category #2
Ultimately, the only reason for the clients will be #2. And even that is actually evidence that we are conforming to the WebDriver spec (by implementing the extension strategy it recommends) rather than departing from it. In the future, I think it'd be great to have guides on how to use vanilla WebDriver clients and add code snippets to them in order to give them access to the Appium-specific methods. But for most people, using the Appium clients will continue to be the easiest and cleanest way to use Appium.
Fortunately, the list of methods in #2 is a pretty esoteric set of things that you could either avoid completely or reimplement using shell commands in your test scripts. What this means is that, once we've got the mobile spec stuff merged into the official WebDriver clients, for most users, you probably won't need an Appium client.
And in any case, none of the 3 motivations for having Appium clients violates (again AFAICT) rule #3.
Happy to dialogue further with anyone who has more questions about this strategy!
-Jonathan