
What I’m looking for
Ubuntu’s recent focus has been on usability as an everyday desktop environment, even for non-techies like ol’ mom and pop. There have been some interesting additions to meet this goal, such as a music store and embedded social networking, but that’s not what I’m looking for. I write web applications using a variety of programming languages and tools, and I need a platform that will boost my productivity. I need good, fast, and (preferably) free tools to help me do my job. I do not need expensive, resource-intensive tools that crash at the drop of a hat.
Why Linux?
Linux is the most popular web server operating system, and runs on six of the top 10 hosting services. Most importantly, however, is that it’s what is used where I work (and has been for the last 10 years with three different employers). I find it easier to automate tasks on Linux (as compared to Windows), something that is essential in productivity gains. The Windows command prompt feels like an add-on, where a terminal app on Linux feels like it’s truly a part of the OS (because it is). Ever try to select multiple lines in a windows command prompt? The block-level selection drives me nuts. But it works just as expected in a terminal window.
Another benefit I’ve found is with the ‘centralized repository’ updating scheme. When you need to do software updates on a Linux box, it’s usually straightforward: run the system updater, you get a list of things that need updating, you select what you want to update, and then do the update. It’s also usually possible to do this for all of your installed software (with a few exceptions)! It’s kind of like the oft-maligned Apple App Store for the iPhone: a one-stop shop for all your applications. The Linux updaters, though, diverge from the App Store analogy when it comes to third-party apps: It’s not a problem, it’s completely open.
Why Ubuntu?
This came down to just “it’s what’s being used at work.” I’ll admit that I’m not an Ubuntu fan; prior to my current job, all Linux OSs that I’ve used were Red Hat or Fedora distributions, and I am biased toward those distros. Because of my lack of experience with Ubuntu, and my need to become familiar with it to comply with my job requirements, I’m taking a good, long, hard look at Ubuntu with this new 10.04 LTS release.
The 10.04 release is what Ubuntu refers to as a “Long Term Support” Release, or LTS. Normally, Ubuntu releases are supported for 18 months. This means that security updates and fixes will be published for 18 months after the initial release. A LTS release has support for three years for the desktop version (or five years for the server version). This longer window means you don’t have to worry as often about upgrading because of end-of-life issues. Fedora does not directly support a free long-term release (that’s what its’ big brother Red Hat Enterprise Linux does, but for a fee). All Fedora releases are supported for only 13 months.
Let me give you an example of why a long-term support release is important to me. I was setting up a new home server last year, and started the process of installing Fedora 11…I knew that Fedora 12 was only a month off, but I needed a server then, not a month later, so I went ahead with the Fedora 11 install. Being that Fedora 11 was already five months into it’s 13 month lifecycle, I knew that meant only 8 months of use, max, before needing to do a major upgrade, with all the configuration headaches associated with it. A couple weeks ago, knowing that Fedora 13 was approaching, I decided to do the upgrade from Fedora 11 to 12 with the hope that doing so would make the eventual upgrade to Fedora 13 easier. The act of the upgrade went fine. Until I started using the server. There were some version mismatches that caused httpd and subversion to fail to start up. So, instead of committing some code I’d just worked on, I spent 30 minutes tracking down the problem, and found that I needed to install a newer mod_ssl that didn’t come across in the upgrade. I don’t relish the thought of breaking my development infrastructure every six months, so I’m really interested in how this three-year support cycle works out.
What’s with the names?
Ubuntu likes to have alliterative releases named after animals. This 10.04 release is usually referred to as Limping Lion Lethargic Lemur Lucid Lynx. I think the names are silly (as if you couldn’t already tell), and just refer to the release’s version number. So whenever you see Lucid Lynx, think ‘10.04′ (or April 2010) release, and we’ll get along just fine.
Installation
The Ubuntu installer is a very simple ‘live boot’ CD that provides only the minimal set of packages; you’re forced into a ‘lowest common denominator’ installation. You can’t choose any extras until after the installation has completed. It would be nice to have a pre-configured ‘developer’ installation with common development tools. The “Ubuntu Software Center” helps a bit, with categorized packages, including a Development Tools package.
Dude, where’s my keyboard?
It wasn’t long after installation that the first problem appeared, and it was a doozy: the keyboard didn’t work in the login screen. I could mouse to my user name, click it, and then get the password prompt, but I could not get the keyboard to work. I was hoping it was just a keyboard driver issue, but changing the keyboard settings on the login page didn’t help.

