Wednesday, January 3, 2024

QNX Neutrino 6.1 (2001) - Widely successful but underappreciated outside embedded (part 2 - tour of installer and running system)

(this is a slightly edited transcript of part 2 of my YouTube video review of QNX 6.1; here is part 1)

 

Installation

Native installer

QNX 6 supports both running as a live CD and installing to the hard drive using the same boot CD. Pressing F2 would boot the live system from the CD, which would basically be identical to running an installed system except that any modifications to the system wouldn't persist across reboots since they are only saved to a RAM disk. Pressing F3 starts the installer, which is quite basic and is text-only, but despite this, it's pretty straightforward. 

The first couple of screens allow enabling verbose mode and show a link to the license (for some reason they didn't bother to include the full license text in the installer, even though there would be plenty of room in the boot image). 

After this, it asks which disk you want to install on. It then asks you whether you want to limit the size and placement of the partition to allow booting on old BIOSes with limited disk addressing, and after this, which optical drive to install from. 

If you try to install to a hard drive with no room as I've done here, it'll give you this menu. Only the first option to delete partitions actually does anything. The other two options just abort the install. Resizing generally required a third party utility like Partition Magic. Support for resizing partitions in OS installers was rare back then. 

The third option is sort of interesting. Similar to BeOS and some Linux distributions, QNX could be installed in an existing Windows partition, which made it a lot easier to try out. However, this native installer doesn't support installing on a Windows partition. Instead, there is a completely separate installer that runs under Windows. It also says that you can install it in a Linux partition, but I don't think they ever actually got around to adding support for that.

After deleting the partition, it prompts for the size of the partition (one rather weird limitation is that it only lets you select fixed fractions of the available space rather than specifying an arbitrary size like most other partitioning utilities). It then asks you about which boot loader variant to install, and proceeds to create the filesystem and copy the base system to it. After this, it reboots. Everything else, including optional package installation, is done after the base system is installed.

Windows-based installer

The Windows-based installer is even more straightforward than the native one. When you insert the disc, you get this menu that lets you start the installation as well as do things like make a boot floppy or read the documentation. 


It's based on InstallShield, and installing QNX this way isn't all that different from just installing a Windows application. It's about comparable to the Windows installer for BeOS, and is certainly a lot easier to install than many of the Linux distros of this era that supported installing on Windows partitions, which sometimes required either manual extraction or a boot floppy and often had issues with hardware detection.

After asking for the drive on which to install the system, it extracts the boot images and then asks for the size of the workspace image that holds files that you modify or create.


Rather than installing QNX files directly in the Windows filesystem, it creates a pair of image files that contain QNX filesystems, since the FAT filesystems used by Windows don't support the Unix-style file attributes that QNX requires. Once the images have been copied it prompts for the root password and the login information for a regular user account.

After the install finishes, it asks to reboot the system, and once you do that, you'll see that options for QNX have been added to the Windows boot menu. This only works fully on Windows 9x because it uses a DOS driver in config.sys to load QNX. It is possible to install it alongside an NT-based version of Windows, but only on a FAT partition and you'd also need to always boot it from a floppy. The Windows-based installer was never properly updated for NT-based Windows and was dropped in 6.2.1.


Here's what booting into the installed system looks like (it's basically the same regardless of whether you installed natively or from Windows). The bootloader is much simpler than pretty much any other Unix-like OS after the PDP-11 era; in fact, it is just a boot sector that loads the OS image directly and lets you boot an alternate image by pressing Escape. The boot process is less verbose than some other Unices. Nothing particularly interesting here.


After you boot into a freshly installed system you get this nice graphical configuration utility that lets you pick your display driver, resolution, and refresh rate. This is far better than what you got on a lot of Linux distros of the time, where you'd often have to manually enter your monitor's signal timings and hope you wouldn't damage anything with an out-of-range video mode unless you were lucky enough to have one of the handful of monitors in the configuration database. QNX's utility is basically on par with that of Windows of the same era, with support for auto-detection of hardware and the ability to test modes and auto-revert after a timeout in case the mode didn't work. Once you select a mode, Photon is restarted and you get the login screen. Everything that follows is actually from an image I had installed a while ago (which has some extra packages already installed) rather than a freshly-installed system.

