The NASPRO core library is the inner part of the NASPRO framework and its foundation. Its purpose is to provide a limited and integrated set of functions on which portable and full-featured modular subsystems can be easily built.
Features
What makes it different from similar tools is that it aims at offering typically higher level features. Here's a list:
- Better integration between modules and hosts: having one unified API for some high level components of both modules and hosts makes it possible to reach higher level of integration and makes it easier to program;
- Layering: designed to allow painless stratification of different classes of modules and related handling code;
- Wider concept of module: native (and thus more consistent) support for modules made of several files of different nature (data, code, etc.);
- Designed for multi-threaded programming: contains (and exports) several thread synchronization mechanisms and is mostly thread-safe and tuned for performance in multi-threaded environments;
- High performance: designed to reduce the impact of modularity on performance as much as possible, especially outside of the initialization, module loading and finalization procedures, and suitable for real-time applications;
- Message reporting and logging facilities: hierarchical routing system for text messages and status notifications with the possibility to automatically log everything;
- Internationalization and localization support: integrated i18n and l10n support;
- Portable: entirely written in strict ISO/ANSI C (ISO/IEC 9899:1990, also known as C89) and contains little OS-dependent code, which is itself separated from the rest of the library to facilitate porting and maintaining;
- Coherent with OS's conventions: doesn't try to impose its policies (file placing, etc.), but instead tries to respect the OS design and its conventions;
- Fine-grained control: provides special functions for fine-grained control of certain issues like memory handling, thread synchronization and message reporting;
- Information- and control-sensitive: made so that hosts (and thus users) can be always informed on what's happening and/or what happened and are less likely to loose information or control.
Future directions
As it is designed, there are several interesting enhancements which is possible to do on such a library. These are some ideas which still have to be discussed and considered properly:
- Language bindings: provide bindings for other compiled programming languages (such as C++) and maybe interpreted programming languages (Python, Perl, etc.) for hosts and even for modules. This can be done semi-transparently to hosts, so that support for modules programmed in new languages can be added time by time painlessly. Perhaps also add the possibility for host libraries/applications to provide functions to use non-supported programming languages;
- Easier module distribution and usage: add support for tar, zip and similar archives, so that multi-file modules can be distributed as just one single file and can be used without extracting them. Maybe develop some NASPRO core-based application which handles module collections (checking, installing, etc.)
Licensing issues
The first development releases are very likely to be distributed under the GNU General Public License version 2 or later, but it's not impossible that in some future there could be a shift to some more relaxed free software license such as the GNU Lesser General Public License or even the BSD License.
This is because the audio software world is dominated by proprietary software, so it is worth spending some time considering whether this kind of software is strictly necessary to seriously work at all, or if it's not the case.
Anyway this decision is not going to be taken very soon, since we're in a very early development stage.