Shuttleworth’s Law

On the last episode of UUPC, we mentioned “Shuttleworth’s Law” our very own adaptation of Godwin’s Law. In a nutshell, Shuttleworth’s Law is

As a discussion about Ubuntu grows longer, the probability of a user threatening to stop using the distribution approaches 1

Ciemon described the concept of Shuttleworth’s Law as “the mark of the bug” that sets it apart from others, in a similar way that Godwin’s Law suggests a conversation should probably be stopped (or already have been) once a comparison to Nazis or Hitler occurs.

Let’s look at some examples!
In the show, we mentioned 2 current discussions where the Law rings true. The first is during Popey‘s post on, the new StackExchange site for Ubuntu-related questions. Popey wanted more information on why Ubuntu 10.04 would be switching to Unity for the default interface rather than working with the GNOME project to develop the desktop environment. Popey got his answer in the form of references to an ArsTechnica interview with Mark Shuttleworth. However, the conversation didn’t stop there. People took the question as an opportunity to vent their feelings about the announcement, and before long, we saw this post from Scott Evans. This may not be a perfect example of the Law as he talks about why he stopped using Ubuntu, rather than threatening to stop. However, the fact that he’s reading and posting on an Ubuntu Q&A site leads be to believe that he hasn’t stopped entirely.

The second example that we found on the show was during a discussion about the Launchpad trademark. Canonical hold a trademark over the Launchpad name, which is used for it’s open source bug tracking/project hosting site. Apple has recently announced that Mac OSX Lion will ship with a product called Launchpad, an iPad-style full screen application launcher. A bug was filed on Launchpad stating that Canonical should sue Apple for infringing the trademark. Canonical responded stating that the legal team was aware of the issue, and since it wasn’t a bug in the Launchpad software, the bug was marked as invalid. However, the responses continued, and yes, the user Tralalalala threatened they would “immediately remove Ubuntu from [their] PC and won’t use it again.” if Canonical were to sue.

Shuttleworth’s Law certainly isn’t a recent phenomenon. Shortly after Launchpad was open-sourced following pressure from the Ubuntu community, a bug was filed against the Ubuntu One Server project, stating that the server component of Canonical’s cloud storage service should also be open sourced. It was stated that Ubuntu One would remain a proprietary product, and that Canonical was doing so in the interests of getting a commercial return. This concluded, the bug was marked as Won’t Fix. Job done, right? Wrong. The comments continued, and sure enough user balleyne chimed in with this gem: “Ubuntu One makes me want to leave Ubuntu.

As for the reasons behind this pattern, I’d suggest a few hypotheses. An obvious one is simple Internet trolls who rock up to a controversial discussion and like to stir the pot a bit.
A second and slightly more worrying possibility is that it’s a desperate cry to be heard. If the community really feels that Canonical doesn’t listen to the needs of the users, is the only way they can get them to pay attention by threatening to vote with their feet?
Personally, I suspect it’s more a show of immaturity and arrogance than anything else, if there’s a belief that a company (or indeed a community) is going to change it’s strategy because one user is throwing its toys out of the pram. Once a decision’s been made, we need to live with it. If you don’t like it, voting with your feet is fine, but just do it! Popping your head round the door afterwards to make sure everyone knows your leaving is akin to threatening to go home and take your football with you if your team isn’t winning.

If you’ve seen another example of Shuttleworth’s Law in action, please post a comment. I might be fun to do some analysis of the occurrences (or is that just me?).

GuruPlug – Part 3

Now my GuruPlug was working again, it was time to set up the software.
The 3 functions wanted the ‘Plug to perform if possible are:

  • A web server
  • A bit torrent client
  • A UPnP Media Server

To start with, I wanted a nicer interface. I’m happy using the command line, but a default shell is a bit dull, and not very flexible. Using Ubuntu I’ve become a fan of byobu, a set of config profiles for GNU Screen which allows you to have a “tabbed” interface to within a shell and have useful system information displayed. Being built on Screen, it also leaves your session (and any commands) running when you log out, waiting to re-attach when you log in again.
Byobu isn’t currently in Debian Stable, so I found the package for Unstable, installed the dependencies with apt-get, and installed the package manually.

$ sudo apt-get install debconf gettext-base python python-newt screen
$ wget
$ sudo dpkg -i byobu_2.80-1_all.deb

Bit Torrent

Next I looked for a bit torrent client. I had the following criteria for a client:

  • It needed to run headless/daemonised
  • It needed a web interface
  • It needed to support encryption

After a bit searching and an abortive attempt at setting up rtorrent, I settled on Transmission, which aside from having the GTK-based GUI used as Ubuntu’s default client, also runs as a daemon with a web interface. The transmission-daemon package was only available to install from the lenny-backports repository, which caused a few dependency issues, but forcing install of the packages from backports with apt-get install -t lenny-backports did the job nicely.

UPnP Server

My plan was to share media from the ‘Plug’s external hard drive to other machines on my network (particularly my Wii, running GeeXboX). I installed MediaTomb from APT and set it up to share the files, but when testing with XMBC on another machine, I couldn’t find them. Unfortunately, there seems to be very little in the way of troubleshooting documentation or other readily-available clients to test with, so I don’t know if I’d mis-configured MediaTomb or XMBC, or my network.
In the end, I decided to switch to using Samba.


Setting up samba was a doddle. The GuruPlug comes preconfigured to share anything in /media, so I just needed to set it to allow guest access by adding some bits to /etc/samba/smb.conf:

security = share
guest user = nobody
map to guest = bad user
guest ok = yes

Another snag was that GeeXboX for Wii doesn’t support the Wii’s Wireless, which means I needed to plug it in to my network. This meant moving my router to be near my TV, and thus moving the Plug as well. Here’s the new setup.
That’s the guruplug on the left, connected to the router behind the TV, and the hard drive is now in the shelf under the Wii.
There’s the router behind the TV, with the Wii and GuruPlug connected.

Unfortunately, having the router behind the TV meant that the WiFi signal screws up the picture. Luckily, the ‘Plug acts as a Wireless Access Point!

Wireless Access Point

The ‘Plug comes pre-configured as an open access point, and routes traffic through the Ethernet interface. I just needed to make a few changes to enable WPA2 encryption. The script /root/ is run on boot to set up the access point among other things, so I just had to add a few commands from this guide.

ifconfig uap0 up
/usr/bin/uaputl sys_cfg_ssid $SSID
/usr/bin/uaputl sys_cfg_protocol 32
/usr/bin/uaputl sys_cfg_wpa_passphrase "passphrase_here"
/usr/bin/uaputl sys_cfg_cipher 8 8
/usr/bin/uaputl bss_start

Web Server

The GuruPlug comes with Lighttpd installed and running to serve some CGI scripts used for some simple configuration tasks, like switching the WiFi to client mode. To keep these scripts intact in case I needed them, I fiddled with lighttpd.conf to create Lighttpd’s equivalent of a vhost in Apache, letting me have the main site served when the server’s accessed by the hostname (and eventually, domain name), and the config scripts when it’s accessed by it’s private IP address. This prevents access to the config scripts from outside, while still having the main site available to the world.

server.document-root       = "/var/www/sites"

$HTTP["host"] == "" {
        server.document-root    = "/var/www/setup"

I’ve got some additional ideas for things to do with the Plug, but it’s certainly served very well so far, so that’s all for now. If you’re interested in the resource usage, Byobu currently reports that RAM usage is at 13% after all the above setup. I’ll probably make a few smaller posts as I experiment some more!