Michael Hall declares that there is no “Touch”, only “Ubuntu”. And he’s absolutely correct. Sadly for the rest of us, though, he’s writing that post from the future. There will be One Ubuntu, but we’re not quite there yet.
Mike says that the difference is Unity 8. Actually, for the purposes of most people writing apps, I think that Unity 8 and Unity 7 don’t really enter into it. Unity works roughly the same way and presents roughly the same APIs. The biggest discrepancy right now between “Ubuntu Desktop” and “Ubuntu Touch” is that there’s a bunch of stuff available on the desktop which is not yet part of the platform API, which means that that stuff is not available on my Ubuntu phone yet and so I can’t use it.
Let’s take a little example. Right now, push notifications are still being worked on for Ubuntu (which is fine; it’s a difficult project and needs care), and in their absence I don’t have a way to have something on my phone which tells me when I get an email. I hate that. I really don’t like not having email notifications: they were the first thing I turned on on my new machine. So I thought: how can I do that on my phone? I’m prepared to sacrifice a bit of battery life for this, if need be.
Voice of the audience: just use cron! that’s what it’s for!
Sadly, I can’t use cron on an Ubuntu phone. If I ssh into my phone (which I’m happy to do) and then do
crontab -e, it doesn’t work, because the main filesystem is read-only and so
crontab can’t save a cron file. Nor can I use upstart, because upstart doesn’t include time-based scheduling, sadly.1 I could, I suppose, run a daemon which schedules for me (and that’s what I’m looking at doing) but that’s not very excellent a solution.
Voice of the audience: you can make the filesystem read-write!
Yes. You can. I do not want to. If I do that I don’t get to have system updates any more. More importantly, though, if I do that, I’m not an app developer. I’m a platform developer. I don’t want to be a platform developer. I want to make apps. If I’ve done some platform-developer things — marked the filesystem read-write, written things to it, installed other packages, tweakd the config — then I lose one of the most important things about mobile development, which is knowing that your device is the same as everyone else’s. I’ll no longer be sure whether “it works on my device” means “it’ll work on someone else’s”, because now it might work on my device because I’ve poked the platform. I’m not running Ubuntu, then; I’m running Stubuntu. It’s the same reason I won’t install third-party non-Ubuntu stuff with
sudo — Ubuntu owns the root filesystem. If you’re a third-party package or package manager, you go in my home folder. If you insist on not going in my home folder, or you make it really difficult to do so2 then you just don’t get installed at all.
Look, I know this stuff is being worked on, and it’s fantastic. Ubuntu will be even better than it is at the moment, which is saying something. But at the moment there’s just no way to do a bunch of stuff on “Ubuntu Touch” which is possible on “Ubuntu Desktop”, until the ability to do that stuff appears in the platform API. That gap closes every day, and it’ll be brilliant when it’s finally gone, but until then there still is a difference between “Ubuntu Touch” and “Ubuntu Desktop”. Because when I ask the question “how do I get notified of new mails on Ubuntu?”,3 the answer for my desktop is “install this app”, and the answer for my phone is “we can’t do that yet but we’ll be able to soon”. I’m fine with that being the answer: this is not a complaint that it’s not done yet, and I’d like to stress that point. This stuff is being worked on, and I know it’ll be great when done, but the fact remains that it’s not done yet. Until that day, there’s a distinction between “Ubuntu for my phone” and “Ubuntu for my desktop”, and it’s not just about phone-specific stuff like hardware access or app confinement. That distinction is currently present. Roll on the day when it’s not.
- and presumably will not, now that the focus has generally switched to systemd. That does have cron-ish abilities, but the phone isn’t using it yet ↩
- rubygems, you are the weakest link, goodbye ↩
- or “how do I get notified of new G+ posts” or “store key data from my app in a secure way” or “programmatically list what’s pinned to the launcher” or “update my desktop background whenever a particular file changes” or anything which requires some sort of background processing ↩