QNX: The Unexpected Surprise

I think that everyone reading OSNews will have heard at least something about QNX. You can regard this article as an introduction, but also as a review, and as a “Is-QNX-Ready-For-The-Desktop? article”. To start off, I put together a short explanation of the merits of using a microkernel. Let me start off by saying that QNX Software Systems (QSS) does not aim towards the desktop with their Neutrino RTOS.

The QNX Neutrino RTOS (from now on referred to as simply “QNX”) was designed to facilitate in the development of applications for the embedded market; developers can write and build applications on their ‘normal’ machines using the same microkernel that the developers will use for their devices.

Merits Of The Neutrino

click for a larger view QNX is an operating system based on a true microkernel design. Microkernels are the opposite of monolithic kernels; instead of having all functions, drivers, filesystems and so forth inside the kernelspace, microkernels keep them outside of kernelspace, in userspace. The advantages a microkernel has to offer over a monolithic kernel are therefore quite obvious; one can replace and restart drivers, filesystems and so forth on the fly, without having to shutdown the entire system. Also, when part of the operating system crashes, it does not bring down the entire system, because the crashed part is outside of kernelspace. Theoretically, QNX could run without any downtime for ages and stay up-to-date at the same time. You can imagine that such a fault-tolerant, crash-insensitive design is very important in mission critical situations; and this is indeed the case. QNX powers all sorts of devices; ranging from hospital equipment (such as MRI scanners) to parts of the International Space Station, to in-car multimedia devices. Now that’s scalability! Another major advantage of a microkernel design is simplicity; since the operating system is ‘chopped’ into smaller parts running in userspace, it is supposed to be easier to maintain and easier to program. In the early days of the microkernel, people also expected it to be faster and more efficient than a monolithic kernel.

Do all these advantages sound too good to be true? Well, simply put: yes, they indeed sound too good to be true. If not, all operating systems would be using microkernels today. I can explain the main drawback of the microkernel design with a very simple illustration (with thanks to CTO):

“Thinking that microkernels may enhance computational performance can stem but from a typical myopic analysis: indeed, at every place where functionality is implemented, things look locally simpler and more efficient. Now, if you look at the whole picture, and sum the local effects of microkernel design all over the place, it is obvious that the global effect is complexity and bloat in as much as the design was followed, i.e. at every server barrier. For an analogy, take a big heavy beef, chop it into small morsels, wrap those morsels within hygienic plastic bags, and link those bags with strings; whereas each morsel is much smaller than the original beef, the end-result will be heavier than the beef by the weight of the plastic and string, in a ratio inversely proportional to the small size of chops (i.e. the more someone boasts about the local simplicity achieved by his microkernel, the more global complexity he has actually added with regard to similar design without microkernel).” (Source)

Now, this clearly explains the drawback of the microkernel design: a microkernel design inevitably gets heavy and bloated (contrary to what the name ‘microkernel’ implies), thus reducing its speed– simply not acceptable for everyday users. QNX, on the other hand, feels everything but bloated and sluggish, and that is probably also why it is one of the current market leaders in the embedded world. Now, why does QNX’ microkernel (named ‘Neutrino’) seem to perform better than other microkernels? This is where it gets really technical, and I can not give a crisp explanation, since I am not qualified. My technical knowledge is simply too limited. A post by Bernd Paysan, though, in alt.os.multics explained why QNX performs better than other microkernels:

“[…] Unix’s syscalls all are synchronous. That makes them a bad target for a microkernel, and the primary reason why Mach and Minix are so bad – they want to emulate Unix on top of a microkernel. Don’t do that.

If you want to make a good microkernel, choose a different syscall paradigm. Syscalls of a message based system must be asynchronous (e.g. asynchronous IO), and event-driven (you get events as answers to various questions, the events are in the order of completion, not in the order of requests). You can map Unix calls on top of this on the user side, but it won’t necessarily perform well.”

