The project will consist of three parts, which are:
- libsyncml
The core library. All protocol related functions are kept here. Also, all connection related functions are in here.
- SySeEn
SySeEn stands for Sync Server Engine. This is the server module. It should be very small and basically an adaptor for the library to an SQL back-end. It also handles conflict resolving.
- vCardSync
Instead of writing a new client, an existing one is used: Gnomecard. vCardSync will be the adaptor from Gnomecard to libsyncml.
The last major decision is the choice of a programming language. For extensibility and reusability an object oriented approach seems reasonable. Counting only the currently most widespread languages this leaves a choice between C++, Java and Python. Java and Python are more portable, but when it comes to speed they fall far behind. Also, Java is known to be a huge memory hog. So the decision was for C++.