Running system

Login screen

    This is running under the aforementioned Photon window system, rather than X11 like on most other Unices, although as you'll see later on there's an optional X11 implementation that runs on top of Photon. Photon is somewhat similar in concept to X11 in that it mostly separates policy like drawing widgets and manipulating windows from mechanism like getting pixels on screen and directing input events to different programs. However, it's more modular than X11 in many ways. The "waiting for input driver" message that shows up before the login widgets show up is a result of this; the window server and input driver are completely separate programs that don't always start at the same time. This separation of the server side of the window system into multiple servers is why Photon is called a "MicroGUI", by analogy to a microkernel. 

One weird thing about the login screen is that it moves the login window around as a screen saver, a bit like early versions of Windows NT, although those just moved a dialog box rather than the login window itself. Otherwise the login screen isn't that different from what you see on a lot of other Unices.

Desktop

    Photon 2 is generally fairly Windows-like, although instead of having desktop icons like in Windows you have this shelf on the side, which has a list of frequently-used applications. You also have various other applets in the shelf besides the launcher. It's vaguely similar to the sidebar in Windows Vista, although of course that didn't come out until several years later. Maybe Microsoft got the idea from QNX, although probably not. Below the launcher, you've got a system monitor that shows CPU load, memory usage, and network throughput. There's also a CD player, which I can't test since QEMU doesn't emulate audio CDs, as well as a pager for switching between virtual desktops and displaying the windows that are open on each of them, similar to what you'd find in many X11 window managers, although I don't think I've seen any X11 window manager call it a "World View". The taskbar is actually just a separate instance of the shelf configured horizontally with different applets. 

If you right click on the shelf, you get a dialog that lets you configure the shelves. You can add new shelf instances as well as configuring the applets and groups within them. One rather weird thing about the default configuration is the magnifier in the bottom right corner, which is rather useless because it is so small, although if you add an instance to a shelf with more space you can actually read stuff in it. For some reason you can also make it distort the view by using different scaling factors for X and Y.

GUI applications


QNX includes quite a few graphical applications and utilities in the default install. There were also some third-party programs written for Photon, although there were definitely a lot fewer than even for systems like BeOS. Most of these were open source or at least free as in beer, but there were also a few shareware applications despite the relative obscurity of QNX as a desktop OS. Besides the AmigaXL emulator that I mentioned earlier, the only other third-party desktop application I could find that could even remotely be considered to be a major commercial one was a port of the Opera web browser. Of course, since QNX is a functional Unix, there was also a fair bit of generic Unix software both terminal- and X11-based that supported it.

Photon comes with most of the usual bundled utilities you'd expect from a desktop environment of the era like a file manager, a simple graphical text editor, a calculator, a help viewer, and a terminal emulator, among others. It also includes a web browser, an email client, a media player, a package installer, and several simple games. Doom and Quake are also included on the CD, although I haven't installed Quake since it requires 3D acceleration and QNX only supports that on 3dfx Voodoo graphics cards, which QEMU doesn't emulate.

When you first log into a freshly-installed system, you get this intro, which makes it very obvious that the main intended use case for the desktop build of QNX was as a development workstation OS for QNX-based embedded devices. Other types of workstation applications besides some generic open-source ones were nonexistent as far as I can tell (which is obvious from the lack of commercial desktop applications that I mentioned before). 

File manager

Here's the file manager. Despite the unconventional appearance of the window decorations, the buttons are more or less equivalent to those in Windows 95 and later, the biggest difference being that some windows like the intro have a shade button to hide everything but the title bar, and some dialogs have a smaller title bar.

The file manager is quite basic. It lacks features found in most of its contemporaries, such as custom icons for different file types (it only distinguishes between directories, executables, and everything else), user-definable actions for opening files (it only has predefined Open, View, and Edit actions), and a trash can.  It's roughly comparable to what you'd find in Windows 3.1x, although it's missing a few features you'd find there like other types of views besides a detailed list, as well as a tree view of the current folder in the sidebar.  

The Windows 3.11 file manager for comparison