QNX’ applications do exactly what Bernd Paysan concludes– “[…] if you design the application to use [QNX’] message passing APIs, it will work well.” (I got this information from Christopher Browne’s Web Pages, under “3.2. The Fundamental Challenge of Microkernels”)

click for a larger view There is a lot more info on microkernels to be found on the internet. If you enjoy discussing matters such as proprietary vs. open-source, PPC vs. x86, GUI vs. CLI and so on, you will certainly find the microkernel vs. monolithic kernel discussions extremely interesting. A must-read on this subject is the classic discussion between Andy Tanenbaum (creator of Minix) and Linus Torvalds (creator of the Linux kernel). With Andy Tanenbaum being a proponent of the microkernel, and Linus Torvalds being a supporter of a monolithic design, all the ingredients were there for a very interesting ‘flamewar’ (according to 1992 standards this was very much a flamewar). An extract of this discussion, held in comp.os.minix in 1992, can be found here. Even if you are not interested in microkernels, it is still a good read. Especially the attitude towards the future of the Intel platform would prove to be… Sort of wrong.

So far for a short description on the merits of the microkernel, with the Neutrino kernel in particular. I strongly believe that a lot of people have a lot more interesting things to say about this subject than I do, seeing my limited knowledge on kernel design. Therefore, please feel free to correct me.

I now wish to move on to the actual goal of this article: how does QNX perform as a desktop operating system?

Getting QNX

For this experiment I used the QNX Neutrino RTOS 6.3.0, for x86. In order to obtain the Neutrino RTOS, you have to get the QNX Momentics Development Suite 6.3.0, the version which uses the QNX Neutrino as development host (one can also use Windows, Linux or Solaris as hosts). The Neutrino host version includes the QNX Neutrino RTOS, and this can be installed from the bootable CD. This all might seem very confusing, but remember that QSS’ main goal is not to let your run the Neutrino kernel on your desktop.

You will have to sign up here, then go to the download center, and then select the “Product Evaluation”-link. Once there, sign up for the “QNX Momentics Professional Edition – Evaluation”. Do not let this fool you- it is not the Neutrino RTOS that has been restricted to 30 days of use; it is the QNX Momentics Development Suite Professional Edition (running on top of Neutrino) that is restricted. Which makes perfect sense, since without this suite, developing software based on QNX for your device is pretty hard. The operating system (and its applications) will not expire.

Installation

