Voyager Desktop

The Voyager Desktop is an object oriented desktop which tries to resemble the unique features of the WPS known from OS/2. It is based on NOM the Netlabs Object Model. See ‚Äč for more information.


The desktop is built from classes which live in shared libraries. Thanks to the underlying object system the user may add classes (whose instances represent e.g. files or folders) without recompiling the desktop. Thus independend vendors can provide binary only extensions to the desktop.

How to contribute

Before implementing new stuff drop a note on the Voyager mailing list. This prevents duplicate efforts if someone else is already working on the things you have in mind. In addition ML discussions make sure any patches fit into the overall architecture of the desktop.


Only patches and additions covered by the layout license for this project are accepted. Compatible licenses are of course ok. No GPL code will be accepted in the main tree.

Patch policy

Bug fixes may go directly into the tree. Enhancements of classes (like new methods) or completely new classes will first have a test drive for some time to make sure they fit in. Enhancements should be coded as replacement classes not as direct patches to existing classes. If you need to patch an exisiting class to get something done it's likely your design isn't optimal. This doesn't mean enhancement of existing classes to support new features in subclasses are rejected. If it turns out your enhancements are working flawlessly they will go into the main tree which means they will be added directly to the classes in question.


Every new feature (e.g. methods) must be documented in the source using doxygen tags. See the existing source for examples.
Comment your code thouroughly even if you think comments are not necessary because anyone should be able to understand your code.

Patches without proper comments or doxygen documentation will be rejected without discussion.

Coding style

Function and method names
Names are not build with underscores like in the GLib toolkit. Instead uppercase letters are used to separate name parts:


The first letter is always lowercase. Note that this is true for all functions and methods in NOM.
In pure C libraries the first letter is usually uppercase.

Use verbose variables. i, j, k was ok last century but today we have compilers supporting really long variable names. Verbose names make it easier for newcomers to understand your code. Prepend your variables with a meaningful marker (e.g. i for int).
int main(int argc, char *argv[])
  /* This is not ok */
  gint i, k;
  char* p;

  printf("Hello World\n");
int main(int argc, char *argv[])
  /* Use something like this */
  gint iLoop, iNumberOfItems;
  gulong ulSize;
  char* pString;

  printf("Hello World\n");

Last modified 12 years ago Last modified on Apr 14, 2007, 11:24:05 AM