However, it does have some features that the Windows 3 file manager lacks, like a list of bookmarks, a path bar with a history of recently used paths, a filter that can show only files matching a wildcard pattern, context menus, and clipboard-like copying and moving. One sort of odd thing in the context menu is that in addition to the usual menu item to create a new folder, it also has a menu item that lets you create an empty file. There's no way to launch an application to create a new file from the file manager like in many other OSes.


Another weird limitation is that the file type reported in the properties window is the same thing reported by the file command in the shell, which is determined by the file's contents, but the file association system is completely separate from this and can only match patterns on file names (unlike in Windows, it matches based on wildcards rather than just being limited to matching extensions). 

Text editor

The graphical text editor is relatively basic. It's about comparable to Write or WordPad on Windows, although it has support for multiple open files in one window. One interesting thing is that even if you use rich formatting, it saves the file as plain text, and the formatting is saved as a footer wrapped to look like a comment to anything that uses C or shell-style comments, which means you can have rich formatting in source files if you want. Off the top of my head, I can't think of any other text editor that can do such a thing.

Calculator

The calculator is about comparable to what you get in Windows from around the same time, although it has a few extra functions. One rather weird quirk is that some of the buttons have multiple functions and you have to press the "2nd F" button to access them, as you might on a physical calculator.

Help viewer

The help viewer is fairly full-featured and user-friendly. It's based on a cut-down build of Voyager, the bundled browser, and all of the help files are in the form of local HTML files. 


Most of the documentation here is related to APIs and system architecture, again showing that desktop QNX was mostly intended to be used as a development platform for embedded systems. It also includes HTML manual pages for commands and library functions, with the typical layout for Unix manual pages. However, unlike every other functional Unix that includes manual pages in digital form of which I am aware, the HTML manual pages are the only ones present in the base system. Both conventional roff manual pages and the man command are absent from the base system, although you can find the man command in the third-party repository for viewing roff manual pages provided by third-party packages. 


Besides their manual pages, some of the bundled graphical applications have a single built-in help page that doesn't actually use the help viewer, but that's the only documentation for all of them except for the GUI builder, which has a fair bit of documentation available, being the only major one that is development-related.

Browser

Here's the full Voyager browser. It's based on a completely original engine and is relatively full-featured for its day, being roughly comparable to contemporary versions of Netscape and Internet Explorer. It supports HTML 3.2 and Javascript 1.1, as well as Flash applets. 

Java applets aren't supported out of the box though. Apparently there was a third-party plugin for Java applet support, but I can't seem to find much information on it. One rather unusual architectural feature of Voyager is that the UI and engine are actually separate programs underneath, although there is only one instance of each rather than separate processes per window in the way that modern browsers run one process per tab. 

"voyager" is the UI and "vserver" is the engine
 

It's also possible for other Photon programs to embed an instance of Voyager by just running the engine and providing their own UI. Otherwise, it is fairly typical of browsers from the era, and it has the main features you'd expect from a browser back then, like bookmarks, which it calls a hotlist, and a history list with autocompletion in the address bar. The only really weird thing related to the UI is that viewing the source of a page opens a terminal with less, a commonly-used terminal pager.


Of course, since it's 22 years old, it completely breaks on the modern web. Attempting to access any modern HTTPS site seems to completely hang the engine to the point where all other network accesses hang until the browser is restarted. Here I'm using webone, which is a proxy that converts SSL and some images to allow old browsers to sort of work on the modern web, although it doesn't convert HTML or JavaScript, which would basically require the proxy to run an entire modern browser instance internally. As a result, rendering of any page that uses remotely recent versions of JavaScript and HTML will be completely broken. 

 

Probably the easiest way to actually get pages that work in it is to use WaybackProxy instead, which is what I was using before. This does something similar, but it also transparently redirects everything to the Internet Archive. It's not perfect, since anything that requires server-side dynamic content won't work and not everything gets archived, but sites that are in the archive generally work otherwise.

Gopher and FTP sites are also supported. Unlike the Web, little has changed with those protocols, so they generally just work without having to do anything special.

 

Mail client

The mail client is relatively basic. Like the help viewer, it also uses the Voyager engine. I haven't been able to actually test it out because it doesn't support SSL and for some reason it doesn't seem to want to connect to an SSL-stripping proxy at all.

 

Media players

