Friday 24 April 2009

GNU/Linux

Until only a few years ago, I had no real experience of UNIX-based systems save for some minor University-related work. However, over the last few years I have spent some time attempting to improve my knowledge of the POSIX world as part of my ongoing efforts to remain platform-independent.

At University, my UNIX experience consisted of using SuSe as part of a Networking/Computer Architecture course and using PS2-Linux for PlayStation 2 game development. Neither were very interesting - the networking coursework was largely unrelated to my degree and was made needlessly difficult by requiring us to use the foreign UNIX OS in place of the Windows environment that we were familiar with. As for the PlayStation 2 development, our coursework was to create a Pong clone using a horrible mess of UNIX and PS2 library code under a KDE that insisted on crashing at least once a day. This course module required me to sign a non-disclosure agreement, possibly in order to prevent me from informing others of how terrible the Game Console Development course was. All in all, these experiences did not do anything to improve my opinion of UNIX versus Windows NT.

Outside of University, the only UNIX-related experience I had consisted of about 10 minutes with an Ubuntu LiveCD and whatever time I could spare to experiment with my new Apple Mac Mini and it's PowerPC processor. However, during my industry placement year (2007-2008) away from the University, I decided to experiment with UNIX some more and installed Xubuntu on to a spare hard disk drive. Forcing myself to use it for a few weeks wasn't as arduous as it might have been, due to the availability of some of my favourite applications from Windows, such as OpenOffice.org, Firefox, Thunderbird, VLC and Code::Blocks.

However, I encountered more bugs and general inconveniences under UNIX than I have ever had to deal with under a standard, out-of-the-box Windows XP installation. The X Window system never seems to work correctly and installation of graphics drivers is an annoying and error-prone experience to say the least. Also, VLC refused to run after Code::Blocks was installed due to incompatibilities with the newer wxWidgets library. So-called "DLL hell" might have been an issue under the DOS-based Windows 9x design but this problem is not present under the new (and largely unrelated) NT architecture. It is disappointing to see that it is still an issue under the allegedly superior UNIX design.

During this time, I played around with a few other operating systems, including the OpenSolaris LiveCD. Those of you who have an interest in alternative UNIX systems aside from GNU/Linux and BSD may wish to download this LiveCD for yourselves.

Shortly before I completed my year working as a programmer and general IT technician, the replacement student, David, arrived. David seems to be an excellent fellow, with a much better knowledge of UNIX than myself. During our month working together, he suggested that we completely reinstall our dying Red Hat server with Debian GNU/Linux.

The end result was not one but three Debian-powered machines:
  • A "test run" server, which had previously been retired from service and put into storage.
  • The "real" server, which ended up being used in tandem with the "test run" server.
  • A desktop machine, built by myself from spare components.
The desktop machine became my primary workstation, as David was now using the machine that had previously belonged to me. It was on this that I constructed a GUI front-end for the AMANDA backup program using Code::Blocks and the GTK+ library. I still have this on a CD, licensed under the GPL v3 but as I lack access to any sort of tape backup hardware I cannot continue to work on it.

GTK+ was interesting to work with but has some major flaws:
  • It's much more limited than the Win32 API.
  • It was annoyingly difficult to configure projects so that they could link and build correctly.
  • GTK+ is much less efficient than pure Win32 code under Windows.
  • It seems to be riddled with bugs, although this might have been caused by Debian 4.0 using an older version of the GTK+ development libraries for it's repositories. I'm fairly certain that the code I wrote was correct and bug-free and yet my application seemed to either crash or output garbage far more often than it should have.
Moving on to the present day, my room currently has five computers in it:
  • My main tower, which is currently running Windows Server 2008.
  • My old laptop, running Windows XP Home SP3.
  • My Mac Mini running MacOSX 10.3.9 (currently being stored on a shelf).
  • A spare tower, currently in a state of disassembly (previously ran Windows Server 2008).
  • My UNIX tower, currently running gNewSense 2.2.
The gNewSense tower runs quite happily with a 450MHz Pentium III processor and 256MB of RAM using the integrated Intel graphics chip. I have unearthed the copy of Introduction to Unix that my University gave to me as part of the Network course, installed Code::Blocks and managed to rig up a simple OpenGL/SDL program that renders an animated .MD3 mesh at an acceptably smooth frame-rate. The same Code::Blocks project file recompiles on my main Windows tower with no alterations save for using a different build target.

I've not been without problems, however - Debian 5.0.1, which I attempted to use before trying gNewSense, didn't seem to like my graphics chip and X.org refused to run. The gNewSense GNOME GUI runs fine, but there seems to be a fault with the hardware OpenGL acceleration that causes corruption around the mouse cursor. This is not usually a problem for me, since SDL windows do not draw the standard X window system cursor and so corruption does not occur.

Yesterday, the X window system crashed when I attempted to create a simple OpenGL/SDL window. The CTRL-ALT-BACKSPACE combination that I have become so familiar with had no effect and attempting to CTRL-ALT-F# to a terminal display was equally useless. After forcing the machine to power off, I restarted it, logged in and ran the program again. It worked flawlessly. What, then, was the cause of the X server crash?

Lastly, my router loses it's connection to the Internet whenever the gNewSense tower is online. This might be a problem with the router, a problem with the network card or a problem with the driver or version of the network card driver or Linux kernel used by gNewSense but for now I have simply disconnected the gNewSense tower from the network.

No comments: