Vortex Library have been implemented using only two dependencies: libglib-2.0 (http://www.gtk.org) (at least 2.6) and libxml-2.0 (http://www.xmlsoft.org). They are really common across GNU/Linux platforms and can be found easily on Microsoft Windows Platforms.

In order to activate the TLS profile support it is also required openssl (http://www.openssl.org) to be installed. This software is commonly found on every unix/GNU/Linux installation. Binaries are also available for Microsoft Windows platforms.

If you try to use Vortex Library on Windows platform, but using the CygWin environment, the previous information is not valid for your case.

Previous package are compiled against the Microsoft Runtime (msvcrt.dll) and every program or library running inside the cygwin environment is compiled against (or linked to) cygwin1.dll. If you mix libraries or programs linked to both libraries you will get estrange hang ups.

On cygwin environment use the libraries provided by the cygwin package installation system. Keep in mind that running Vortex Library over Cygwin will force you to chose the GPL license for your application because the cygwin1.dll is license under the GPL.

No proprietary (closed source) development can be done using Cygwin environment.

The BEEP Core definition (RFC3080 and RFC3081) defines what must or should be supported by any implementation. At this moment the Vortex Library support all sections including must and should requirements (including TLS and SASL profiles).

Vortex Library have been build using asynchronous sockets (not blocking model) with a thread model each one working on specific tasks. Once the Vortex Library is started it creates 3 threads apart from the main thread doing the following task:

Vortex Sequencer: its main purpose is to create the package sequencing, split user level message into frames, queue them into channel's buffer to be sent and signal Vortex Writer to do round robin sending. This process allows user space to not get blocked while sending message no matter how big they are.

Vortex Writer: its main purpose is to send already created frames by the Vortex Sequencer in a round robing fashion so starvation is avoided.

Vortex Reader: its main purpose is to read all frames for all channels inside all connections. It checks all environment conditions for a frame to be accepted: sequence number sync, previous frame with more fragment flag activated, properly frame format, and so on. Once the frame is accepted the Vortex Reader try to dispatch it using the Vortex Library frame dispatch schema.

Apart from the 3 threads created plus the main one, the Vortex Library creates a pool of threads already prepared to dispatch incoming frames inside user space function. The thread pool size can also be tweaked.