Two different media players are included. The first one, Photon Media Player, is pretty barebones and its selection of formats is pretty limited. It supports audio and video playback from local files, audio CDs, and remote servers. There was also a DVD plugin available, although that was an extra cost option and not included here. One slightly odd thing is that video is displayed in a separate window from the main one and the controls stay in the main window. Also, the icon changes depending on what kind of media file is open. Otherwise, there's nothing too special about it. 


The second media player is a port of RealPlayer 7. The UI appears to to be completely original to the QNX version, and is much more lightweight than the ad-infested Windows versions of the time. 

Along with the media players, a simple sound recorder is included, but QEMU audio input doesn't seem to work for me so I can't properly test it. Unlike the sound recorder in Windows, it doesn't have any playback support and clicking the play button opens the media player. The sound recorder also automatically opens the mixer utility on startup. A rather weird thing about the mixer is that it has an advanced settings dialog that is completely blank. I'm assuming it was intended for use in a later version and was just mistakenly included in the released version, but even later versions left it blank.

 

Package installer

The package installer is fairly user-friendly and it supports repositories on web and FTP servers as well as local directories like those on CDs, along with automatic dependency resolution. 

Unlike in most Linux distros of the era, this installer has a simple dialog to add repositories rather than requiring you to manually edit configuration files. Even some modern Linux distros haven't caught up to a 22-year-old version of QNX in this regard. 

Here I'm installing a few driver development packages from the main QNX install CD as an example. Most of the packages on the install CD don't show up by default because they're already installed. 

There's also another CD with various third-party programs, and I might show them at some point. Installing from different CDs doesn't even require adding them as separate repositories; it is possible to install from whatever disc is in the drive with the pre-defined CD repository entry. One limitation is that the CD seems to be only auto-mounted at boot, and if you want to mount one that you inserted afterwards it seems you have to mount it manually from the terminal, although this may just be an emulator issue. Installing from a web repository is similar to installing from a CD repository. Surprisingly, as of this post they still maintain the official repository for a version that's 22 years old, although all of the packages there can also be found on the OS installation CD.

Games

Several games are included in the base install of Photon. Columns is a vaguely Tetris-like puzzle game in which you have to match lines of at least three gems of the same color. Unlike a lot of similar types of games, only vertical triominoes exist, and instead of rotating the entire triomino, you instead cycle the ordering of gems within it. Occasionally you'll get a super gem, which has a hole in the middle, and matching a line with one of these will clear all gems on screen of the same color regardless of whether they're in a line. When you do this, Perseus in the corner there pumps his fist, and when you lose, he shakes his head.

Like almost every other platform out there, QNX has a port of Doom. I think this is a direct port of the original Linux version of Doom rather than one of the later forks of it, although I'm not completely sure of that. It seems to be limited to 320x200, so it ends up being rather small on a full HD screen. Also, music doesn't work because QNX's sound server seems to be PCM-only with no support for any kind of hardware synthesis, despite being based on an early version of Linux's ALSA audio driver framework, which normally has full hardware synthesis support.

Even though I haven't installed Quake on this particular image, I did try it out on 86box, which does emulate Voodoo cards, and the QNX port of Quake does run on it, but it is so slow as to be completely unplayable. To even call it a slideshow would be extremely charitable. This may just be happening because my main PC is quite old and 86Box strongly prioritizes cycle-accurate timing over performance, but I'm not quite sure if that's the only reason.

The remaining games are all based on classic board and card games. You have Othello, Peg Solitaire, Video Poker, and Klondike Solitaire. One interesting thing about Klondike is all of the face cards feature early pioneers in computing.

Othello

Peg Solitaire

Video Poker

Klondike Solitaire


Other utilities

There are also several smaller utilities included with Photon. The file search utility is pretty barebones. The only search parameters it supports are name, size, and whether to include regular files, directories, or symlinks. It doesn't support file associations, and tries to open everything in the text editor by default. It is possible to change which program it uses to open it by entering a different command, but that requires you to know the actual filename of the program.



the search program tries to open a binary in the text editor, which fails with a decoding error

A simple screenshot utility and image viewer are included. The screenshot applet allows taking screenshots of the entire screen, a single window with or without the frame, or a user-selected region. The image viewer can make some simple modifications to images like scaling, cropping, flipping, and changing the color space. Nothing too special here.

