Now that we've already talked about the problem and the technical approach we wish to take, we can make a list of goals for this project. Some may seem quite obvious at this point, but it's better to point them out anyway. Here it goes (in no particular order):
Of course some of these goals are long term ones and others might sound somewhat blurred, but this is normal since these are only guidelines in the end.
The next paragraphs explain how we want to achieve the non-technical part of these goals. Discussion is open, though.
We wish to reach the point where we have enough expertise, human and maybe financial resources to offer support to third-party projects and organizations in adopting technology neutral and interoperable solutions for sound processing tasks (not necessairly through the adoption of NASPRO).
This is obviously a long term goal.
A friendly social network should form around the project in order to enhance relations among these people. Thus, services like mailing lists, forums, fordwarding of contacts can help a lot.
This is a day-by-day commitment and we have already started looking in that direction.
It is important to say that all components of the architecture have to be developed not only with portability in mind, but also making it possible to adapt them to the conventions of every hardware/software combination to the largest possible extent.
We feel that giving away the source code is only a prerequisite to allow its understanding, easy integration and reusability in other software.
Apart from proper documentation, the architecture itself has to be designed to allow reusability of each component which can be logically and conveniently isolated from the rest.
The title says it all. As explained before, the more support today means the more support tomorrow, and also more fairness in terms of support in respect of each API.
Put it simply, it would be cool and would help developers a lot.
This doesn't mean the creation of new alternative APIs or the corruption of existing ones, but instead the promotion and/or support of new ideas which can enhance the development, performance or use of sound processing components in any way.
When there will be enough resources, we maybe could have a group of people focusing exclusively on this kind of stuff.
Our technology has to be easy to develop with and at the same time easy to work with.
All feedback has to be carefully handled to try to take into account everyone's needs and requests.
Performance should never be sacrificed, unless there is a very good reason for it.
Developers should always keep in mind that this software is developed for real-time performance, and that the less the user notices its existance, the better. Also they should remember that it is an infrastructure and not an end product.
All the code has to be carefully checked via extensive automated tests, and such tests should be always available at least to the distributors as well (in other words, the source packages should contain them, but it is not required that they get installed).
Contributed code has to be subject to a cycle of tests and reviews as well.
The code should be lean and clean, uniform, documented, should adopt wise algorithms and conform to the coding style conventions explained later on in this document.
For each part of the architecture there has to be hand written documentation covering its installation, use, development and hacking, as well as auto-generated reference documentation for its API whenever it offers one.
Furthermore we could set up a service to promote, link and/or distribute any kind of unofficial documentation (such as tutorials, benchmarks or thesis) written by people internal or external to the project.
The diffusion, acceptance and effectiveness of this framework highly depend on people being correctly informed about it.
We will try to do some correct, informative and respectful advertising in the places meant to be used for this purpose. We will also encourage people to promote and support the project, privately or publicly, on their own behalf (we won't take responsibility for what they might say).