The specifications of my test system are as follows:

  • AMD Athlon XP 1600+;
  • 512 MB SDRAM;
  • Ati Radeon 9000 128 MB DDR-RAM;
  • 40 GB ATA133 HDD;
  • Realtek 8139;
  • C-Media CMI-8738;
  • Microsoft USB Trackball;
  • DVD-ROM;
  • CD-R(RW).
  • I burnt the 512 MB .iso file onto a CD-R using Toast, a Macintosh burning program. The burn went fine. I put the CD into the DVD drive, and rebooted my computer. It correctly booted from the CD, it scanned for hard disks, and then it would hang, stating that it could not find any space to install QNX on. This was rather peculiar, since I had 16 gigabytes of unformatted space on my hard disk. This error did not occur when I installed QNX 6.1/6.2, on the same hardware, a long time ago (I am rather happy with my current x86 setup; it works with basically all operating systems, so I am not keen on changing it).

    After several reboots, I looked up OpenQNX, and after a forum search I quickly discovered someone else with the same problem. I have the advantage that 6.3.0 has been out for a while now, and therefore I can rely on others for solutions to my problems. This particular person solved the issue by doing a forced installation, from the boot menu, accessible by pressing space during bootup. It indeed worked; I was now ready to install.

    QNX’s install procedure is very easy to use, text-based, but lacks any advanced features seen in, for example, several Linux or BSD installation programs. The first option it presents you with is whether or not to use verbose (debug) mode, and seeing I was not interested in doing any debugging, I chose ‘no’. After selecting ‘no’, it asked for my license key, which was sent to my email-account after signing up for the evaluation. I entered the key, agreed to the EULA, selected my hard disk as target for the installation, and enabled support for large disks. Then I selected the installation source, and the very basic partitioning tool loaded. The partitioning tool is basic because you can only delete a partition, or create a QNX partition. The creation of partitions is rather odd, since you can only select preset sizes; if you have 16 gigabyte free, you can select to create a 16 gigabyte partition, or a 8 GB, or 4 GB and so on. That is something advanced users will not like, but I must say that I like it. The easiest thing to do is just to install QNX as the last one in your multiboot setup, letting it fill up the remaining space on you hard disk.

    After confirming I wanted the QNX partition to be 8 GB in size, the actual installation started. And this is where I encountered a second error: install was unable to mount the QNX disk. I am pretty confident that QNX is not the one to be blamed for this one; my DVD drive (LG Electronics) has had minor issues before, and therefore I am willing to give QNX the benefit of the doubt on this one. I simply restarted the installation, but this time using my CD-R(RW) as source drive. All went fine this time.

    After the main system was installed, the installer asked me wether I wanted to install the various optional components of the development suite; I installed all these options. To install only the QNX Neutrino RTOS, without the Momentics Development Suite, do not install all these optional components. Next up was bootloader installation. Just like QNX’ partitioner, the bootloader is also extremely Spartan, and only able to boot four partitions (no support for extended partitions). Luckily QNX can be booted by any bootloader (BeBootMan, Grub, Lilo) without much work. Simply pointing your bootloader to the QNX’ partition should suffice. After this, the installation was completed and I was asked to remove the installation media and reboot.

    Photon MicroGUI

    If you come from a Windows/Linux environment, the first thing you will notice when booting into QNX is the short time it actually takes; about 11 seconds (from bootmanager to PhotonUI login screen). Personally, I find this very important; there is nothing that annoys me more than slow-booting operating systems.

    The PhotonUI login screen has received a facelift since 6.2. You can now simply select a user, while in previous versions you could only enter a username/password. After logging in, we encounter the most impressive feature of QNX: PhotonUI.

    PhotonUI has been designed with the same design principles in mind as the microkernel: highly modular. Just like the Neutrino kernel, Photon utilizes a small core, with most of the services it can provide located in optional memory-protected processes. The result is the same high fault-tolerance and modularity as provided by the Neutrino kernel.

    Photon has a very good font manager, supporting multiple font formats, i.e. TrueType. QNX also supports font anti-aliasing. You can enable anti-aliasing in the fonts settings panel, located in the Launch/Configure menu. Because of the anti-aliasing, fonts on QNX look very crisp, as you can see in this screenshot:

    A very distinctive feature of PhotonUI is its sidebar; it holds shortcuts to various applications, and plugins. These plugins include a CD-player, mail checker, a workspace manager, and a system monitor. This sidebar, ‘Shelf’, is configurable through an easy-to-use configuration program. The sidebar is quite vital, since PhotonUI does not support desktop icons, and therefore, if you do not want to dive into the Launch menu all the time, you will have to resort to the sidebar. As you can see in the following screenshot, the sidebar is divided into various sections that can be hidden:

    Overall, PhotonUI is an amazing interface, with a clean and elegant design, and high consistency. PhotonUI also proves that a highly modular design can be very responsive and fast. In fact, I think that Photon is one of the most responsive UIs I have ever used, only beaten by BeOS’ Deskbar/Tracker. For me, it outperforms Explorer, Finder, KDE and others anytime, but, to be fair, this is just my opinion, and it is not based on any actual benchmarks.

    Usage

    This is of course the most vital part of this article. For QNX to be truly viable as a desktop operating system it must be capable of the following tasks:

  • Web browsing;
  • Email;
  • Instant messaging;
  • Word processing;
  • Easy software installation;
  • Easy to configure;
  • Multimedia;
  • Software.
  • Remember that this is just a selection of tasks; these are the things that I find important in a secondary desktop operating system. Your criteria may very well differ from mine.

    Web browsing

    click for a larger view

    Concerning browsers, QNX comes standard with Voyager (QNX’s native browser) and Mozilla 1.6. Voyager is a browser capable of using several engines; it uses Gecko as default. Voyager is Macromedia Flash enabled. Also, FireFox 1.0PR is available for QNX. Get it here. Here is a screenshot, showing off all three browsers, displaying OSNews.com:

    Emailclick for a larger view

    QNX does not come with an email application pre-installed. Luckily, Thunderbird 0.8 is available for QNX, as well as several text-based clients. You can download Thunderbird here. I do not think Thunderbird requires an introduction.

    Instant Messaging

    QNX has various protocol-specific IM clients. Gaim is also available in the form of of a GTK+ port, but the versions available are pretty old (0.59 and 0.76), and therefore I recommend using the protocol-specific clients. However, there is no MSN client for QNX, so MSN users (like me) are left in the dark.

    Word Processing

    There is a native AbiWord port available for QNX from AbiSource (version 2.0.1). This port performs extremely well, and it would definitely satisfy word-processing needs for most people.

    Easy Software Installation

    This is one of QNX’ strong points: its package management system. It is repository-based, using xml. click for a larger view With the QNX Software Installer you can easily connect to any QNX Repository, in much the same way as you would surf to a website; you enter the location of the repository (i.e. ‘http://www.whatever.com/software/qnx/repository’) and the Installer automatically downloads all the necessary info. When selecting and installing a package, dependencies are automatically found and installed. Repositories do not have to be on the net; they can also be located on your harddisk or a CD-ROM. In fact, every package (i.e. AbiWord.qpr) is in itself a tiny repository. After installation, links to the programs are installed into the Launch menu, in the appropriate category. The obligatory screenshot:

    Easy to configure

    click for a larger view

    I find QNX and PhotonUI extremely easy to configure– but of course I realize that not everyone will agree with me on that one. I included a screenshot showing a few configuration windows. Judge for yourself:

    Multimedia

    QNX is fully equipped when it comes to multimedia; various formats are supported, and support for more formats can be downloaded.

    Software

    A desktop operating system needs more applications than the ones mentioned above. And that is, not surprisingly, one of QNX’ weaknesses. For instance, cdrecord has been ported to QNX, but there is no GUI front end for it. Another problem is that there is no graphical mounting available; CD’s will automount, but floppies will not. Furthermore, there are no means of accessing a digital camera.

    On the other hand, there are also a lot of things that QNX does have. Full featured FTP client, IRC clients (both graphical and console), lots of audio players, ect. All sorts of software is available to QNX users. The ‘3rd Party Software Repository’ is pretty vast, and it is not the only repository around.

    Hardware Support

    Hardware support has always been a tricky thing for smaller desktop operating systems. We all know that for smaller projects it is extremely difficult to support all the hardware that is available to x86 users. For bigger operating systems like Windows and Linux it is less difficult; the companies behind the hardware will develop drivers for those operating systems themselves.

    Still, QNX does quite well. All the hardware in my system was properly detected and configured, with no extra editing required. Of course it would be impossible for me to list all the hardware available. Luckily, QNX Software Systems provides an up-to-date, easy to use hardware compatibility list. Check for your hardware here.

    Conclusion

    It is very difficult to draw a conclusion on whether QNX is an operating system one can use on the desktop; mainly because of the fact that QSS does not even pretend to be making a desktop operating system. Vital functionality of a desktop OS are missing, like easy support for consumer USB devices, a CD recording application, native Email client, and more.

    However, what makes QNX so interesting is the amazing potential it has. QNX is one of the most POSIX-complient operating systems; porting any *nix application should not take more than a recompile. Secondly, the availability of GTK+ 1 and 2 should also be noted. But most interesting of all is the comprehensive graphical development environment known as QNX Momentics. I really suggest reading up on Momentics, and the possibilities it provides, here.

    Can QNX be an operating system for your grandmother? Well, if she is like my grandmother, who only browses the web and reads her email; then, yes. But if she requires anything just a bit more advanced, like CD-Writing, or digital camera access, QNX will not do.

    Still, this does not mean QNX is useless as a desktop operating system. Especially if you want to try something completely different, with a different design, different internals and different goals than the more mainstream operating systems, then QNX will definitely be your game. I especially recommend QNX for ‘second’ systems– since it lacks features a main operating systems must have (in my opinion).

    I happily used QNX 6.2.0 on my PII 366 laptop, which only featured 64 megabytes of RAM. It provided me with a full featured operating system, running at a very acceptable speed. I can surely recommend anyone with an interest in alternative operating systems to try out QNX– you will be pleasantly surprised.


    If you would like to see your thoughts or experiences with technology published, please consider writing an article for OSNews.

    67 Comments

    1. 2004-11-18 10:38 am EST
    2. 2004-11-18 10:41 am EST
    3. 2004-11-18 10:42 am EST
    4. 2004-11-18 10:45 am EST
    5. 2004-11-18 11:07 am EST
    6. 2004-11-18 11:17 am EST
    7. 2004-11-18 11:20 am EST
    8. 2004-11-18 11:30 am EST
    9. 2004-11-18 11:37 am EST
    10. 2004-11-18 11:52 am EST
    11. 2004-11-18 12:04 pm EST
    12. 2004-11-18 12:08 pm EST
    13. 2004-11-18 12:14 pm EST
    14. 2004-11-18 12:21 pm EST
    15. 2004-11-18 12:25 pm EST
    16. 2004-11-18 12:31 pm EST
    17. 2004-11-18 12:41 pm EST
    18. 2004-11-18 12:49 pm EST
    19. 2004-11-18 12:50 pm EST
    20. 2004-11-18 2:35 pm EST
    21. 2004-11-18 2:53 pm EST
    22. 2004-11-18 3:08 pm EST
    23. 2004-11-18 3:15 pm EST
    24. 2004-11-18 3:18 pm EST
    25. 2004-11-18 3:23 pm EST
    26. 2004-11-18 3:36 pm EST
    27. 2004-11-18 3:48 pm EST
    28. 2004-11-18 4:08 pm EST
    29. 2004-11-18 4:32 pm EST
    30. 2004-11-18 4:35 pm EST
    31. 2004-11-18 4:46 pm EST
    32. 2004-11-18 4:50 pm EST
    33. 2004-11-18 5:36 pm EST
    34. 2004-11-18 5:40 pm EST
    35. 2004-11-18 5:51 pm EST
    36. 2004-11-18 6:15 pm EST
    37. 2004-11-18 6:22 pm EST
    38. 2004-11-18 6:25 pm EST
    39. 2004-11-18 6:25 pm EST
    40. 2004-11-18 6:36 pm EST
    41. 2004-11-18 6:36 pm EST
    42. 2004-11-18 6:41 pm EST
    43. 2004-11-18 6:50 pm EST
    44. 2004-11-18 7:08 pm EST
    45. 2004-11-18 7:27 pm EST
    46. 2004-11-18 8:05 pm EST
    47. 2004-11-18 8:32 pm EST
    48. 2004-11-18 8:59 pm EST
    49. 2004-11-18 9:10 pm EST
    50. 2004-11-18 9:16 pm EST
    51. 2004-11-18 9:23 pm EST
    52. 2004-11-18 9:24 pm EST
    53. 2004-11-18 10:32 pm EST
    54. 2004-11-18 10:53 pm EST
    55. 2004-11-18 11:18 pm EST
    56. 2004-11-19 4:34 am EST
    57. 2004-11-19 6:11 am EST
    58. 2004-11-19 6:58 am EST
    59. 2004-11-19 2:20 pm EST
    60. 2004-11-19 3:09 pm EST
    61. 2004-11-19 10:32 pm EST
    62. 2004-11-19 11:11 pm EST
    63. 2004-11-20 2:50 pm EST
    64. 2004-11-20 5:16 pm EST
    65. 2004-11-20 5:59 pm EST
    66. 2004-11-20 7:25 pm EST
    67. 2004-11-21 11:25 pm EST