Flipping the desktop wallpaper in the image viewer

The task manager shows quite a few types of process state, with quite a few tabs for inspecting the state of an individual process. However, it doesn't auto-refresh, nor does it show instantaneous CPU load as a percentage. You can see the various server processes that make up the system, like devb-eide, which is the disk server for IDE/PATA disks, io-net, which is the network stack, Photon, which is the core Photon event-dispatching server, io-graphics, which is the Photon graphics server, and so on. 

devb-eide (disk server)

io-net (network stack)

Photon (Photon core event server)

io-graphics (Photon graphics server)

procnto (process manager; built into the kernel)

The equivalents of devb-eide, io-net, and some parts of io-graphics would all be built into the kernel on a conventional OS like I mentioned earlier, but on QNX all OS services except procnto are just regular user programs that use a few special APIs available to any process in the system. procnto, which provides process management and core virtual filesystem services, is built into the kernel although it is logically separate from the core part of the microkernel that provides low-level multitasking and inter-process communication.

One rather interesting utility is the region viewer, which allows you to see Photon's internal model of the display. Like I said earlier, Photon is an extremely modular window system, with the core window server being pretty much just a dispatcher that transfers events between the various driver servers and client programs like applications and utilities. You can see the various types of regions and how they line up with what you see on screen.


In addition to the video mode and shelf configuration utilities you saw earlier, QNX also provides several other configuration utilities. Like the video configuration utility, the network utility is pretty straightforward and is better than what you got on many Linux distros of the era, allowing you to configure most network settings without having to manually edit any config files. 

There are also utilities for configuring the mouse, GUI appearance, time and language settings, and screen saver.

Mouse configuration

GUI configuration (wallpaper)

GUI configuration (window appearance)

Screen saver configuration

Only a few screen savers are included, all of which can also be found in xlock and/or xscreensaver. One conspicuous omission is a graphical user manager, which has been fairly common on Unix-like OSes since the early 90s. 


Sphere

Rocks

Qix

Puzzle

PhPyro

Flame

PhAttract

PhMatrix

Development tools

As far as graphical development tools go, this version of QNX only provides the Application Builder, which is a GUI form editor and build system front end. It isn't quite a true IDE though, because it opens an external editor when you want to actually edit code. Later versions included an Eclipse-based IDE called Momentics that could run self-hosted on QNX as well as for cross-building on Windows, MacOS, and Linux. Momentics is still the primary supported IDE for current versions of QNX, although self-hosting support was removed a while ago like I mentioned earlier.

The Application Builder supports full WYSIWYG editing of application windows and provides access to the full set of widgets supported by Photon. You can associate callbacks with widgets and launch an editor on the generated source files. You can also build and run your application from here. Underneath it's just generating Makefiles, so you're also free to build your application from the command line.

Building and running a test application
 

AmigaXL

I've installed the AmigaXL emulator I mentioned earlier. This apparently is a heavily-enhanced fork of the well-known open-source emulator UAE. It generally tries to be as unobtrusive and transparent as possible. When you launch it, it takes over the entire screen, without the configuration dialog you see in stock UAE. After about a minute or so, it boots into AmigaOS 3.9. It actually feels fairly responsive considering the fact that I'm running Qemu here with a TCG-emulated CPU rather than virtualizing the CPU with KVM. 

 


However, it does seem a bit flaky at times. The display blitting sometimes ends up leaving random crap on screen for whatever reason, and the colors on some of the buttons are off. Also, double clicks don't always register, even though timing seems to be otherwise OK. I suspect these issues may be due to something with QEMU rather than with AmigaXL or QNX. As I mentioned earlier, there's a bit of integration between AmigaOS and QNX. I can switch back to the QNX desktop by pressing the switch screen button on AmigaOS, and the emulator adds an Amiga-like bar with its own switch screen button to the QNX desktop. 


It's also possible to launch QNX programs like Voyager from AmigaOS, and all the volumes you see on the desktop are QNX directories. Similarly to disks, AmigaXL also emulates network devices, printers, and audio using the devices of the host QNX system. Instead of a conventional host-based configuration dialog like in stock UAE, AmigaXL is configured through Amiga preference applets. 

