There's much to be said about
Flux. A lot of the most technical, hands-on information is in the Docs
section. Here, on the other hand, you'll find more theoretical information,
background and goals, a list of projects using Flux, benchmarks, and information
about the developers.
Background
Even the smallest program operates on some kind of data, reading and writing
structured formats. Larger (though not necessarily large) programs can
have features like event loops, interprocess communications, buffers and
logging facilities.
Programming or piecing together
this per-program framework can be a tedious and time-consuming duplication
of effort. You want to spend your time on an application's unique features,
not waste it on stuff like event loops that can handle multi-socket communications
and interface events without one thing locking up the other.
That's what prompted the development
of Flux. Certain tasks and problems were popping up repeatedly in my work,
and a generic remedy was in order. I started gathering the often-used
parts in a glue library, and called it, yes, Flux. Also, some code which
was strictly not glue, such as the IRC interface layer, found its way
into the lib.
Goals
- Simplify tasks.
Provide simplified APIs to solve many common programmatical problems,
while keeping more advanced functions available in API layers of increasing
complexity.
- Homogenize interfaces.
Unify operations which are functionally similar and access exceptions
through optional calls. Example: network sockets and interprocess pipes,
which are both streams that can be buffered, waited for, etc. Here,
the exceptions arise in the way the streams are established.
- Homogenize platforms.
Provide an environment that can be used to access OS funcions whose
implementations differ from system to system, homogenously. Target platforms
are as many Unix flavours as possible and, through Cygwin,
Windows.
Assumptions
- Application developers mostly
use a small subset of the functionality in each full-blown library
they link with. Example: A few selected algorithms from a crypto library
providing tons.
- Application developers want
to link with as few libraries as possible. Example: Largish GNOME-based
applications (this isn't as much work as you'd expect anymore, though,
thanks to the gnome-config script).
Thus, Flux tries to span quite
a large set of applications without providing extremely deep support for
them. The idea is that you can survive using only one scheme for symmetric
crypto, one for asymmetric crypto, etc. In this example, Flux will provide
a few selected, well-known and strong algorithms - namely, the ones most
likely to be useful. (Crypto isn't scheduled for implementation before
0.4.0, though). Read the plans for more
information.
Projects using Flux
Flux is used by the Conglomerate
document system, the FIDEL communication
enviroment, as well as several smaller projects. We'll be providing a
more complete list in the near future. If your project uses Flux, we'd
very much like you to tell us.
Benchmarks
We've recently started benchmarking Flux, both comparing different modes
of operation within Flux, and also comparing Flux with other libraries
and packages that provide overlapping functionality. The results so far
are extremely promising, and we'll be adding them to the benchmarks
page as more tests are completed.
Credits
Hans Petter Jansson <hpj@simplemente.net>
is the architect and lead developer of Flux. Andrei Zmievski <andrei@ispi.net>
works on general development, with a focus on optimizations. Joakim
Ziegler <joakim@simplemente.net>
handles all sorts of miscellany around the project, including Python
bindings, licensing and marketing issues, and the design and maintenance
of these web pages. Simplemente
are the main sponsors of the project, employing Hans Petter and Joakim
to work on it (amongst other things). Belinda
Laws <boysdontcry@zombieworld.com>
is the artist behind the Flux nurse illustrations.
|