Software Standards
Current Software Recommendations
The direction we are heading for our software standards, Application Programmer Interfaces (APIs) and packages that our software will utilise is as follows:
- Graphical User Interface (GUI): GTK+
- Libraries: Those used by GTK+ but particularly Glib in order to give hardware independence.
- Streaming Framework: GStreamer
- Programming Languages: C/C++ (both available depending on module and programmer preference)
- Our Open Source License: LGPL or an open source license that allows commercialization of the final product with propriety additions to the project. Project will allow it to be licensed under any of several licenses and the user/implementer can choose which license to use.
- Source Code Revision Control Repository: Git (see http://humanise.org/demining/rcs
The above should allow independence of environment. The final result should run on most Unix environments as well as Windows and Mac and yet still be easily converted to an embedded environment similar to the mobile phone. Regardless of this it will be easier if we specify a preferred development environment such as Ubuntu/Gnome/GTK+.
The recommendation to use GTK+ (particularly as opposed to Qt) for the GUI and not to otherwise specify an Operating System or Desktop environment was the most difficult decision. GTK+ is a very heavily used GUI. The high use of GTK+ was initially caused by licensing problems with Qt. In fact, without these licensing problems, GNOME and GTK+ probably would never have existed. The Jan 2009 decision to allow Qt to be licensed under LGPL takes these licensing problems away. The advantages of Qt for this project would have been its ease to use with the JAD Operating System along with better cross platform support (ie Between Unix, Windows and Mac) and support for embedded or mobile platforms. With Nokia now driving Qt development we should expect to see more support for embedded and mobile platforms.
GTK+ uses the same libraries as GStreamer so in this way they work in better together. GTK+ has the ability to run on windows and Apple Macs. That is how GIMP is implemented on these platforms. On the other hand cross platform support seems to be a focus for current Qt and Qt has better IDE support for GUI based programming. This project doesn't require the latest and greatest looking images but will benefit by simple cross platform functionality.
The other GUI option is to use wxWidgets (previously called wxWindows). While we haven't standardised on any true programmer Integrated Development Environment (IDE), one that looks very attractive is Code::Blocks. As this uses wxWidgets, it would be better for us to base our programs GUI on wxWidgets to fully utilize its capabilities.
Phonon is a possible alternative to GStreamer but if we used Phonen we would probably continue to use GStreamer as Phonon's back end. While intended to give independence from GStreamer, it would probably just change the dependance of the project to a dependance on Phonen. There doesn't seem to be any advantage.
Another question related to GStreamer is whether we should talk to it directly or go through an API such as OpenMax. While OpenMax is designed to give independance from the streaming back end like Phonon, it seems to have more of a focus on providing a higher level interface to that back end. The usefullness of this for this project needs more research.
The above recommendations are not yet fixed. Below is a Brief analysis of available software standards, Application Programmer Interfaces (APIs) and software packages. I have tried to layer this but the layers are a little arbitrary.
The various options that have been examined are described in the following pages
Integrated Development Environment (IDE)