Ubuntu Phone - A Developer's Perspective
Seeing the overwhelming response to Ubuntu Edge and how most people see it as a Holy Grail, I decided to write an opinion article on the subject. In this document I try to explain why it is not the promise many people seem to think it is and in the process give an insight on how Ubuntu deviates from a other Linux distros and the consequences of that.
This article is composed of hard facts but it is still a personal opinion, so keep in mind that if I sound positive or negative towards a subject it doesn't invalidate the premise of my opinion.
To give some context to those you read this, I've been using Linux regularly for more than 6 years now, I've been involved in , so I can literally say I've run Ubuntu and other LTSP-capable distros on dozens of different hardware, ranging from Pentium 3 to the newest generation of Core i5 and i7 machines, both client and server and all the weird things you can imagine (like PXE booting from a floppy drive because the hardware wouldn't support it natively and fun stuff like that :)). Having worked as help-desk for a while on that subject as well and by trying new things on my machine just for fun on a regular basis (it's also important to refer my main competence was and still is being a programmer), I've come to have a well defined idea on why and how Ubuntu and more importantly Canonical operates.
"Yeah.. Ubuntu is doing good by Linux, look at that Ubuntu Edge right?". Humm, is that so? You can develop for Android in Windows, MacOSx, Linux and even various BSDs with a little effort (you can even actually develop Android inside Android nowadays, but I don't find it very practical compared to doing it in a desktop OS). What about Ubuntu Touch (the actual name of the Ubuntu variant for the Edge is called Ubuntu Touch)? You can develop for it using Ubuntu and... well, that's it really, at least for now. You can get it working on other Linux distros using very hacky ways, but it won't work as well. Why? Because Ubuntu is forking a lot of things and is becoming its own thing. Ubuntu is not like other Linux distros for a while now and it keeps getting different with time, but I'll briefly explain you later in this article why and how.
"Yeah but Open Source rules and stuff". If that's your motivator, I'm sorry to tell you that Ubuntu is way more closed than Android is. Android for arguably the most part uses the , whereas Ubuntu uses the one. That's a huge problem with Ubuntu and it's why I personally never have contributed to Ubuntu with code. You really have to read more on the subject as it has various ups and downs, but basically (and since I know most people won't because they are huge texts and it's plain boring) GPLv3 gives Canonical control over the source code developers contribute to the project, whereas for example a license like Apache v2 gives the control to everyone, meaning Apache license doesn't have the possibility for restricting the contributions to the receiving project. If you're a regular user and not a developer in practice it is basically the same to you, but, as a developer, it's a different kind of freedom. That's why most projects on GitHub are Apache licensed, and why the . As you can read in this well written blog () post about the subject:
"Canonical's CLA is pretty simple. In essence, it grants Canonical the right to use, modify and distribute your code, and it grants Canonical a patent license under any patents you own that may cover the code in question. But, most importantly, it grants Canonical the right to relicense your contribution under their choice of license. This means that, despite not being the sole copyright holder, Canonical are free to relicense your code under a proprietary license."
Ubuntu, as many of you might know, it's an African word for "human kindness". Well now, kindness to another has nothing to do with openness, sustainability or any of the open-source philosophy for that matter (thing that I like and deeply interest me - ). So, in reality, Canonical is living up to their moto, nothing wrong with that. The problem is that as Ubuntu gets more popular people don't realize Ubuntu is more closed than it might look at first.
Now, don't get me wrong, I don't hate Ubuntu, and certainly not for just that. In fact, despite everything, I see Ubuntu as having a well defined purpose in the marketplace. You know, Arch, Gentoo and a couple other distros are cool if you're a Linux advanced user and like to have fun configuring your system, but probably too complicated and way too hard for regular users to find help. Canonical has a great support, even professional paid one, and while they are not the only Linux company doing so (Red Hat and Suse do as well), they have a strong user-base and that's a huge advantage. This is where most people think this: "great user base and Canonical's strong involvement makes Ubuntu more stable or reliable than others" - incorrectly. You couldn't be more far away from the truth.
Here's a thing about Ubuntu, OpenSuse and a couple of other distros out there that have a huge user base: they make choices to make their distro friendlier and play well with a wide range of computers and users, but that also has its compromises as one could expect. Ubuntu, for instance, keeps its own fork of the Linux Kernel with a ton of changes, the same goes for the packages that live on its repositories. Groups of developers inside Canonical maintain these packages and their changes, but here's where it gets tricky: usually, if a package misbehaves with Ubuntu (because their kernel is different, because they have use Unity as a Desktop Environment and no one else does, because their libraries topology it's different from the application expectations, etc... really, it's a long list), the developer responsible for that package goes to the source of that application and does the modifications he deems necessary to have this software running on Ubuntu. Now, as you can imagine, this is a hack. Not only it is probable that the dev making the changes doesn't understand the side effects of his actions, sometimes he doesn't fix things and when he does he might never commits them upstream. For those of you who are not familiar with the term, upstream (like in a river) is the original source. Say you have VLC on Ubuntu, and a Canonical dev finds a problem with the way this application deals with video streams. It is common for the following scenario to happen: the dev fixes the problem on the VLC package for Ubuntu, and because he thinks this might be specific to Ubuntu or because he is lazy, he doesn't commit the change to the original VLC repository. If he did, it would be called propagating (or committing) the change "upstream". Some of you might be thinking by this time "wow, nice, it means I've an improved version of VLC under Ubuntu". Well, maybe the first time this happened you did, but as VLC core developers continue their work on the upstream repository, on the next version of Ubuntu the same dev will have to fetch the repository from upstream and then manually reapply the fixes if the automatic merging fails. As I mentioned, the package maintainers won't typically have the knowledge of what side effects modifying a part of a HUGE codebase as VLC sources can have, so given a fair amount of time and reasonable amount of uncommitted upstream patches and you now have a VLC on Ubuntu that has problems that no other distro has – side effects. In programming this is called "forking" because the version you get is no longer the exact same software but rather a modified version of it; the forking was unintentional but it still happened and that's the bad part.
Now, negativism apart, this Model only seems to work in some situations, the Kernel being of them. Here's what Ubuntu documents have about the whole subject on their official documentation regarding the Kernel:
Also they do a lot of upstreaming in the Ubuntu Kernel, look here for a detailed information of what was upstreamed in the Ubuntu Kernel for Ubuntu 13.04 :
Unfortunately, not all packages receive the same treatment, take some of this examples:
And here's an example where the model is applied correctly, resulting in a great advantage for everyone:
It is to be noted that in practice, of all the distros that follow this same model, Ubuntu is the one that implements it best and it works well in part because the popularity of Ubuntu. Since it is so popular, it is fairly common for some core developer of the various applications available for Linux to take into account support for Ubuntu specifically so it is not as bad as I might have portrayed it (well, at least, for a regular user).
To make Ubuntu even further away from other Linux distros is the fact they and that they have been investing in their own Desktop Environment and X11 replacement that ONLY they will use,. Now remember these things are also backed up by the same Canonical CLA, so if you want to improve them, remember Canonical gets to do whatever they like with it, and you, the developer, get left in the shadow.
Now, when it comes to me, I don't want to be locked into a specific operating system to be able to properly program for a device (seems a bit like iOS or Windows Phone, doesn't it?) nor do I like the technical approach of Mir, since is far superior as it is more well designed and promises greater benefits in the long run (you might read about that a bit here from Martin Gräßlin, one of the KDE core developers: ).
I could have talked about a lot of other philosophical matters that plague Ubuntu (read here for a few of those ), but I preferred to focus on what really matters to me which is the technical aspect of things.
To conclude, I have experienced the Ubuntu Phone on my Android devices several times to keep track (if you've a Nexus device it works fairly well, considering it is still under development. read more about here, and I understand the pull from a consumer perspective, specially when it comes to the hardware ( where she details most of the things where this devices innovates over the current market options). For me, as a consumer, I find specially interesting the ability to be able to dock it and use as desktop, although I would prefer the desktop to be Arch Linux