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.