The universal access preferences menu on the login page.
It was at that point I noticed the accessibility icon, and that it had an on-screen keyboard feature. I turned the on-screen keyboard on, but nothing happened. Or so I had thought. After a close inspection, I saw a small speck (which could have been confused with a dead pixel or smudge), that turned out to the the on-screen keyboard. For whatever reason, the default size of the keyboard was 1 pixel wide. I was able to drag it to make it larger, and was then able to use the on-screen keyboard to log in just fine. After logging in, the real keyboard worked just fine. I thought the problem was fixed, however, on the next reboot I found the real keyboard wasn’t working.

There's a keyboard in the upper left. Really.
After a bit of research, I found an online posting about a default setup issue with the keyboard. The problem is in the /etc/default/console-setup file, due to an errant XKBVARIANT setting. Once I made the change mentioned in the post, the keyboard worked fine with the login screen. This problem was initially encountered in the Beta 2 release, but was still present in the initial final release. I’ve noticed a recent installation (about two weeks after the final release) does not exhibit this problem. Also, to clarify, all these problems occurred when running Ubuntu in VMWare Player. I have not done a clean native install; the one standalone Ubuntu box I have was upgraded from 9.10 to 10.04 via the Synaptic Package Manager.
New themes
A new default theme is being released with Ubuntu 10.04, with some significant changes from prior versions. One of the biggest (and most annoying) is that the window action icons have moved from the upper right corner to the upper left. This was almost a dealbreaker for me, as nearly every OS I’ve ever used had a close box in the upper right, but fortunately, there’s a fix: use the Clearlooks theme. Clearlooks puts the minimize/maximize and close buttons in their rightful place, the upper right part of the window.

The Clearlooks and Radiance themes
Had the window controls not moved me away from the Radiance theme, the color scheme would have. I found the menu background to be a bit too dark, or the text not having enough contrast with the background. Whatever it was, I found the menus hard, or at least annoying, to read. The Clearlooks theme provides menus with dark text on a light background, which works just fine for me.
As I continued the several follow-up installations for my development box, I noticed that the Synaptic Package Manager was getting slower and slower in displaying the package list after an install. I was never able to resolve the problem, but I’ve never experienced that kind of delay after doing the initial installs. I’ll just chalk it up to the system being busy handling all those package installation requests over a short period of time.
Now for the really big stuff: the actual development environment.
Eclipsed
I’ve always had a love/hate relationship with Eclipse. To be truthful, it’s been more of an “I’ll tolerate you if I have to”/hate relationship. It is a very powerful IDE, and some of the refactoring, templating and typeahead features are great. The problem is that I have so many problems getting it to work, that any time those features buy me, I lose in troubleshooting. Hoping those problems would stay behind in the Windows world, I started to install Eclipse from Synaptic.
The Eclipse package in Synaptic is actually a meta-package, which includes the core Eclipse code, the Java developer tools, the Eclipse Plug-in Development kit, and the Rich Client Platform plug-in. Once those are installed, you need to add the other features you want. For me, this was Subversive and M2Eclipse. I started with Subversive, because that’s in the ‘Collaboration’ package of the main Galileo repository. Only one problem: I could not connect to the main Galileo repository. Nor could I connect to the external M2Eclipse repository. Or any repository. I plain could not get Eclipse to connect to any repository to add plug-ins.
So I used my smart friend, Google, to find answers. One suggestion was to use the Sun JDK instead of the OpenJDK. This involves adding the Sun repository to aptitude (the backend for the package managers like Synaptic), then running the update-java-alternatives command to use Sun’s JDK instead of the default OpenJDK.
First, to add the “partner” repository, which contains information on Sun’s JDK, execute the following in a terminal window:
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo aptitude update
sudo aptitude install sun-java6-sdk
Next, execute update-java-alternatives:
sudo update-java-alternatives -s java-6-sun
This command will recreate symbolic links to point to Sun’s Java tools instead of the default OpenJDK tools. Unfortunately, after going through all this, I still could not get Eclipse to load repositories. Grasping at straws, and believing IPv6 to be an issue, I turned off IPv6 support, but still no luck.
Then the real long shot: Look at Eclipse configuration, specifically proxy settings, and ensure proxies aren’t being used. Specifically, in org.eclipse.core.net.prefs, ensure that both systemProxiesEnabled and proxiesEnabled are false. However, even after doing that, I got the error: “An error occurred during the org.eclipse.equinox.internal.provisional.p2.engine.phases.CheckTrust phase.” My response: Screw this, I’m using NetBeans.
NetBeans to the rescue
Like Eclipse, the NetBeans install from Synaptic is straightfoward. Fortunately, adding plug-ins to NetBeans much more straightforward than Eclipse. Even better, many of those ‘extras’ in Eclipse like Maven support and Subversion, come right out of the box in NetBeans. After a bit of tweaking, mainly with appearance, I was writing code without spending a lot of time getting the IDE set up. I may have a new favorite IDE.
The other software
One of the big wins with Linux is the availability of good, free software that will do just about anything you want. One of the aforementioned expensive, buggy Windows applications that I’ve tried hard to avoid is Photoshop. On the Linux side, GIMP (GNU Image Manipulation Program) is used in Photoshop’s place. While GIMP is no longer installed by default starting with 10.04, it is still available through any of the software package managers, and still supported; you just need to go through the extra step of installing it. One of the reasons it was not included by default was that it takes a lot of disk space, and may not have easily fit onto the Ubuntu live CD. All of the original graphics and screenshots on this site have been either edited or touched up with GIMP.
File manager applications are usually nothing to write home (not to mention blog) about, but there’s a new feature in Nautilus, GNOME’s GUI file manager. The new ‘Extra Pane’ feature is very nice, especially when copying from one directory to another. This is very similar to a tool I use on Windows called xplorer2. I only wish it allowed you to sudo from within the application. Update: Why, yes, you can use Nautilus as a super user.
The office suite is where Linux systems let me down. The most popular office suite for Linux is OpenOffice, which has adequate tools except for the word processor, OpenOffice Writer. It just doesn’t measure up to Microsoft Word. The dealbreaker for me is the lack of an outlining option in Writer. I feel that Word’s outliner shines, and helps me compose my thoughts for a document before writing it. I’ve replaced Word on non-Office enabled PC’s with FreeMind, a mind mapping application. Mind mapping is much like outlining, except that it’s more free-form than Word’s outliner, which is a good thing. Fortunately, FreeMind is available in the ‘partner’ software repository, and works just like it does on Windows (as it should, since it’s a Java app).
As mentioned earlier, this release represents a big push to make Ubuntu more of a consumer operating system, including new integration with social media. However, this, along with the new UbuntuOne music platform, aren’t what I’m looking to Linux for; I use Windows for that stuff.
Ubuntu uniqueness
Ubuntu unpacks many packages in ways that I’m not expecting. Again, as a long-time RedHat/Fedora user, I’ve become accustomed to seeing certain files in certain locations. As an example, early in my Ubuntu exposure, I spent quite some time looking for the Apache configuration file, httpd.conf. In fact, I couldn’t even find /etc/httpd, the directory that ‘normally’ contains those configuration files. It turns out that one of those Ubuntu uniquenesses is replacing ‘httpd‘ with ‘apache2‘. Thus, there is no ‘httpd‘ process, there is an apache2 process; there is no /etc/httpd, there is /etc/apache2. To make things even more confusing, there is a /etc/apache2/httpd.conf, but there’s nothing in it. The real configuration file is /etc/apache2/apache2.conf.
There’s a similar issue with Tomcat, but the confusion may be my fault because of the way I’ve always installed Tomcat: just uncompress the package and go! Ubuntu’s packaging of Tomcat is unique in that it uses a lot of symbolic links (which is not at all unique to the world of Unix-based OSs). The core of Tomcat, the binaries and the webapps directory, is in /usr/share/tomcat6. Or is it? Because there’s also a webapps directory in /var/lib/tomcat6, without a bin directory, and with symlinks for conf (pointing to /etc/tomcat6, to comply with the ‘all configuration in /etc‘ rule), logs (pointing to /var/log/tomcat6 to comply with the ‘all logs in /var/log‘ rule) and work (pointing to /var/cache/tomcat6). This is where the difference between CATALINA_HOME and CATALINA_BASE come in to play.
There’s no explicit ‘root’ login in Ubuntu. Instead of logging in as the super user, you’re expected to use sudo. The first user created (which happens during installation), has full sudo privileges by default, so that user doesn’t need to do anything to gain super user privileges, other than the usual second password entry and prepending ‘sudo‘ to every command. However, in a pinch, you can still gain global super user powers by executing sudo su -. You cannot do sudo with some commands, cd is one example. This becomes troublesome when you need to view or edit a file deep in a hierarchy of directories that your normal user account cannot access. You end up doing iterative ls commands:
# sudo ls dir1
# sudo ls dir1/dir2
# sudo ls dir1/dir2/dir3
In such cases I usually end up doing the sudo su - trick.
More to follow…
My trial migration isn’t something I can wrap up in the month it took to write this; I’m making a comparison to an operating system that I’ve been using for about 10 years, so there will certainly be more to come. As I run into roadblocks and triumphs, I’ll be posting it here…