Otherwise, it's more or less a stock AmigaOS 3.9 system, and is beyond the scope of this review. To shut down AmigaXL, there's a special applet; there's no way to close it from the QNX desktop other than killing the process from a terminal, nor is it possible to just quit Workbench.

X11 server

Like I said earlier, QNX has an X11 implementation that runs on top of Photon. The only major application included on the OS disc that uses this is the DDD debugger, which is also available for various other Unices.

However, most portable Unix X11 programs from this era should work. A few of the standard X11 utilities like xclock and xterm are also included, although there isn't really much use for them since Photon already provides native equivalents. As you can see, QNX's X11 implementation integrates fairly well with Photon. It is running a special window manager that integrates with Photon's native window manager. The only way you can tell that a program is actually for X11 is the splash screen on startup and the completely different widgets.

Command line and base OS

The Photon terminal emulator is similar to xterm, although it has a few features that are missing from xterm. It provides a graphical configuration dialog, whereas xterm only has context menus. It can display various information in the titlebar about the session like the name of the underlying terminal device file and the name of the program currently running in the foreground.

It also has a feature that lets you search for the selected text in the help viewer, which is useful for looking up manual pages from the terminal, since there are no traditional manual pages for first-party programs and library functions.


I've installed zsh as my shell, since that's what I usually use. I've also customized the prompt and added a bunch of aliases. The default shell on a full installation is based on pdksh. There's also the embedded shell, which is a very limited shell for embedded systems, available in a few different versions with different levels of features.


In general, the standard Unix commands and APIs of QNX 6 are fairly typical of functional Unices from this era. In some ways it is similar to System V like the ps command, and in other ways it is more like BSD such as the exclusively socket-based network API.

A few common Unix commands are missing, like several of those related to listing logged-in users.

Some parts are original, like the init system, which looks vaguely BSD-like but not quite, as well as the system logger. 

One major oddity in addition to the lack of roff manual pages is that bundled first-party programs of all types lack any kind of command line option for help. Instead, there is a separate "use" command to get the help for a program.


Both QNX 4 and QNX Neutrino have the use command, but QNX Classic programs instead usually had a "?" option to print their usage. 

An example of the "?" option under QNX 2.21

I'm not quite sure why they decided to introduce the use command when they were converting QNX into a functional Unix for version 4 rather than just changing the help option to be like those under other Unices. Another quirk is that the passwd command is used to create new accounts, rather than having a separate command for this like adduser. Since there is no graphical/menu-based user manager, this is the only relatively straightforward way to add an account. At least you don't have to set up accounts manually like on most really early Unices.

Even though the standard parts are fairly typical, QNX has several features not typically found in conventional Unices. For one, the graphical package installer you saw before is actually a front end for a special filesystem, with most of the contents of the root directory being virtual dynamic mappings rather than actually present in the root of the system volume. The actual files are stored in a hierarchy of immutable package directories instead, with any attempt to change them transparently being redirected to a copy. 

For example, here you can see the password file that is actually being used, and here is the original one included in the base system package.

Another thing this package manager allows that conventional ones don't is deactivating a package, which unmaps the package's files from the visible hierarchy without actually deleting them.

Here's the Doom package in the package manager and the install directory in the terminal...

...and here's what it looks like with the Doom package deactivated

QNX's microkernel architecture makes implementing special filesystems like this, which wouldn't make sense as kernel modules in a monolithic kernel, easier.

Another rather unconventional feature is Qnet, which is a remote filesystem protocol that allows accessing device files in addtion to regular disk files. I've got a second emulator instance of QNX running, and for example, I can run the Photon terminal on the second instance but have it display on the first by simply using an environment variable to point the terminal at the first instance's Photon device file rather than that of the second. 

This is on the second instance


You can see that the hostname in the second terminal is qemu2 rather than qemu1

Since this is implemented at the filesystem level, neither the client nor the server has to be aware that they are running on different machines. This is a much cleaner way to do network transparency than how it is typically done in the conventional Unix world, where user-level services like X11 use socket-based protocols that require both sides to be aware of whether the other end is local or remote. Unfortunately when it comes to mounting remote filesystems, Qnet is rather limited. It can only automount the entire filesystem of each host that it finds, and there is no support for manual or partial mounts. 

By default, it is limited to the local network, but the manual does mention something about support for hosts on remote networks. However, I couldn't manage to get that to work. It seems like it would be a major security hole since the only access control is the standard Unix permissions enforced by the local system. There seems to be no way to restrict what hosts can connect to a Qnet host. In general, Qnet is a fair bit more limited than something like 9P under Plan 9, which supports arbitrary mounts and authentication in addition to allowing remote access to both regular and special files.

In addition to Qnet-based network transparency, Photon also has an external helper server called phrelay for remoting the entire desktop, similar to VNC, RDP, or any of the various proprietary remote assistance programs. This works over anything that provides a byte-stream connection, such as a network connection over TCP, or a serial link, either direct or over a modem. It can either start a new session, or it can also mirror an existing session like I am doing here.


In addition to phditto, which is the native QNX Photon client for phrelay that I am using here, there was also a Windows-based client called Phindows as well as an X11-based one for QNX called PhinX. phditto seems to be rather flaky for me; sometimes it stops updating the window but continues to send input to the remote system, and I was completely unable to get it to work in the mode where it creates a new session rather than mirroring one that's already open.

Another feature not found in conventional Unix is that because QNX is a microkernel and drivers are just regular user programs like I showed earlier, it is possible to stop and start them just like any other program. For instance, I can mount a floppy and then kill the floppy server, and the rest of the system will be completely unaffected. I can manually restart the server and mount the floppy again and it still works fine. 

 

However, support for automatically restarting crashed servers is not part of the base system, but rather an addon package called the High Availability Manager, which I haven't been able to find. One rather unusual feature you see here unrelated to error recovery is that QNX's FAT filesystem driver supports presenting Windows shortcuts as symlinks, which I don't think I've seen in any other OS.

Finally, when you shut down the system, which you can do from the main menu, QNX shows this box with a progress bar and the process it's currently stopping. After that's done, it displays a message saying it's safe to power off. This version doesn't seem to have support for powering down through APM or ACPI. Hardware that lacked support for either was still somewhat common back then.



Conclusion


In general, the Photon desktop and its bundled applications tend to be a fair bit more basic than on other OSes from the same era. Despite this, QNX 6 still feels like a more coherent and polished system than many other PC Unices from back then, especially most Linux distros. X11 configuration especially was a major pain point, with the most common implementation - XFree86 - often requiring lots of tricky manual configuration like I mentioned before. 


Some Linux distributions of the time, like Mandrake, had graphical X configuration utilities, but they weren't always reliable

Photon on the other hand is comparable to Windows in terms of graphics hardware configuration. The OS installation itself was also quite a bit easier than many other alternative OSes if you used the Windows installer. With some additions, QNX could have made a decent OS for general users, were it not for the rather limited application support. This was an especially difficult time for application and driver support on alternative OSes, since Microsoft was at the height of their power. Windows-only software was very common, many websites were specific to Internet Explorer, and no Windows binary compatibility layer like Wine or Wabi was ever ported to QNX as far as I can tell. Wine was in an alpha state back then anyway, so its compatibility was rather limited. It was far easier for QNX to just focus on embedded systems and development workstations.

An early version of Wine from 2000 on Red Hat 6

It's still a shame that QNX or something like it hasn't become more popular outside embedded though. Many of the issues on modern mainstream OSes would be eliminated or reduced on a QNX-like system, and in my opinion QNX-type architecture offers the best balance between performance and compatibility on one hand and security and advanced features on the other of any of the microkernel and componentized OS architectures I've seen. However, QNX itself never quite realized the full potential of its general type of architecture for desktops and servers, with only a few uses of the extensibility features for anything beyond that which was available on conventional OSes, as well as a few architectural limitations for desktop and server use, especially as far as the security model goes. This was mainly because desktop QNX was pretty much just focused on being a development workstation for embedded systems, but there's no reason why a similar OS couldn't take full advantage of what this type of architecture offers. Maybe I can fix the lack of active open source QNX-like systems by finishing my own OS.





QNX Neutrino 6.1 (2001) - Widely successful but underappreciated outside embedded (part 2 - tour of installer and running system)

(this is a slightly edited transcript of part 2 of my YouTube video review of QNX 6.1; here is part 1 )   Installation Native installer QNX...